Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C"— Μεταγράφημα παρουσίασης:

1 ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
Δομές (structs) ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

2 Δομές - Structures Οι πίνακες διατηρούν στοιχεία του ιδίου τύπου
Τι θα συμβεί αν θέλουμε να διατηρήσουμε ενιαία στοιχεία που ανήκουν σε διαφορετικούς τύπους δεδομένων; Για παράδειγμα: ο τίτλος, ο συνθέτης και η τιμή CD σε ένα κατάστημα Το είδος κινητήρα ενός οχήματος, ο κυβισμός του, η ισχύς του και η χώρα κατασκευής Το όνομα, ο αριθμός μητρώου και οι βαθμοί ενός φοιτητή ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

3 Δομές (structures) Μια δομή (struct) είναι μια μέθοδος αποθήκευσης δεδομένων που σχεδιάζεται από το χρήστη, ώστε να καλύπτει τις ανάγκες του προγράμματος. Είναι μια συλλογή μιας ή περισσοτέρων μεταβλητών (σταθερού πλήθους), ίδιου ή συνήθως διαφορετικού τύπου, που ομαδοποιούνται κάτω από ένα κοινό όνομα, ώστε να είναι εύκολη η διαχείρισή τους. Μία δομή είναι μία ΔΟΜΗ ΔΕΔΟΜΕΝΩΝ που συντίθεται από πολλαπλούς τύπους, καθένας από τους οποίους είναι γνωστός ως ΜΕΛΟΣ (member) της δομής. Κάθε μέλος έχει το δικό του μοναδικό όνομα και έναν προσδιοριζόμενο τύπο ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

4 Δομές (structures) - συνέχεια
Οι μεταβλητές που απαρτίζουν μια δομή μπορούν να είναι του ίδιου ή διαφορετικού τύπου (διαφορά με τους πίνακες). Σε μια δομή μπορούν να περιλαμβάνονται όλοι οι γνωστοί τύποι δεδομένων της C, καθώς και άλλες δομές. Παραδείγματα δήλωσης δομών: struct coord { float x,y; }; struct complex { float real,imaginary; }; ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

5 Παραδείγματα struct coord { int x; int y; }
Δήλωση μεταβλητών αυτού του τύπου - struct coord first, second; Δήλωση αρχικών τιμών σε μια δομή first={12,17}; Αναφορά στα μέλη μιας δομής first.x, second.y Όνομα της δομής (tag) ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

6 Δήλωση Structures Κάθε δομή χρειάζεται ένα όνομα struct friendStr {
char name[MAXNAME]; long phoneNumber; char street[MAXSTREET]; }; Τα συστατικά της δομής αναφέρονται ως μέλη (members) Η δήλωση καθορίζει τον τύπο (type of structure), αλλά ΔΕΝ δημιουργεί μεταβλητή ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

7 Δήλωση structures Για τη δημιουργία μιας δομής στη μνήμη του υπολογιστή απαιτείται η δήλωση μιας structure variable: struct friendStr f; Όνομα της μεταβλητής Όνομα του τύπου ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

8 Προσπέλαση σε structures
Για να υπάρχει πρόσβαση σε ένα μέλος μιας δομής χρησιμοποιείται ο τελεστής '.': struct friendStr f; …… f.name f.phoneNumber f.street Αποκτάται πρόσβαση στην τιμή του μέλους name ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

9 Αρχικοποίηση δομών struct friendStr { char name[MAXNAME];
long phoneNumber; char street[MAXSTREET]; }; struct friendStr f; scanf("%s",f.name); scanf("%ld",&f.phoneNumber); scanf("%s",f.street); ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

10 Προσπέλαση structures
struct friendStr sarah; scanf("%s",f.name); scanf("%ld",&f.phoneNumber); scanf("%s",f.street); printf("Name is %s\n",f.name); printf("Phone is %d\n",f.phoneNumber); printf("Street is %s\n",f.street); ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

11 Προσπέλαση structures
Ένα μέλος μιας δομής είναι μια κανονική μεταβλητή εκτός από τον τρόπο πρόσβασης : Απαιτείται το όνομα της δομής να υπάρχει πριν από το όνομα της μεταβλητής με τελεστή διαχωρισμού την τελεία f.phoneNumber = ; strcpy(f.name,"Sarah Finch"); strcpy(f.street,"Firthsmith St"); ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

