Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Προγραμματισμός ΗΥ Ενότητα 8: Δομές. Διδάσκων: Ηλίας Κ Σάββας, Αναπληρωτής Καθηγητής. Τμήμα Μηχανικών Πληροφορικής,

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Συναρτήσεις Κληση/Επιστροφη Παραμετροι
Advertisements

ΣΥΝΑΡΤΗΣΕΙΣ.
Ποιότητα Λογισμικού Ενότητα 6: Μέτρηση της κάλυψης των ελέγχων. Διδάσκων: Γεώργιος Κακαρόντζας, Καθηγητής Εφαρμογών. Τμήμα Μηχανικών Πληροφορικής, Τεχνολογικής.
Ποιότητα Λογισμικού Ενότητα 4: Παράδειγμα Ελέγχου. Διδάσκων: Γεώργιος Κακαρόντζας, Καθηγητής Εφαρμογών. Τμήμα Μηχανικών Πληροφορικής, Τεχνολογικής Εκπαίδευσης.
Δείκτες (Pointers) – Δομές (Structs)
Ποιότητα Λογισμικού Ενότητα 3: Σουίτες Ελέγχων. Διδάσκων: Γεώργιος Κακαρόντζας, Καθηγητής Εφαρμογών. Τμήμα Μηχανικών Πληροφορικής, Τεχνολογικής Εκπαίδευσης.
Ποιότητα Λογισμικού Ενότητα 2: Παραμετρικοί έλεγχοι στο JUnit. Διδάσκων: Γεώργιος Κακαρόντζας, Καθηγητής Εφαρμογών. Τμήμα Μηχανικών Πληροφορικής, Τεχνολογικής.
Μεταγλωττιστές (Compilers) (Θ) Ενότητα 8: Πίνακας Συμβόλων Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής ΤΕ Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας.
Διδακτική Πληροφορικής
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 4: Συμβολοσειρές και Δομές Ελέγχου. Διδάσκων: Νικόλαος Θ Λιόλιος,
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 9: Κληρονομικότητα. Διδάσκων: Νικόλαος Θ Λιόλιος, Καθηγητής. Τμήμα.
Δομές Δεδομένων και Αρχεία Ενότητα 7: Η δομή Στοίβα Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας.
Δομές Δεδομένων και Αρχεία Ενότητα 10: Κυκλικά και Διπλά Συνδεδεμένη Λίστα Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I.
Δομές Δεδομένων και Αρχεία
Διδακτική Πληροφορικής
Διδακτική Πληροφορικής Ενότητα 2: Η εξέλιξη των εργαλείων της Εκπαίδευσης. Διδάσκων: Γεώργιος Σούλτης, Επίκουρος Καθηγητής. Τμήμα Μηχανικών Πληροφορικής,
Δομές Δεδομένων και Αρχεία Ενότητα 4: Ευρετηριασμένα Αρχεία Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 6: Πίνακες και Παράμετροι στην main. Διδάσκων: Νικόλαος Θ Λιόλιος,
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 2: Μεταβλητές και Τύποι Δεδομένων. Διδάσκων: Νικόλαος Θ Λιόλιος,
Προγραμματισμός ΗΥ Ενότητα 6: Δισδιάστατοι πίνακες.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Προγραμματισμός ΗΥ Ενότητα 2: Συναρτήσεις Εισόδου ⁄ Εξόδου. Διδάσκων: Ηλίας Κ Σάββας, Αναπληρωτής Καθηγητής.
Δομές Δεδομένων και Αρχεία
Έλεγχος Ροής με την Εντολή Επανάληψης FOR 1/9
Δομές Δεδομένων και Αρχεία Ενότητα 8: Η δομή Ουρά Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 8: Κατασκευαστές. Διδάσκων: Νικόλαος Θ Λιόλιος, Καθηγητής. Τμήμα.
Προγραμματισμός & Εφαρμογές Η/Υ (Θ) Ενότητα 10: Εισαγωγή στο Προγραμματισμό με το MatLab 7.x (Μέρος 1 ο ) Δρ. Β.Χ. Μούσας, Αναπληρωτής Καθηγητής Τμήμα.
Αντικειμενοστραφής Προγραμματισμός Ι
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 10: Αφηρημένες τάξεις. Διδάσκων: Νικόλαος Θ Λιόλιος, Καθηγητής.
Τεχνολογία Ξύλου 1 Ενότητα 13: Ποιότητα και Πιστοποίηση Ξυλείας Διδάσκων: Δρ. Μιχάλης Σκαρβέλης, Αναπληρωτής Καθηγητής. Τμήμα Σχεδιασμού και Τεχνολογίας.
Προγραμματισμός & Εφαρμογές Η/Υ (Θ) Ενότητα 11: Εισαγωγή στο Προγραμματισμό με το MatLab 7.x (Μέρος 2 ο ) Δρ. Β.Χ. Μούσας, Αναπληρωτής Καθηγητής Τμήμα.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Προγραμματισμός ΗΥ Ενότητα 4: Επαναληπτικές δομές. Διδάσκων: Ηλίας Κ Σάββας, Αναπληρωτής Καθηγητής. Τμήμα Μηχανικών.
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Εκπαιδευτικά Προγράμματα με Χρήση Η/Υ ΙΙ Θέμα «παιγνίδια» (website address) Διδάσκουσα: Καθηγήτρια Τζένη.
Αρχές Διοίκησης και Διαχείρισης Έργων Ενότητα 12: Οικονομική Διαχείριση Έργων – Ταμειακές Ροές. Διδάσκων: Φιτσιλής Παναγιώτης, Καθηγητής. Τμήμα Διοίκησης.
Διοίκηση Ανθρωπίνων Πόρων Ενότητα 3: Προσέλκυση Ανθρώπινου Δυναμικού. Διδάσκων: Γεώργιος Ασπρίδης, Επίκουρος Καθηγητής. Τμήμα Διοίκησης Επιχειρήσεων.
ΗΛΕΚΤΡΟΝΙΚΟ ΕΜΠΟΡΙΟ Ενότητα 12 : Η χρήση της MySQL στο Ηλεκτρονικό εμπόριο (ΙΙI) Ιωάννης Τσούλος Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου.
Ενότητα 7 : Χρήση Πινάκων στο Ηλεκτρονικό εμπόριο (I) Ιωάννης Τσούλος
Τεχνολογία και Προγραμματισμός Υπολογιστών
Αντικειμενοστραφής Προγραμματισμός Ι
Προγραμματισμός κινητών συσκευών
Δομές.
Ενότητα 5 : Δομές Δεδομένων και αφηρημένοι
Χρονικός Προγραμματισμός Έργων (Εργαστήριο)
Προγραμματισμός ΗΥ Ενότητα 11: Header Files. Διδάσκων: Ηλίας Κ Σάββας,
Τεχνολογία και Προγραμματισμός Υπολογιστών
Χρονικός Προγραμματισμός Έργων (Εργαστήριο)
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΣΥΝΑΡΤΗΣΕΙΣ (Functions)
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
Ενότητα 9: Δείκτες και Δυναμική Διαχείριση Μνήμης.
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
Χρονικός Προγραμματισμός Έργων (Εργαστήριο)
Ενότητα 2 : Το σύστημα βάσεων δεδομένων MySQL (II) Ιωάννης Τσούλος
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
Ηλεκτρικές Μηχανές ΙΙ Ενότητα 5: Κανονικοποιημένες Καμπύλες
Προγραμματισμός κινητών συσκευών
Αντικειμενοστραφής Προγραμματισμός ΙΙ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
Επιχειρησιακές Επικοινωνίες
ΠΑΡΟΥΣΙΑΣΕΙΣ ΜΑΘΗΜΑΤΟΣ ΠΙΘΑΝΟΤΗΤΕΣ(4)
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΠΑΡΟΥΣΙΑΣΕΙΣ ΜΑΘΗΜΑΤΟΣ ΠΙΘΑΝΟΤΗΤΕΣ(5)
ΑΝΑΓΝΩΡΙΣΗ ΠΡΟΤΥΠΩΝ ΝΕΥΡΩΝΙΚΑ ΔΙΚΤΥΑ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
Επιχειρησιακές Επικοινωνίες
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
Προγραμματισμός ΗΥ Ενότητα 12: Αρχεία Δομών. Διδάσκων: Ηλίας Κ Σάββας,
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
Μεταγράφημα παρουσίασης:

Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Προγραμματισμός ΗΥ Ενότητα 8: Δομές. Διδάσκων: Ηλίας Κ Σάββας, Αναπληρωτής Καθηγητής. Τμήμα Μηχανικών Πληροφορικής, Τεχνολογικής Εκπαίδευσης.

