Προγραμματισμός Υπολογιστών με C++

Σχετικά έγγραφα
Συλλογές ΣΥΛΛΟΓΕΣ. Γεώργιος Παπαϊωάννου ( )

Προγραμματισμός Υπολογιστών με C++

Οντοκεντρικός Προγραμματισμός

Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός Υπολογιστών με C++

Συλλογές, Στοίβες και Ουρές

Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός Υπολογιστών με C++

Οντοκεντρικός Προγραμματισμός

Προγραμματισμός Υπολογιστών με C++

Ονοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα προηγούμενα ακαδημαϊκά έτη: ΚΑΛΗ ΕΠΙΤΥΧΙΑ!

Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός Υπολογιστών με C++

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός Υπολογιστών με C++

POINTERS, AGGREGATION, COMPOSITION

Τελεστές ΤΕΛΕΣΤΕΣ. Γεώργιος Παπαϊωάννου ( )

Προγραμματισμός Υπολογιστών με C++

ΣΧΕΔΙΟΤΥΠΑ (TEMPLATES)

Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός Υπολογιστών με C++

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

Ονοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα εξής ακαδημαϊκά έτη: Διάρκεια: 2,5 ώρες, κλειστά βιβλία και σημειώσεις ΚΑΛΗ ΕΠΙΤΥΧΙΑ!

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

Προγραμματισμός Υπολογιστών με C++

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές

Διάλεξη 15: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

Προγραμματισμός Υπολογιστών με C++ Φύλλο Διαγωνίσματος Ακαδημαϊκό εξάμηνο: Χειμερινό

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ & ΑΛΓΟΡΙΘΜΟΙ ΕΡΓΑΣΤΗΡΙΟ

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

Οντοκεντρικόσ Προγραμματιςμόσ

ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. ΕΡΓΑΣΤΗΡΙΟ C++ ΕΞΑΜΗΝΟ Γ Ακαδηµαϊκό Έτος

ΚΑΤΑΣΚΕΥΑΣΤΕΣ ΑΝΤΙΓΡΑΦΗΣ

Οντοκεντρικός Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT

Οντοκεντρικόσ Ρρογραμματιςμόσ

17TimeThis.h function returns reference pointer to same object { return *this; }

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

ΠΡΟΤΥΠΑ. ΠΑΡΑ ΕΙΓΜΑ ηµιουργία πρότυπου στοίβας (stack) και στη συνέχεια δηµιουργία µιας στοίβας σηµείων.

Υλοποίηση Λειτουργιών Στοίβας Απλά(1/2)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Αντικείμενα ως ορίσματα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

Προγραμματισμός Υπολογιστών με C++

Στοίβες - Ουρές. Στοίβα (stack) Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής

public class ArrayStack implements Stack {

Δοµές Δεδοµένων. 7η Διάλεξη Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής T.E.I. ΘΕΣΣΑΛΟΝΙΚΗΣ

Διάλεξη 11: Φροντιστήριο για Στοίβες. Διδάσκων: Παναγιώτης Ανδρέου. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ.

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ

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

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ. Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής

Προγραμματισμός Υπολογιστών με C++

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning

Στοίβες με Δυναμική Δέσμευση Μνήμης

Οντοκεντρικός Προγραμματισμός

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Δομές Δεδομένων & Αλγόριθμοι. Στοίβες. Εργαστήριο Γνώσης & Ευφυούς Πληροφορικής 1

19. ΠΡΟΤΥΠΑ (TEMPLATES)

Προγραμματισμός Υπολογιστών με C++

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

Ειδικά Θέματα Ι. Σήμερα!

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

υναµική διαχείριση µνήµης στη C++ Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 είκτες

Κεφάλαιο 5 Συλλογές, Στοίβες και Ουρές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Oι βασικές πράξεις (λειτουργίες) που ορίζονται για τον τύπο στοίβα αναφέρονται παρακάτω:

Δομές Δεδομένων (Data Structures)

Προγραμματισμός Υπολογιστών με C++

Τεχνολογίες Υλοποίησης Αλγορίθµων

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 7 : ΣΥΝΘΕΤΕΣ ΚΛΑΣΕΙΣ ΚΑΙ ΜΕΘΟΔΟΙ

Διάλεξη 21η: Απλά Συνδεδεμένες Λίστες

Δομές Δεδομένων & Αλγόριθμοι

Η γλώσσα προγραμματισμού C Συνδεδεμένες Λίστες

2 using namespace s t d ; 4 { 12 int t= x ; 6 x=y ; 7 y=t ; 8 } 9 11 { 13 x= y ; 14 y=t ; 15 } {

12. ΑΛΦΑΡΙΘΜΗΤΙΚΑ. υο είδη αλφαριθµητικών Τα αλφαριθµητικά της C πίνακες τύπου char Ta αντικείµενα της κλάσης string

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

Ερωτήσεις και απαντήσεις στα θέματα του κανονισμού κατάρτισης

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

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

Δομές Δεδομένων και Αλγόριθμοι

Απάντηση. // We write in a header file named my_header.h #ifndef my_header_h #define my_header_h #define divides(x,y) (((y)%(x)==0)?

Transcript:

Προγραμματισμός Υπολογιστών με C++ ( 2012-1 ) 16η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1

Τι θα ακούσετε σήμερα Υλοποίηση στοίβας ακεραίων με χρήση τάξεων, δυναμικής καταχώρισης μνήμης και σχεδιοτύπων. Γενικευμένη υλοποίηση στοίβας με χρήση σχεδιοτύπων τάξεων. 2

Στοίβα ( push( ( push( () pop i = κενή στοίβα Το i γίνεται.

Μια πρώτη παράσταση στοίβας top αντικείμενα της τάξης StackNode 10 Παράσταση κενής στοίβας: top 0 0 4

Η τάξη StackNode class StackNode { const int i; const StackNode* const next; public: int getvalue() const { return i; const StackNode* const getnext() const { return next; StackNode(const int iin, const StackNode* const nextin = 0) : i(iin), next(nextin) { ; 5

Παράδειγμα χρήσης της StackNode int main() { StackNode n1(), n2(, &n1), n(10, &n2); n 10 n2 n1 0 0 6

Βελτίωση: η τάξη Stack class Stack { const StackNode* top; void deletestacknodes(); static const StackNode* const copystacknodes( const StackNode* const originalptr); public: StackNode n bool isempty() const { return (top = = 0); 10 void push(int i); Stack s1 int pop(); StackNode n2 top: Stack() : top(0) { ~Stack() { deletestacknodes(); StackNode n1 Stack(const Stack& original); Stack& operator=(const Stack& right); ; 0

Παράδειγμα χρήσης της Stack int main() { Stack s1; s1.push(); s1.push(); s1.push(10); Stack s2(s1); s2.push(20); cout << s1.pop() << endl; // Τυπώνει 10. s1 = s2; cout << s1.pop() << endl; // Τυπώνει 20. cout << s2.pop() << endl; // Τυπώνει 20. Ο χρήστης της Stack δεν χρειάζεται να γνωρίζει πώς έχει υλοποιηθεί εσωτερικά η στοίβα (π.χ. ότι χρησιμοποιούνται δείκτες, πώς μεταβάλλονται κλπ). 8

Stack: η μέθοδος push void Stack::push(const int i) { newtop const StackNode* const newtop = new StackNode(i, top); top = newtop; ( push(2 n s1 10 top: n2 2 n1 0 9

Stack: η μέθοδος pop int Stack::pop() { if(isempty()) { return 0; const int value = top->getvalue(); const StackNode* const newtop = top->getnext(); s1 delete top; top: top = newtop; return value; newtop n 10 n2 n1 0 10

Stack: η μέθοδος deletestacknodes void Stack::deleteStackNodes() { const StackNode* newtop; while(top!= 0) { newtop = top->getnext(); delete top; top = newtop; s1 top: newtop n 10 n2 n1 0 11

Stack: η copystacknodes originalptr 10 copyptr 10 originalnext copynext 0 0 Αναδρομική αντιγραφή μικρότερου μέρους της αλυσίδας. 12

Stack: η copystacknodes const StackNode* const Stack::copyStackNodes( const StackNode* const originalptr) { // Αν δεν υπάρχει τίποτα να αντιγράψουμε: if(originalptr = = 0) { return 0; const StackNode* const originalnext = originalptr->getnext(); const StackNode* const copynext = copystacknodes(originalnext); const StackNode* const copyptr = new StackNode(originalPtr->getValue(), copynext); return copyptr; 1

Η copystacknodes συντομότερα const StackNode* const Stack::copyStackNodes( const StackNode* const originalptr) { if(originalptr = = 0) { return 0; return new StackNode(originalPtr->getValue(), copystacknodes(originalptr->getnext())); 14

Stack: κατασκευαστής αντιγραφής και τελεστής εκχώρησης Stack::Stack(const Stack& original) : top(copystacknodes(original.top)) { Stack& Stack::operator=(const Stack& right) { if(this = = &right) { return *this; deletestacknodes(); top = copystacknodes(right.top); return *this; 15

Γενίκευση της Stack: τρόπος χρήσης int main() { Stack<string> s; s.push("seven"); s.push("three"); s.push("ten"); Stack<string> s4(s); s4.push("twenty"); cout << s.pop() << endl; s = s4; cout << s.pop() << endl; cout << s4.pop() << endl; 16

Γενίκευση της StackNode template <typename Type> class StackNode { const Type i; const StackNode* const next; public: const Type getvalue() const { return i; const StackNode* const getnext() const { return next; StackNode(const Type iin, const StackNode* const nextin = 0) : i(iin), next(nextin) { ; 1

Γενίκευση της Stack template <typename Type> class Stack { const StackNode<Type>* top; void deletestacknodes(); static const StackNode<Type>* const copystacknodes( const StackNode<Type>* const originalptr); public: bool isempty() const { return (top == 0); void push(type i); Type pop(); Stack() : top(0) { ~Stack() { deletestacknodes(); Stack(const Stack& original); Stack& operator=(const Stack& right); ; 18

Γενίκευση μεθόδων της Stack template <typename Type> void Stack<Type>::push(Type i) { const StackNode<Type>* const newtop = new StackNode<Type>(i, top); top = newtop; Ομοίως τροποποιούμε και τις άλλες μεθόδους. 19