12 Απευθείας δήλωση μεταβλητών
struct coord { int x; int y; } first, second; ΠΑΡΑΔΕΙΓΜΑΤΑ : struct-1.cpp, struct-2.cpp ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

13 Παρατηρήσεις στις δομές
Οι μεταβλητές τύπου struct δεν μπορούν να συγκριθούν Μπορούν να γίνουν συγκρίσεις μόνον με τα μέλη των δομών if (studA == studB) { printf(“Duplicate data.\n”); } if (strcmp(studA.lastname, studB.lastname) == 0 && (studA.mark == studB.mark) ) { printf(“Duplicate data.\n”); } ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

14 Παρατηρήσεις στις δομές
Μπορούμε να δηλώσουμε μια δομή καθώς και στιγμιότυπα (instances) της δομής struct StudentRec { char lastname[MAXLEN]; float mark; }; struct StudentRec studA, studB, class[MAXN]; ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

15 Δομές που περιέχουν δομές
struct rectangle { struct coord top_left; struct coord bottom_right; } mybox; …… mybox.top_left.x=10; mybox.top_left.y=25; mybox.bottom_right.x=100; mybox.bottom_right.y=180; ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

16 Δομές που περιέχουν πίνακες
struct data { int x[4]; char y[8]; }; struct data record; Παράδειγμα : struct-3.cpp record.x[0] record.x record.y record.y[7] record ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

17 Πίνακες δομών (arrays of structures)
struct phone_list { char fname[10]; char lname[12]; char phone[8]; }; struct phone_list list[500]; list[0] list[1] list[2] ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

18 Πίνακες δομών Μπορούμε να έχουμε έναν πίνακα δομών (array of structs)
Κάθε στοιχείο του πίνακα είναι μια ολόκληρη δομή, με όλα τα μέλη της. Για την προσπέλαση μιας τιμής, απαιτείται να γνωρίζουμε το ακριβές στοιχείο του πίνακα καθώς και ποιο είναι το μέλος της δομής : studentList[0].name studentList[i].id ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

19 Array of structs studentList id:123456789 name: "fred" id:123456788 1
name: "ralph" id: name: "fong" id: name: "rachel" 1 2 3 ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

20 studentList[0]gives you the whole struct
Array of structs studentList[0]gives you the whole struct studentList id: name: "fred" id: name: "ralph" id: name: "fong" id: name: "rachel" 1 2 3 ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

21 studentList[3].name gives you the struct member
Array of structs studentList id: name: "fred" id: name: "ralph" id: name: "fong" id: name: "rachel" 1 2 3 studentList[3].name gives you the struct member ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

22 Arrays of structs struct { long int id; char name[20]; } Student; ...
Student sem2Class[150]; ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

23 Arrays of structs Student sem2Class[MAXCLASS]; int i;
for (i=0;i<MAXCLASS;i++) { printf("enter name\n"); scanf("%s",sem2Class[i].name); printf("enter id\n"); scanf("%d",&(sem2Class[i].id)); } name of array ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

24 Arrays of structs Student sem2Class[MAXCLASS]; int i;
for (i=0;i<MAXCLASS;i++) { printf("enter name\n"); scanf("%s",sem2Class[i].name); printf("enter id\n"); scanf("%d",&(sem2Class[i].id)); } index into array ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

25 the structure at this position in the array
Arrays of structs Student sem2Class[MAXCLASS]; int i; for (i=0;i<MAXCLASS;i++) { printf("enter name\n"); scanf("%s",sem2Class[i].name); printf("enter id\n"); scanf("%d",&(sem2Class[i].id)); } the structure at this position in the array ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

26 name of the member of the structure at that position in the array
Arrays of structs Student sem2Class[MAXCLASS]; int i; for (i=0;i<MAXCLASS;i++) { printf("enter name\n"); scanf("%s",sem2Class[i].name); printf("enter id\n"); scanf("%d",&(sem2Class[i].id)); } name of the member of the structure at that position in the array ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

