οµές (structures) και Eνώσεις (unions)

Σχετικά έγγραφα
Διδάσκων: Παναγιώτης Ανδρέου

Προγραμματισμός Η/Υ. Ενότητα 9: Ειδικά θέματα Δομών Δεδομένων

Διάλεξη 8: Δομές, Ενώσεις και Απαριθμητοί Τύποι

οµές (structures) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Πίνακες δοµών, δείκτες σε δοµές, και αυτοαναφορικές δοµές.

Η γλώσσα C. Νέοι και σύνθετοι τύποι (typedef & structs & unions)

Διαδικασιακός Προγραμματισμός

ηδάζθςκ: εµήηνεξ Ζεσκαιηπμύν

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

είκτες και Πίνακες (2)

Η γλώσσα C. Νέοι και σύνθετοι τύποι (typedef & structs & unions)

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Δομές & Ενώσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Ανάπτυξη και Σχεδίαση Λογισμικού

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Μεθόδων Επίλυσης Προβλημάτων

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Διάλεξη 19η: Δομές δεδομένων

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες ( ιάλεξη 18) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Ανάπτυξη και Σχεδίαση Λογισμικού

Προγραμματισμός Η/Υ (ΤΛ2007 )

Δηάιεμε 8: Δνκέο, Ελώζεηο θαη Απαξηζκεηνί Τύπνη

Διδάσκων: Παναγιώτης Ανδρέου

Οι δείκτες στη γλώσσα C

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Δομημένος Προγραμματισμός (ΤΛ1006)

Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Διδάσκων: Παναγιώτης Ανδρέου

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (Programming in the large)

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Εισαγωγή στον Προγραμματισμό

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Δομημένος Προγραμματισμός (ΤΛ1006)

Διαδικασιακός Προγραμματισμός

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις.

Προγραµµατιστικές τεχνικές

ΕΠΛ 034: Εισαγωγή στον Προγραμματισμό για ΗΜΥ

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

a = 10; a = k; int a,b,c; a = b = c = 10;

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι

Προγραμματισμός Δομές Δεδομένων

Στόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΠΛΗ111. Ανοιξη Μάθηµα 1 ο Ανασκόπηση της Γλώσσας Προγραµµατισµού C. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ΕΠΛ 034: Εισαγωγή στον Προγραμματισμό για ΗΜΥ

Διαδικασιακός Προγραμματισμός

Εισαγωγή στον Προγραµµατισµό «C»

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 10 Ο. Δομές Ενώσεις Απαριθμητοί τύποι δεδομένων ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο

Διάλεξη 6: Δείκτες και Πίνακες

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Εργαστήριο 9: Αρχεία

υναµικές οµές εδοµένων

Κεφάλαιο V: Δομές και ενώσεις. 5.1 Δομές.

Διάλεξη 11η: Δείκτες, μέρος 1

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014

Διδάσκων: Παναγιώτης Ανδρέου

Ανάπτυξη και Σχεδίαση Λογισμικού

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

Ενδεικτική περιγραφή μαθήματος

Προγραμματισμός H/Y Ενότητα 6: Δομές (structures) Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Πρόλογος Εισαγωγικά Στοιχεία... 13

Μεθόδων Επίλυσης Προβλημάτων

Η γλώσσα προγραμματισμού C

Επεξεργασία Αρχείων Κειµένου

Ανάπτυξη και Σχεδίαση Λογισμικού

Προγραμματισμός ΙI (Θ)

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμό για ΗΜΥ

Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 131 Αρχές Προγραµµατισµού I 4-2

Χpήσιµες Βιβλιοθήκες της γλώσσας C

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Μεθόδων Επίλυσης Προβλημάτων

Δομημένος Προγραμματισμός (ΤΛ1006)

Εισαγωγή στον Προγραμματισμό

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

υναµική έσµευση Μνήµης (συν.) ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 Εφαρµογή

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

Δομημένος Προγραμματισμός

Δομημένος Προγραμματισμός (ΤΛ1006)

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Ανάπτυξη και Σχεδίαση Λογισμικού

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Κεφάλαιο 3.1, : Συναρτήσεις I. ( ιάλεξη 11) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Πανεπιστήµιο Θεσσαλίας, THMMY HY120, Σεπτέµβριος 2015 ΟΝΟΜΑΤΕΠΩΝΥΜΟ:

Transcript:

οµές (structures) και Eνώσεις (unions) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: οµές, φωλιασµένες δοµές, τρόποι δήλωσης δοµών, δοµές ως παράµετροι σε συναρτήσεις, δείκτες σε δοµές, χρήση ενώσεων. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1

οµές οµή είναι µια συλλογή από µια ή περισσότερες µεταβλητές, πιθανώς διαφορετικών τύπων που οµαδοποιούνται µε ένα όνοµα για ευκολότερο χειρισµό. Ορισµός δοµών γίνεται µε τη σύνταξη: struct name { δηλώσεις πεδίων }; Παράδειγµα: struct Person { char firstname[15]; char lastname[15]; char gender; /* M ή F */ int age; }; ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2

οµές (συν.) Η λέξη struct εισάγει τη δήλωση µιας δοµής. Μπορεί να ακολουθείται (προαιρετικά) από κάποιο όνοµα, που αποκαλείται ετικέτα δοµής και ονοµατίζει το είδος της δοµής. Οι µεταβλητές που κατονοµάζονται µέσα στη δοµή ονοµάζονται µέλη ή πεδία. Μια δήλωση struct ορίζει ένα τύπο. Για να δηλώσουµε µεταβλητές ή πίνακες τύπου δοµής γράφουµε: struct Person x; struct Person people[40]; Eναλλακτικά µπορούµε επίσης να παραλείψουµε το όνοµα της δοµής αλλά να περιγράψουµε τα µέλη της: struct { char firstname[15]; char lastname[15]; char gender; int age; }; x, people[40]; ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 3

οµές (συν.) Αρχικοποίηση µιας µεταβλητής ή πίνακα τύπου δοµής γίνεται αποδίδοντας τιµές στα µέλη ως εξής: struct Person x = { Aνδρέας, Ανδρέου, M, 43}; struct Person people[] = { Aνδρέας, Ανδρέου, M, 43, Μάρία, Γεωργίου, F, 38, Χρίστος, Χαραλάµπους, Μ, 14 }; ή struct Person[] people = {{ Aνδρέας, Ανδρέου, M, 43}, { Μάρία, Γεωργίου, F, 38}, { Χρίστος, Χαραλάµπους, Μ, 14}}; Aναφορά σε µέλος µιας δοµής γίνεται µέσω της κατασκευής: όνοµα-δοµής.µέλος Για παράδειγµα if (x.age > 40) printf( %s age: %d \n, x.lastname, x.age); ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 4

οµές (συν.) οµές µπορεί να είναι αλληλένθετες, δηλαδή να φωλιάζονται η µια µέσα στην άλλη, δηµιουργώντας πιο πολύπλοκες δοµές: struct family { struct Person father; struct Person mother; int numofchild; struct Person children[5]; }; int main(void){ struct Person x, y, z; struct family fml; fml.numofchild = 2; strcpy(fml.father.firstname, Joe ); strcpy(fml.children[0].firstname, Mary ); } ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 5

οµές και Συναρτήσεις Eπιτρεπτές πράξεις σε µια δοµή είναι: η αντιγραφή της, η απόδοση τιµής σ αυτήν σαν σύνολο, η εξαγωγή της διεύθυνσής της, και η προσπέλαση των µελών της. Μεταβλητές τύπου δοµής µπορούν να περαστούν ως ορίσµατα σε συναρτήσεις όπως επίσης και να επιστραφούν ως αποτελέσµατα συναρτήσεων. Παράδειγµα: struct Person inc_age (struct Person x){ x.age += 1; return x; } struct Person x1, x2; x2 = inc_age(x1); ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 6

οµές και Συναρτήσεις (συν) οµές δεν µπορούν να συγκριθούν: π.χ. η έκφραση x1 == x2 δεν είναι είναι έγκυρη. Εργασία 1: Να γράψετε συνάρτηση η οποία παίρνει δύο παράµετρους τύπου struct Person και τις συγκρίνει. Εργασία 2: Να γράψετε συνάρτηση η οποία παίρνει ως δεδοµένο εισόδου µια οικογένεια (τύπου struct Family) και ένα άτοµο (τύπου struct Person), και αν το άτοµο δεν ανήκει ήδη στα παιδιά της οικογένειας τότε το προσθέτει. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 7