Άδειες χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται στην παρακάτω άδεια χρήσης Creative Commons (C C): Αναφορά δημιουργού (B Y), Μη εμπορική χρήση (N C), Μη τροποποίηση (N D), 3.0, Μη εισαγόμενο. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3

Σκοποί ενότητας Ο αναγνώστης να μπορεί να: 1) αντιληφθεί με ευκρίνεια την έννοια της δομής δεδομένων. 2) χρησιμοποιεί δομές σε συναρτήσεις και πίνακες. Δομές4

Περιεχόμενα ενότητας 1) Δομές δεδομένων 2) Φωλιασμένες δομές 3) Δομές σαν παράμετροι συναρτήσεων α) Επιστροφή δομών 4) Πίνακες δομών Δομές5

Δομές δεδομένων  Μερικές φορές, ένα δεδομένο αποτελείται από πολλές μικρότερες πληροφορίες, οι οποίες δεν είναι του ίδιου τύπου δεδομένων, (επομένως δεν μπορούμε να χρησιμοποιήσουμε ένα πίνακα).  Η C μας επιτρέπει να συσχετίζουμε λογικά δεδομένα πληροφοριών, οι οποίες μπορεί να διαφέρουν στον τύπο τους, προς ένα νέο τύπο δεδομένων: structure.  Σε αντίθεση με τους πίνακες, τα δεδομένα ενός structure, μπορεί να είναι διαφορετικού τύπου.  Παράδειγμα: Φοιτητής = {Αριθμός_Μητρώου, Επίθετο, Όνομα, Βαθμοί}. Δομές6

