1 / 18

Διαφάνειες παρουσίασης #8

Διαφάνειες παρουσίασης #8. Εισαγωγή Αφηρημένοι τύποι δεδομένων Παραδείγματα Συμβολοσειρές. Εισαγωγή ( i). Τύποι δεδομένων στη C int double typedef struct { double re, im; } complex; Χρησιμότητα των τύπων δεδομένων Δημιουργία μεταβλητών complex c; Χρήση με τη βοήθεια πράξεων

sian
Télécharger la présentation

Διαφάνειες παρουσίασης #8

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Διαφάνειες παρουσίασης #8 Εισαγωγή Αφηρημένοι τύποι δεδομένων Παραδείγματα Συμβολοσειρές

  2. Εισαγωγή (i) • Τύποι δεδομένων στη C int double typedef struct { double re, im; } complex; • Χρησιμότητα των τύπων δεδομένων • Δημιουργία μεταβλητών complex c; • Χρήση με τη βοήθεια πράξεων c = cadd(c1, c2);

  3. Εισαγωγή (ii) • Αφαίρεση δεδομένων (data abstraction) • Διαχωρισμός ιδιοτήτων και υλοποίησης • Ιδιότητες ενός τύπου δεδομένων είναι ο τρόπος με τον οποίο δημιουργεί κανείς μεταβλητές και ο τρόπος με τον οποίο τις χρησιμοποιεί • Σύνταξη και σημασιολογία των ιδιοτήτων • Υλοποίηση ενός τύπου δεδομένων είναι ο συγκεκριμένος τρόπος με τον οποίο προγραμματίζονται οι διάφορες πράξεις που μπορεί κανείς να εφαρμόσει

  4. Εισαγωγή (ii) • Διαφορετικές δυνατές υλοποιήσεις • Μιγαδικοί αριθμοί: καρτεσιανές συντεταγμένες typedef struct { double re, im; } complex; complex cadd (complex c1, complex c2) { complex result; result.re = c1.re + c2.re; result.im = c1.im + c2.im; return result; }

  5. Εισαγωγή (iii) • Μιγαδικοί αριθμοί: πολικές συντεταγμένες typedef struct { double norm, angle; } complex; complex cadd (complex c1, complex c2) { double x = c1.norm * cos(c1.angle) + c2.norm * cos(c2.angle); double y = c1.norm * sin(c1.angle) + c2.norm * sin(c2.angle); complex result; result.norm = sqrt(x*x + y*y); result.angle = atan2(y, x); return result; }

  6. Εισαγωγή (iv) • Οι λεπτομέρειες υλοποίησης επηρεάζουντις επιδόσεις των προγραμμάτων • Είναι συχνή επομένως η αλλαγή τρόπουυλοποίησης κάποιου τύπου δεδομένων • Η αφαίρεση δεδομένων ελαχιστοποιεί τις αλλαγές που απαιτούνται στο πρόγραμμα που χρησιμοποιεί έναν τύπο δεδομένων, όταν αλλάξει ο τρόπος υλοποίησης

  7. Αφηρημένοι τύποι δεδομένων • Αφηρημένος τύπος δεδομένων – ΑΤΔ(abstract data type) • καθορίζει τις ιδιότητες του τύπου δεδομένων • δεν εξαρτάται από την υλοποίησή του • Αλγεβρικός ορισμός ΑΤΔ • σύνταξη: όνομα του τύπου και επικεφαλίδες των πράξεων • σημασιολογία: κανόνες που περιγράφουν τη λειτουργία των πράξεων

  8. Παράδειγμα ΑΤΔ: Λογικές τιμές (i) • Σύνταξη • Όνομα τύπου: boolean • Επικεφαλίδες πράξεων: const boolean true, false; boolean band (boolean x, boolean y); boolean bor (boolean x, boolean y); boolean bnot (boolean x); T if_then_else (boolean x, T a, T b); • Η επικεφαλίδα της if_then_elseπρέπει να ορίζεται για κάθε τύπο Τ. Η υλοποίησή της δεν μπορεί να γίνει με συνάρτηση.

  9. Παράδειγμα ΑΤΔ: Λογικές τιμές (ii) • Σημασιολογία • Αξιωματικός ορισμός band: band(true, y) = y band(false, y) = false • Αξιωματικός ορισμός bor: bor(true, y) = true bor(false, y) = y • Αξιωματικός ορισμός bnot: bnot(true) = false bnot(false) = true • Αξιωματικός ορισμός if_then_else: if_then_else(true, a, b) = a if_then_else(false, a, b) = b

  10. Παράδειγμα ΑΤΔ: Λογικές τιμές (iii) • Μια δυνατή υλοποίηση typedef unsigned char boolean; const boolean true = 1, false = 0; boolean band (boolean x, boolean y){ return x && y; } boolean bor (boolean x, boolean y){ return x || y; } boolean bnot (boolean x){ return !x; } #define if_then_else(x, a, b) \((x) ? (a) : (b))

  11. Παράδειγμα ΑΤΔ: Σύνολα (i) • Σύνταξη • Όνομα τύπου: set (σύνολα ακεραίων) • Επικεφαλίδες πράξεων: const set empty; set add (int x, set s); boolean member (int x, set s); set union (set s1, set s2); boolean subset (set s1, set s2); boolean equal (set s1, set s2);

  12. Παράδειγμα ΑΤΔ: Σύνολα (ii) • Σημασιολογία • Αξιωματικός ορισμός member: member(x, empty) = false member(x, add(x, s)) = true member(x, add(y, s)) = member(x, s)ανx != y • Αξιωματικός ορισμός union: union(empty, s) = s union(add(x, s1), s2) = add(x, union(s1, s2))

  13. Παράδειγμα ΑΤΔ: Σύνολα (iii) • Σημασιολογία • Αξιωματικός ορισμός subset: subset(empty, s) = true subset(add(x, s1), s2) = band(member(x, s2), subset(s1, s2)) • Αξιωματικός ορισμός equal: equal(s1, s2) = band(subset(s1, s2), subset(s2, s1))

  14. ΑΤΔ: Συμβολοσειρές (i) • Σύνταξη • Όνομα τύπου: string • Επικεφαλίδες πράξεων: string stringMake (const char * n); const char * stringGet (string s); void stringCopy (string * s1, string s2); string stringDuplicate (string s); string stringConcat (string s1, string s2); int stringCompare (string s1, string s2);

  15. ΑΤΔ: Συμβολοσειρές (ii) • Σύνταξη (συνέχεια) • Επικεφαλίδες πράξεων: int stringLength (string s); char stringIndex (string s1, int index); string stringPart (string s, int start, int length); string stringUpperCase (string s); void stringPrint (string s);

  16. ΑΤΔ: Συμβολοσειρές (iii) • Σημασιολογία (άτυπη: με λόγια) • stringMake, stringGet : μετατρέπουνconst char *σε stringκαι αντίστροφα • stringDestroy(s): καταστρέφει τη συμβολοσειρά s. • stringDuplicate(s): επιστρέφει ένα αντίγραφο της s. • stringConcat(s1, s2): επιστρέφει μια συμβολοσειρά που περιέχει τη συνένωση των περιεχομένων των s1και s2.

  17. ΑΤΔ: Συμβολοσειρές (iv) • Σημασιολογία (συνέχεια) • stringCompare(s1, s2) : συγκρίνει τα περιεχόμενα των s1και s2λεξικογραφικά. • stringLength(s): επιστρέφει το μήκος της συμβολοσειράς sσε χαρακτήρες. • stringIndex(s, i): επιστρέφει τον i-οστό χαρακτήρα της συμβολοσειράς s. • stringPart(s, i, l): επιστρέφει το τμήμα της συμβολοσειράς s που αρχίζει στονi-οστό χαρακτήρα και έχει μήκος l.

  18. ΑΤΔ: Συμβολοσειρές (v) • Σημασιολογία (συνέχεια) • stringUpperCase(s) : επιστρέφει μια συμβολοσειρά με τα περιεχόμενα της s, όπου όμως τα μικρά γράμματα έχουν αντικατασταθεί με κεφαλαία. • stringPrint(s): εκτυπώνει τα περιεχόμενα της συμβολοσειράς s.

More Related