οµές και Συναρτήσεις (συν) Μπορούµε επίσης να χρησιµοποιήσουµε δείκτες σε δοµές. Για παράδειγµα η δήλωση struct Person *pp p; δηλώνει ότι η µεταβλητή pp είναι δείκτης προς µια δοµή τύπου Person. Έτσι µπορούµε να γράψουµε pp = &p; printf( %s, (*pp).firstname); óπου *pp είναι η δοµή που δείχνεται από τον δείκτη, ενώ (*pp).firstname είναι το πρώτο πεδίο της δοµής. Προσοχή: η προτεραιότητα του τελεστή µέλους δοµής,., είναι µεγαλύτερη από αυτή του τελεστή έµµεσης αναφοράς, *. Εποµένως οι παρενθέσεις στο (*pp).firstname είναι απαραίτητες. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 8

οµές και Συναρτήσεις (συν) είκτες για δοµές χρησιµοποιούνται τόσο συχνά που παρέχεται ο πιο κάτω εναλλακτικός συµβολισµός ως συντοµογραφία: (*p).µέλος_δοµής = p->µέλος_δοµής Αν µια µεγάλη δοµή πρόκειται να µεταβιβαστεί για επεξεργασία σε µια συνάρτηση γενικά είναι αποτελεσµατικότερη η µεταβίβαση ενός δείκτη προς τη δοµή και όχι η αντιγραφή της. Αυτό µπορεί να γίνει όπως και σε απλούστερες δοµές δεδοµένων. } struct Person p;... initperson(&p);... void initperson(struct Person *p){ strcpy( p->first.name, Aνδρέας ); strcpy( p->first.name, Ανδρέου ); p->gender = M ; p->age = 43; ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 9

Eνώσεις (unions) Ο τύπος union χρησιµοποιείται στην C για τη δήλωση µεταβλητών που µπορούν να αποθηκεύσουν σε διαφορετικές στιγµές δεδοµένα διαφορετικών τύπων και µεγεθών στην ίδια περιοχή µνήµης. Θεωρήστε την περίπτωση που θέλουµε µια σταθερά σε ένα πρόγραµµα να έχει ως τιµή είτε µια ακέραια τιµή (int) είτε µια πραγµατική τιµή (float). Θα µπορούσαµε να γράψουµε: struct { int ival; float fval; } constant; και να τοποθετούµε τη σταθερά µας σε ένα από τα δύο πεδία της δοµής σύµφωνα µε την τιµή της. Μειονέκτηµα αυτής της λύσης είναι ότι σπαταλά άσκοπα µνήµη: δεσµεύει µνήµη για δύο πεδία ενώ θα χρησιµοποιηθεί µόνο ένα. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 10

Eνώσεις Χρησιµοποιώντας ενώσεις η δήλωση της µεταβλητής µας γίνεται ως εξής: union { int ival; float fval; } constant; H µνήµη που δεσµεύεται σε αυτή την περίπτωση είναι η µέγιστη που απαιτείται για αποθήκευση ακριβώς µιας µεταβλητής από οποιοδήποτε από τους τύπους των πεδίων (στην πιο πάνω περίπτωση η µνήµη που απαιτείται για αποθήκευση είναι 4bytes). Η τιµή που ανακτάται κάθε φορά είναι η αυτή που αποθηκεύτηκε πιο πρόσφατα κατά την εκτέλεση. Είναι ευθύνη του προγραµµατιστή να παρακολουθεί και να γνωρίζει ποιος τύπος είναι αποθηκευµένος σε µια ένωση. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 11

Eνώσεις #define INT_TYPE 1; #define REAL_TYPE 2; struct item { int type; union { int ival; float fval; } constant; } struct item x; if (x.type == INT_TYPE) printf( value of const = %d\n, x.constant.ival); if (x.type == REAL_TYPE) printf( value of const = %f\n, x.constant.fval); ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 12