Ορίζοντας μία δομή (structure) struct student_rec { int ID; char last_name[20]; char first_name[10]; int scores[5]; } ; struct time_rec { int hours; int mins; int secs; } ; Η περιγραφή μίας δομής (template) αποτελείται από την λέξη struct, και στην συνέχεια δίνουμε το όνομα της δομής  structure tag. Μετά το όνομα της δομής, περιγράφεται το κάθε αντικείμενο – πεδίο, της δομής, (τύπος δεδομένων και όνομα), μέσα σε αγκύλες {... }. Κάθε πεδίο έχει ένα όνομα, και φυσικά έναν τύπο δεδομένων. Η περιγραφή της δομής, δεν αποθηκεύει στην μνήμη κάποια μεταβλητή. Απλώς, ορίζεται ένας νέος τύπος δεδομένων. Δομές7

Χρήση δομών struct student_rec st1, st2, st[10]; struct time_rec t1, t2; st1.ID = 1234; strcpy(st1.first_name, “Mary”); st1.scores[0] = 3; st1.scores[1] = 2; for (i=0; i<5; i++) st2.scores[i] = 0; t.hours = 14; t.mins = 20; t.secs = 12; Δήλωση μεταβλητών με τύπο δεδομένων, ότι η ήδη ορισθείσα δομή Τα πεδία της κάθε δομής, μπορούν να χρησιμοποιηθούν με τον χαρακτήρα επιλογής μέλους, - μία τελεία! Δομές8

Αρχικοποίηση δομών struct date_of_birth { int month; int day; int year; }; struct date_of_birth bd = {10, 11, 1990}; struct date_of_birth Mary, Sue; ή bd.month = 10; bd.day = 11; bd.year = 1990; Δομές9

Απόδοση τιμής Εάν δύο μεταβλητές έχουν τον ίδιο τύπο δεδομένων, είναι δυνατή η απόδοση, όλων μαζί των τιμών της μίας δομής σε μία άλλη, αλλά και ανά πεδίο ξεχωριστά. Sue = bd; Mary = Sue; Mary.year -= 10; Sue = ? Mary = ? Sue = {10, 11, 1990} Mary = {10, 11, 1980} Δομές10