27 Δομές ως Παράμετροι Συναρτήσεων
Μπορούμε να μεταβιβάσουμε δομές ως παραμέτρους σε συναρτήσεις. Μεταβίβαση ως παράμετρος: void foo(struct point x, struct point y) {…} Ο τύπος της παραμέτρου μπορεί να περιέχει και τη δεσμευμένη λέξη struct ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

28 Οι συναρτήσεις μπορούν να επιστρέφουν δομές.
struct point createPoint(int a, int b) { struct point temp; temp.x = a; temp.y = b; return temp; } ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

29 Παράδειγμα struct σε συνάρτηση
#include <stdio.h> struct point { int x; int y; }; void getStruct(struct point); void output(struct point); void main( ) { struct point y = {0, 0}; getStruct(y); output(y); } void getStruct(struct point p) { scanf("%d", &p.x); scanf("%d", &p.y); printf("%d, %d", p.x, p.y); } void output(struct point p) { Χρησιμοποιούμε πολλαπλές εντολές scanf, μία για κάθε μέλος της δομής Ποιες θα είναι οι τιμές για τα μέλη της δομής y; ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

30 ΔΟΜΕΣ ΚΑΙ ΔΕΙΚΤΕΣ (POINTERS)
Όπως συμβαίνει με όλους τους τύπους μεταβλητών μπορώ να ορίσω ένα δείκτη σε δομή. Μπορώ επίσης να ορίσω δείκτες ως μέλη μιας δομής! ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

31 ps=&s; (απόδοση αρχικής τιμής στον δείκτη, στην main() )
struct student { char name[30]; int studnum; } s; struct student { } s , *ps; ps=&s; (απόδοση αρχικής τιμής στον δείκτη, στην main() ) ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

32 Δομές και Δείκτες (structures and pointers)
δείκτες ως μέλη μιας δομής struct data { int *value; int *rate; } first; first.value=&cost; (Η ΔΙΕΥΘΥΝΣΗ ΤΗΣ ΑΡΧΗΣ ΤΗΣ cost αντιστοιχίζεται στην μεταβλητή value) first.rate=&x; (Η ΔΙΕΥΘΥΝΣΗ ΤΗΣ ΑΡΧΗΣ ΤΗΣ x αντιστοιχίζεται στην μεταβλητή rate) ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

33 structures and pointers
struct msg { char *p1; char *p2; } myptrs; myptrs.p1=“Programming in C”; myptrs.p2=“DUTH Publications 2015”; ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

34 ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

35 Δείκτες σε δομές (pointers to structures)
struct part { int number; char name[10]; }; struct part *p_part; Ο τελεστής * ορίζει ότι ο p_part είναι ένας δείκτης στον τύπο part Ο δείκτης p_part μπορεί να οριστεί τώρα; ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

36 Απάντηση Ο δείκτης δεν μπορεί να οριστεί τώρα διότι η δομή part έχει οριστεί αλλά δεν υπάρχει κάποια μεταβλητή αυτού του τύπου Ένας δείκτης χρειάζεται μια διεύθυνση μνήμης στην οποία δείχνει, έτσι πρέπει να οριστεί μια μεταβλητή του τύπου part πριν οτιδήποτε δείξει σε αυτήν π.χ. struct part id; Τώρα μπορεί να πραγματοποιηθεί η αρχικοποίηση του δείκτη (pointer initialization) : p_part=&id; ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

37 Ο δείκτης δείχνει στο πρώτο byte της δομής
ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

38 Ο δείκτης p_part δείχνει στη δομή id και έτσι ο
Ο δείκτης p_part δείχνει στη δομή id και έτσι ο *p_part αναφέρεται στο id. Πρόσβαση στα μέλη της δομής : (*p_part).number=100 Οι παρενθέσεις είναι απαραίτητες διότι ο τελεστής (.) έχει μεγαλύτερη προτεραιότητα από τον τελεστή (*) Με χρήση του indirect membership operator -> p_part -> number=100 ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

39 str.member (*p_str).member p_str->member
ΠΑΡΑΤΗΡΗΣΕΙΣ Αν str είναι μια δομή (structure), member είναι ένα μέλος (στοιχείο) της δομής και p_str είναι ένας δείκτης (pointer) στο str , τότε οι επόμενες εκφράσεις είναι ισοδύναμες : str.member (*p_str).member p_str->member ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