Παράδειγμα προγράμματος (1 από 2) Η δομή date_of_birth, θα δηλωθεί σαν ΚΑΘΟΛΙΚΉ μεταβλητή. Επομένως, θα είναι ΟΡΑΤΉ σε κάθε συνάρτηση! #include struct date_of_birth { int month; int day; int year; }; int main() { struct date_of_birth Sue, Mary; printf("\n Εισαγωγή μήνα, μέρας και έτους γέννησης της Sue: "); scanf("%d %d %d", &Sue.month, &Sue.day, &Sue.year); Mary = Sue; printf("\n\n Τα γενέθλια της Mary είναι..."); printf("\n Μήνας : %4d", Mary.month); printf("\n Ημέρα : %4d", Mary.day); printf("\n Έτος : %4d \n\n", Mary.year); return 0; } Δομές11

Παράδειγμα προγράμματος (2 από 2) Όμως εδώ, η δομή date_of_birth, θα δηλωθεί σαν ΤΟΠΙΚΉ μεταβλητή. Επομένως, θα είναι ΟΡΑΤΉ μόνο στη συνάρτηση main! #include int main() { struct date_of_birth { int month; int day; int year; }; struct date_of_birth Sue, Mary; printf("\n Εισαγωγή μήνα, μέρας και έτους γέννησης της Sue: "); scanf("%d %d %d", &Sue.month, &Sue.day, &Sue.year); Mary = Sue; printf("\n\n Τα γενέθλια της Mary είναι..."); printf("\n Μήνας : %4d", Mary.month); printf("\n Ημέρα : %4d", Mary.day); printf("\n Έτος : %4d \n\n", Mary.year); return 0; } Δομές12

Μέγεθος δομής  Το μέγεθος μίας δομής (bytes), μπορεί να προσδιορισθεί από τον τελεστή sizeof().  Η παράμετρος του τελεστή sizeof(?), μπορεί να είναι μία μεταβλητή τύπου δομής, ή το όνομα της ίδιας της δομής.  s1 = sizeof(date_of_birth); s1  12  s2 = sizeof(Sue); s2  12 Δομές13

Φωλιασμένες δομές (δομές σε δομή) Μία φωλιασμένη δομή, ορίζεται σαν μία δομή, της οποίας ένα ή περισσότερα πεδία της, είναι επίσης δομές. Οι φωλιασμένες δομές, είναι πολύ χρήσιμες, γιατί επιτρέπουν την δημιουργία ΙΕΡΑΡΧΙΚΏΝ δομών. Δομές14

Φωλιασμένες δομές: Παραδείγματα  struct Student s;  strcpy(s.Last_name, “ABCDEF”);  s.birthday.year = 1984;  s.birthday.month = 1;  s.birthday.day = 24; Δομές15

Άσκηση 1  Γράψτε ένα πρόγραμμα με χρήση μίας δομής, που να επιτρέπει στον χρήστη να εισάγει, την ημερομηνία γέννησης ενός ατόμου, (day, month, year). Στην συνέχεια, να εκτυπώνει την ημερομηνία αυτή. Δομές16

Άσκηση 1: Πρόγραμμα #include struct date_of_birth { int month; int day; int year; }; int main() { struct date_of_birth person; printf("\n Εισαγωγή μήνα, ημέρας και έτους γέννησης ενός ατόμου: "); scanf("%d %d %d", &person.month, &person.day, &person.year); printf("\n\n Τα γενέθλια αυτού του ατόμου είναι..."); printf("\n : %2d %2d %4d”, person.month, person.day, person.year); return 0; } Η εκτύπωση θα είναι: Τα γενέθλια αυτού του ατόμου είναι: 23/10/1990 Δομές17

Δομές σαν παράμετροι συναρτήσεων  Ανεξάρτητα πεδία δομών, μπορούν να χρησιμοποιηθούν σαν παράμετροι, σε συναρτήσεις όπως και οι απλές μεταβλητές: int increase_day, και μέσα σε παρενθέσεις, (int Person.day); Κλήση της συνάρτησης: Sue.day = increase_day, και μέσα σε παρενθέσεις, (Person.Mary.day);  Αλλά και ολόκληρες μεταβλητές δομών, μπορούν να χρησιμοποιηθούν σαν παράμετροι: void display_birthday, σε παρενθέσεις, (struct date_of_birth); Κλήση της συνάρτησης: display_birthday, και σε παρενθέσεις (Sue); Δομές18

Άσκηση 2  Να ορισθεί ένα τρίγωνο σαν μία νέα δομή, η οποία να περιέχει τα τρία μήκη των πλευρών ενός τριγώνου, (a, b, c). Στην συνέχεια, να γράψετε ένα πρόγραμμα, το οποίο να υπολογίζει την περίμετρο ενός τριγώνου, με χρήση συνάρτησης.  Περίμετρος: t = a + b + c Δομές19

Άσκηση 2: Πρόγραμμα (1 από 2) #include struct Triangle { float a; float b; float c; }; float perimeter(struct Triangle); int main() { struct Triangle T; float Per; printf("\n Εισαγωγή των 3 μηκών των πλευρών ενός τριγώνου: "); scanf("%f %f %f", &T.a, &T.b, &T.c); Δομές20

Άσκηση 2: Πρόγραμμα (2 από 2) Per = perimeter(T); printf("\n\n Περίμετρος = %.4f \n\n", Per); return 0; } float perimeter(struct Triangle triangle) { float t; /* τοπικές μεταβλητές */ t = triangle.a + triangle.b + triangle.c; return t; } T: παράμετρος, triangle : τυπική παράμετρος. Δομές21

Άσκηση 3  Γράψτε ένα πρόγραμμα, με χρήση συνάρτησης με όνομα days(), να προσδιορίζει το σύνολο των ημερών, που πέρασαν από την αρχή του αιώνα μας, για κάθε ημερομηνία, που θα εισάγεται σαν παράμετρος της συνάρτησης.  Να θεωρηθεί ότι το κάθε έτος, αποτελείται από 360 ημέρες, και ο κάθε μήνας, από 30 ημέρες. Δομές22

Άσκηση 3: Πρόγραμμα #include struct date { int month; int day; int year; }; int days(struct date); int main() { struct date a; int num_of_days; printf("\n Εισαγωγή μίας ημερομηνίας (μήνας, ημέρα, έτος):"); scanf("%d %d %d", &a.month, &a.day, &a.year); num_of_days = days(a); printf("\n Ημέρες που πέρασαν από την 1/1/2000: %d \n\n", num_of_days); return 0; } int days(struct date X) { int d; d = (X.year-2000) * 360; d += (X.month-1) * 30 + X.day; return d; } Δομές23

Επιστροφή δομών  Μία συνάρτηση, μπορεί να επιστρέψει μία ολόκληρη δομή, όπως ακριβώς επιστρέφουν απλές μεταβλητές.  Άσκηση 4: Γράψτε ένα πρόγραμμα το οποίο (με χρήση συνάρτησης), να επιστρέφει την μεγαλύτερη ημερομηνία, από δύο δεδομένες ημερομηνίες. Δομές24

Άσκηση 4: Πρόγραμμα (1 από 2) #include struct date { int month; int day; int year; }; struct date larger(struct date, struct date); int main() { struct date a, b, later; printf("\n Εισαγωγή μίας ημερομηνίας (μήνας ημέρα έτος):"); scanf("%d %d %d", &a.month, &a.day, &a.year); printf("\n Εισαγωγή άλλης μίας ημερομηνίας (μήνας ημέρα έτος):"); scanf("%d %d %d", &b.month, &b.day, &b.year); later = larger(a, b); printf("\n Η μεγαλύτερη ημερομηνία είναι: %d / %d / %d \n\n", later.month, later.day, later.year); return 0; } Δομές25

Άσκηση 4: Πρόγραμμα (2 από 2) struct date larger(struct date X, struct date Y) { if (X.year > Y.year) return X; else if (X.year < Y.year) return Y; else if (X.month > Y.month) return X; else if (X.month < Y.month) return Y; else if (X.day > Y.day) return X; else return Y; } Δομές26