40 ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

41 Χρήση πινάκων και δεικτών
Some struct: s[13] An item in some struct: s[4].age A character in some name: s[7].name[3] Address of some struct: &(s[2]) An item in some struct pointed to: (*sptr).age Address of above: &((*sptr).age) This is an address within a struct ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

42 Παράδειγμα (χωρίς χρήση pointers)
#include <stdio.h> #include <math.h> /* needed to use sqrt() square root */ struct coord { float x,y; }; /* declare structure coord as having x and y members */ /* function prototypes */ float distance(struct coord a, struct coord b); coord getcoord(); ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

43 void main() { coord origin, cursor; float separation; printf("enter details for origin:\n"); origin=getcoord(); printf("enter details for cursor:\n"); cursor=getcoord(); separation=distance(origin,cursor); printf("the distance between origin and cursor is %f\n",separation); } ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

44 float distance(coord a, coord b){ /* calculate distance between a and b */ float z,vert,horiz; /* z = distance, vert = y1 - y2, horiz = x1 - x2 */ horiz=a.x - b.x; /* the horizontal distance */ vert=a.y - b.y; /* the vertical distance */ /* calculate z as the hypotenuse of a right angle triangle */ z=sqrt((horiz*horiz) + (vert*vert)); /* Pythagorus theorem: */ return z; /* z*z = x*x + y*y */ } ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

45 coord getcoord(){ /. note returned type is struct coord. / /
coord getcoord(){ /* note returned type is struct coord */ /* prompts for and returns a coordinate */ coord temp; printf("Enter x and y coordinates \n"); scanf_s("%f%f",&temp.x,&temp.y); return temp; } ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

46 Παράδειγμα (με χρήση pointers)
#include <stdio.h> #include <math.h> /* needed to use sqrt() square root */ struct coord { float x,y; }; /* function prototypes*/ float distance(coord *a, coord *b); /* a and b are now pointers to coord */ void getcoord(coord *t); /* inputs coordinate through coord* pointer t */ ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

47 void main() { coord origin, cursor,. orig,
void main() { coord origin, cursor, *orig,*curs; orig=&origin; curs=&cursor; /* store addresses in pointers orig and curs */ float separation; printf("enter details for origin:\n"); getcoord(orig); printf("enter details for cursor:\n"); getcoord(curs); separation=distance(orig,curs); printf("the distance between origin and cursor %f\n" ,separation); } ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

48 float distance(coord *a, coord *b){
/* calculate distance between a and b */ float z,vert,horiz; /* z = distance, vert = y1 - y2, horiz = x1 - x2 */ horiz=a->x - b->x; /* horizontal distance note -> pointer syntax */ vert=a->y - b->y; /* the vertical distance */ /* calculate z as the hypotenuese of a right angle triangle */ z=sqrt((horiz*horiz) + (vert*vert)); /* pythagorus theorem: */ return z; /* z*z = x*x + y*y */ } ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

49 void getcoord(coord *t) {
/* inputs x-y coordinate using pointers */ printf("please enter x and y coordinates\n"); scanf_s("%f%f",&t->x,&t->y); /* -> has higher precedence than & */ } ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

50 Δήλωση ενός πίνακα δομών τύπου coord:
struct coord { float x,y; } ; coord graph[10]; Εισαγωγή δεδομένων: for(int i=0;i<10;i++){ printf("Enter x value for coordinate%d\n" ,i+1); scanf("%f",&graph[i].x); printf("Enter y value for coordinate%d\n" ,i+1); scanf("%f",&graph[i].y); } ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

51 Εισαγωγή δεδομένων με χρήση pointers:
for(int i=0;i<10;i++) { printf("Enter x value for coordinate%d\n" ,i+1); scanf("%f",&(graph+i)->x); /* -> has higher precedence than & */ printf("Enter y value for coordinate%d\n" ,i+1); scanf("%f",&(graph+i)->y); } ΔΠΘ - ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 05

52 Παραδείγματα struct-4.cpp, struct-5.cpp, struct-6.cpp, struct-7.cpp,


Κατέβασμα ppt "ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C"

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google