Πίνακες δομών  Επειδή μία δομή είναι ένα αντικείμενο, είναι δυνατόν να δημιουργηθούν πίνακες δομών.  Οπότε κάθε στοιχείο του πίνακα θα είναι μία δομή.  Ένας πίνακας δομών δηλώνεται με την ίδια μέθοδο, που δηλώνεται μία κοινή μεταβλητή: struct Date a[N]; Δομές27

Πίνακες δομών: Παράδειγμα 1 struct pay_record { int e_num; char e_name[30]; float e_rate; }; struct pay_record employee[7]; Δομές28

Πίνακες δομών: Πρόγραμμα 1 #include #define N 3 struct pay_record { int e_num; char e_name[30]; float e_rate; }; int main() { struct pay_record employee[N] = { {1234, "Hanson, H.", 5.34}, {2345, "Monroe, M.", 6.12}, {7890, "Donaldson, D.", 8.23} }; int i; printf(“Αριθμός \t Όνομα \t\t Ωρομίσθιο \n"); for (i=0; i<N; i++) printf("%d \t %s \t %.2f \n", employee[i].e_num, employee[i].e_name, employee[i].e_rate); return 0; } Output: NumberNameRate 1234Hanson, H Monroe, M Donaldson, D.8.23 Δομές29

Πίνακες δομών: Πρόγραμμα 2 (1 από 2) #include #define N 5 struct Triangle { float a; float b; float c; }; float perimeter(struct Triangle); int main() { struct Triangle T[N]; float Per[N], max_per; int i; for (i=0; i<N; i++) { printf("\n Εισαγωγή των 3 μηκών των πλευρών του %d τριγώνου: ", i); scanf("%f %f %f", &T[i].a, &T[i].b, &T[i].c); } Δομές30

Πίνακες δομών: Πρόγραμμα 2 (2 από 2) for (i=0; i<N; i++) Per[i] = perimeter(T[i]); max_per = Per[0]; for (i=1; i<N; i++) if (max_per < Per[i]) max_per = Per[i]; printf("\n\n Μεγαλύτερη περίμετρος = %.4f \n\n", max_per); return 0; } float perimeter(struct Triangle triangle) { float t; t = triangle.a + triangle.b + triangle.c); return p; } Δομές31

Συνηθισμένο προγραμματιστικό λάθος  Δεν μπορούμε να συγκρίνουμε μεταβλητές δομών, μέσα σε μία πρόταση if, ακόμη και εάν είναι δομές του ίδιου τύπου.  Μπορούμε να συγκρίνουμε μόνο πεδία δομών (προφανώς ίδιου τύπου). Δομές32

Γρήγορος πίνακας αναφοράς σύνταξης ΕνέργειαΣύνταξηΠαραδείγματα Δήλωση πρότυπου δομής (structure template) struct όνομα_δομής { τύπος μεταβλητή 1; /* πεδίο 1*/ τύπος μεταβλητή 2; /* πεδίο 2*/ τύπος μεταβλητή N; /* πεδίο N*/ } struct date { int day; int month; int year; }; Ορισμός μεταβλητών με τύπο δομής struct όνομα_δομής μεταβλητή 1,...; struct date X; Προσπέλαση πεδίων δομών Τελεστής ‘τελεία’ . X.day = 7; Δομές33

Άσκηση 5  Δεδομένης της δομής: struct stock { /*Αποθήκη υλικών */ int no; /* κωδικός */ char description[30]; /* περιγραφή */ float price; /* τιμή */ int qty; /* ποσότητα */ };  Να γραφεί πρόγραμμα, το οποίο αφού εισάγει 5 υλικά, στην συνέχεια να τα εκτυπώνει. Δομές34

Άσκηση 5: Πρόγραμμα #include #define N 5 struct stock { int no; char description[30]; float price; int qty; }; int main() { struct stock S[N]; int i; for (i=0; i<N; i++) { printf("\n Εισαγωγή κωδικού: "); scanf("%d", &S[i].no); εισαγωγή περιγραφής κλπ ---- } printf("\n \n"); for (i=0; i<N; i++) printf("%5d \t %30s \t %10.2f \t %5d \n", S[i].no, S[i].description, S[i].price, S[i].qty); return 0; } Δομές35

Τέλος όγδοης ενότητας