Δομές Δεδομένων& Αλγόριθμοι · p=2*pi*r; /* Εύρεση της...

45
Δομές Δεδομένων & Αλγόριθμοι 1 Δομές Δεδομένων & Αλγόριθμοι Χρυσόστομος Στύλιος [email protected] Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Upload: others

Post on 27-Jun-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

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

Χρυσόστομος Στύλιος

[email protected]

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 2: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Δομή ΔεδομένωνΔομή δεδομένων είναι ένα σύνολο αποθηκευμένων δεδομένων τα οποία έχουν εσκεμμένα διαταχθεί με συγκεκριμένο τρόπο.

ΑλγόριθμοςΑλγόριθμος είναι μια πεπερασμένη σειρά ενεργειών που αποσκοπεί στην εκτέλεση μιας εργασίας.

Οι αλγόριθμοι υπάρχουν μαζί με τις δομές δεδομένων πάνω στις οποίες επενεργούν.

Algorithms + Data Structures = ProgramsΣχετικά πεδία με τους αλγορίθμους και τις δομές δεδομένων από το χώρο της επιστήμης υπολογιστών είναι οι βάσεις δεδομένων,

ο αντικειμενοστραφής προγραμματισμός, η τεχνολογία λογισμικού

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .. . .

2 / 14

Page 3: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

Παραδείγματα Δομών Δεδομένων

• Πίνακες (arrays) • Δομές (structs) • Αντικείμενα (objects) • Λίστες (lists)• Σύνολα (sets) • Στοίβες (stacks) • Ουρές (queues) • Λεξικά (dictionaries)• Δένδρα (trees) • Σωροί (heaps) • Γραφήματα (graphs)• Κατακερματισμένοι πίνακες (hash tables)

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .. . .

3 / 14

Page 4: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

Βασικές αλγοριθμικές έννοιες

• Επανάληψη (iteration): Εκτέλεση των ίδιων εντολών πολλές φορές.

• Πολυπλοκότητα αλγορίθμων (algorithmic complexity): Εκτίμηση για την απόδοση ενός αλγορίθμου

• Αντικείμενα (objects): Ενισχυμένη δομή δεδομένων με λειτουργίες που μπορούν να εφαρμοστούν πάνω της.

• Αναδρομή (recursion): Κλήση του αλγορίθμου από τον ίδιο τον αλγόριθμο.

• Κατακερματισμός (hashing): Μετασχηματισμός πληροφορίας σε ένα μικρού μεγέθους κλειδί που αναπαριστά το περιεχόμενο της πληροφορίας.

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .. . .

4 / 14

Page 5: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

Παραδείγματα Αλγορίθμων

Mergesort Quicksort Binary SearchDijkstra’s Shortest Path Huffman coding HashingBloom filters

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .. . .

5 / 14

Page 6: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Προτεινόμενα Βιβλία• Δομές Δεδομένων Αλγόριθμοι και Εφαρμογές στη C++ (2004) Sartaj

Shani Μετάφραση: Ι. Μανωλόπουλος, Ι. Θεοδωρίδης (Εκδόσεις Τζιόλα)

• : Δομές Δεδομένων (Έννοιες, Τεχνικές και Αλγόριθμοι), Γεώργιος Γεωργακόπουλος Πανεπιστημιακές Εκδόσεις Κρήτης, 2011

• Δομές Δεδομένων & Αλγόριθμοι στην Java, (2005) Robert Lafore(Εκδόσεις Γκιούρδας)

• Δομές Δεδομένων & Αλγόριθμοι σε JAVA, Michael T. Goodrich, Roberto Tamassia:Εκδόσεις Δίαυλος, 2013

•Δομές δεδομένων, Μποζάνης Παναγιώτης Δ.:Εκδόσεις Τζιόλα, 2016.

• Εισαγωγή στους Αλγορίθμους (2006) Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein (Πανεπιστημιακές Εκδόσεις Κρήτης)

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 7: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Βιβλιογραφία

• "Data Structures and Algorithms in C++", M. T. Goodrich, R. Tamassia and D. Mount, Wiley, 2004

• "Data Structures and Algorithm Analysis'', Clifford A. Shaffer, Prentice Hall, 1997

• "Algorithms Data Structures and Problem SolvingUsing C++'', Mark Allen Weis, Addison-Wesley, 2000

• "Data Structures & Algorithm Analysis in C++”, Mark Allen Weis, Addison-Wesley, 1999

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 8: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Διδασκαλία του Μαθήματος

• Βασικές γνώσεις C++ (Διδάσκεται σε διαφορετικό μάθημα)

• Βασικές γνώσεις αλγορίθμων• Θα μελετηθούν οι απαραίτητες βασικές

έννοιες ώστε να προχωρήσουμε με άνεση.• Δομές Δεδομένων και αλγόριθμοι

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 9: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Στόχοι Διδασκαλίας

1. Κατανόηση της αρχής ότι κάθε δομή δεδομένων έχει υπέρ και κατά

2. Εκμάθηση των πιο δημοφιλών δομών δεδομένων– Αυτές σχηματίζουν ένα βασικό σύνολο εργαλείων πάνω

στις δομές δεδομένων, το οποίο είναι χρήσιμο για έναν προγραμματιστή

3. Κατανόηση των τεχνικών μέτρησης του κόστους μιας δομής δεδομένων ή ενός προγράμματος– Αυτές οι τεχνικές επίσης επιτρέπουν να κριθεί η αξία

νέων δομών δεδομένων που μπορεί να ανακαλυφθούν στο μέλλον

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 10: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Εισαγωγή

• Μελετάμε δομές δεδομένων και μαθαίνουμε να γράφουμε αποδοτικάπρογράμματα– Αυτό δεν έχει να κάνει με προγραμματικά

κόλπα αλλά με– Καλή οργάνωση της πληροφορίας και καλούς

αλγορίθμους που κερδίζουν σε:

Μνήμη και χρόνο εκτέλεσης

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 11: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Δομές Δεδομένων

• Αναπαράσταση δεδομένων στην μνήμη– Δομές Αρχείων: αναπαράσταση δεδομένων

στον δίσκο– Μια συλλογή εγγραφών μπορεί να

αναπαριστάνεται με λίστα ή δέντρο• Τα αποδοτικά προγράμματα απαιτούν

αποδοτικές δομές δεδομένων– Ένα πρόβλημα πρέπει να λυθεί μέσα στα

όρια χρόνου και μνήμης της εφαρμογής

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 12: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Περιορισμοί Προβλήματος

• Κάθε πρόβλημα βάζει περιορισμούς χρόνου και χώρου μνήμης– π.χ., παράδειγμα τράπεζας:

• άνοιγμα λογαριασμού: μερικά λεπτά• συναλλαγές: μερικά δευτερόλεπτα• κλείσιμο λογαριασμού: όλη τη νύκτα

• Μια λύση είναι αποδοτική εάν λύνει το πρόβλημα μέσα στα όρια μνήμης και χρόνου που έχουν δοθεί

• Κόστος της λύσης: ποσοστό των πόρων που καταναλώθηκαν

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 13: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Στα πλαίσια του μαθήματος

• Διδασκαλία δομών δεδομένων για την κύρια μνήμη και τον δίσκο

• Διδασκαλία αλγορίθμων για διαφορετικά προβλήματα και δομές δεδομένων

• Διδασκαλία της ιδέας των διλημμάτων– Υπάρχουν κόστη και κέρδη που συνδέονται με κάθε

δομή δεδομένων και κάθε αλγόριθμο• Διδασκαλία μεθόδων μέτρησης της

αποτελεσματικότητας αλγορίθμων και δομών δεδομένων

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 14: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Επιλέγοντας Δομές Δεδομένων

1. Ανάλυση του προβλήματος για να καθοριστούν τα όρια των πόρων που η λύση πρέπει να τηρεί

2. Καθορισμός των διαδικασιών που πρέπει να υποστηρίζονται από την εφαρμογή

– π.χ., αναζήτηση, εισαγωγή, διαγραφή δεδομένων3. Ποσοτικοποιήστε τα όρια για κάθε λειτουργία

– π.χ., η αναζήτηση πρέπει να είναι γρήγορη 4. Επιλογή της δομής δεδομένων που ικανοποιεί

καλύτερα αυτές τις απαιτήσεις

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 15: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Κόστος & Κέρδος

• Κάθε δομή δεδομένων χρειάζεται:– Χώρο για τον κάθε τύπο δεδομένων που

αποθηκεύει– Χρόνο εκτέλεσης κάθε λειτουργίας – Προγραμματιστική προσπάθεια για να αναπτυχθεί

• Κάθε δομή δεδομένων έχει κόστη και κέρδη– Σπάνια μια δομή δεδομένων είναι καλύτερη από

μια άλλη σε όλες τις περιπτώσεις– Κάποια μπορεί να επιτρέπει γρηγορότερη

αναζήτηση (ή εισαγωγή ή διαγραφή) από μια άλλη– Είναι όλες οι διαδικασίες το ίδιο σημαντικές;

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 16: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Διάρθρωση Μαθήματος• Εισαγωγή στη C και C++• Θέματα αλγορίθμων & απόδοσης αλγορίθμων• Αναπαράσταση δεδομένων• Πίνακες• Λίστες, Στοίβες, Ουρές• Δένδρα (Δυαδικά, Αναζήτησης, AVL)• Σωροί• Αναζήτηση και Ταξινόμηση • Κατακερματισμός

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 17: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Εισαγωγή στις γλώσσες C και C++

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 18: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Βασικά Στοιχεία Γλωσσών

• Οι γλώσσες προγραμματισμού αποτελούν εργαλεία για την ανάπτυξη πακέτων λογισμικού (προγράμματα).

• Πρόγραμμα = Υλοποίηση Αλγορίθμων + Υλοποίηση Δομών Δεδομένων

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 19: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Διαχωρισμός Γλωσσών

• Δομημένες Γλώσσες Προγραμματισμού, όπως Pascal, C

• Γλώσσες Βασισμένες στα Αντικείμενα (object-oriented), C++, Java.

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 20: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Ένα Απλό Παράδειγμα C

# include <stdio.h>main ( ){

int x, y;x = 5;y=4;printf (“x + y = %d”, x+y);

}

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 21: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Χαρακτηριστικά της C

• Γλώσσα μετρίου επιπέδου• Οικονομία στην έκφραση

(λιτή και περιεκτική)• Σχετικά χαλαρό σύστημα τύπων• Φιλοσοφία: ο προγραμματιστής έχει

πλήρη έλεγχο και ευθύνεται για τα σφάλματά του

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 22: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Χαρακτηριστικά της C

• Ιδιαίτερα δημοφιλής στην πράξη• Έχει χρησιμοποιηθεί για τον

προγραμματισμό ευρέως φάσματος συστημάτων και εφαρμογών

• Έχει χρησιμοποιηθεί ως βάση για πληθώρα άλλων γλωσσών: C++, Java

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 23: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Εκτέλεση Προγραμμάτων

Πηγαίοςκώδικας(source)

ΜεταγλωττιστήςC (compiler)

Συνδέτης(linker)

Βιβλιοθήκη(library)

Αρχείαεπικεφαλίδας(header files)

Objectcode

Εκτελέσιμοπρόγραμμα(executable)

demo.c

demo.obj

demo.exe

printf

stdio.hΠροεπεξεργαστήςC (preprocessor)

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 24: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Πιο Σύνθετο Παράδειγμα C#include <stdio.h>

#include <math.h>

#define PI 3.14

main ()

{float e,p,r;printf(“Δώσε την ακτίνα του κύκλου: \n");scanf("%f", &r); /* Εισαγωγή της ακτίνας από το χρήστη*/e=PI*pow(r,2); /* Εύρεση του εμβαδού του κύκλου από τον τύπο Ε=π*r2 */p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */printf("To εμβαδό του κύκλου είναι ίσο με %.2f και η""περίμετρος του κύκλου είναι ίση με %.2f", e, p);}

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 25: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Βασικοί Τύποι Δεδομένων

char, signed char, unsigned char

signed short int, unsigned short int

signed int , unsigned int

signed long int , unsigned long int

float, double, long double

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 26: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Μεταβλητές

int x;int x, y, z;double r;unsigned long abc;

int x = 1;int x, y = 0, z = 2;double r = 1.87;unsigned long abc = 42000000;

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 27: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Σταθερές

• ακέραιες σταθερές42 0 -1 δεκαδικές037 οκταδικές0x1f δεκαεξαδικές42U 42L 42UL unsigned & long

• σταθερές κινητής υποδιαστολής42.0 -1.3 δεκαδικές2.99e8 με δύναμη του 1042.0F 42.0L float & long double

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 28: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Σταθερές (συνέχεια)

• χαρακτήρα'a' '0' '$'

• ειδικοί χαρακτήρες\n αλλαγή γραμμής\' απόστροφος\\ χαρακτήρας \ (backslash)\t αλλαγή στήλης (tab)\" εισαγωγικό\0 χαρακτήρας με ASCII = 0 (null)\037 » με ASCII = 37 (οκταδικό)\x1f » με ASCII = 1f (δεκαεξαδικό)

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 29: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Σταθερές (συνέχεια)

• συμβολοσειρές"abc" "Hello world!\n" "a\"51\""

• δηλώσεις σταθερώνconst int size = 10, num = 5;const double pi = 3.14159;const char newline = '\n';

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 30: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

printf ( ): εκτύπωση• απλοί τύποι δεδομένων

– int %d– char %c– double %lf– string %s

• παράδειγμαprintf("%d %lf %c %s\n",42, 1.2, 'a', “aloha");

• αποτέλεσμα42 1.200000 a aloha

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 31: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

scanf ( ): ανάγνωση

• Ίδιοι κωδικοί για τους απλούς τύπους• Παράδειγμα

int n;double d;char c;scanf("%d", &n);scanf("%lf", &d);scanf("%c", &c);

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 32: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Τελεστές και Εκφράσεις

• αριθμητικοί τελεστές+ - * / %

• σχεσιακοί τελεστές== != < > <= >=

• λογικοί τελεστές&& λογική σύζευξη (και)|| λογική διάζευξη (ή)! λογική άρνηση (όχι)

• π.χ. (x % 3 != 0) && !finished

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 33: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Τελεστές και Εκφράσεις (συνέχεια)

• τελεστές bit προς bit (bitwise)& σύζευξη bit (AND)| διάζευξη bit (OR)^ αποκλειστική διάζευξη bit (XOR)~ άρνηση (NOT)<< ολίσθηση bit αριστερά>> ολίσθηση bit δεξιά

• παράδειγμα(0x0101 & 0xfff0) << 2 0x0400

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 34: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Τελεστές και Εκφράσεις (συνέχεια)

• τελεστής συνθήκης(a >= b) ? a : b

• τελεστής παράθεσηςa-1, b+5

• τελεστές ανάθεσηςa = b+1a += x ισοδύναμο με a = a + x

• τελεστές αύξησης και μείωσηςa++ a-- τιμή πριν τη μεταβολή++a --a τιμή μετά τη μεταβολή

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 35: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Έλεγχος Ροής Προγράμματος

• Εντολή ifif (a >= b)max = a;

elsemax = b;

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 36: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Έλεγχος Ροής Προγράμματος

• Σύνθετη εντολήif (a >= b) {min = b;max = a;

}else {max = b;min = a;

}

Ορίζει νέα εμβέλειαif (x < y) {int temp = x;

x = y;y = temp;

}

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 37: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Έλεγχος Ροής Προγράμματος

• Εντολή whileint i = 1, s = 0;while (i <= 10) {s += i;i++;

}

συνθήκη

εντολή

αληθής

ψευδής

while (συνθήκη)εντολή

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 38: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Έλεγχος Ροής Προγράμματος

• Εντολή do-whileint i = 1, s = 0;do{s += i++;

} while (i <= 10);

συνθήκη

εντολή

ψευδήςαληθής

doεντολήwhile (συνθήκη);

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 39: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Έλεγχος Ροής Προγράμματος

• Εντολή forint i, s;for (i=1, s=0; i <= 10; i++)s += i;

for (αρχικοποίηση ;συνθήκη ;βήμα)

εντολήσυνθήκη

εντολήαληθής

ψευδής

βήμα

αρχικοποίηση

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 40: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Εντολή break

int s;for (i=0, s=0; i < 10; i++) {

int x;scanf("%d", &x);

s += x;}printf("Sum is: %d\n", s);

if (x < 0)break;

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 41: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Εντολή continue

int s;for (i=0, s=0; i < 10; i++) {

int x;scanf("%d", &x);

s += x;}printf("Sum is: %d\n", s);

if (x < 0)continue;

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 42: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Eντολή switchswitch (ch) {

case 'a':printf("alpha\n");break;

case 'b':case 'c':

printf("beta or c\n");break;

default:printf("other\n");

}

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 43: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Εντολή goto

int i = 1, s = 0;

loop:s += i++;if (i < 10)

goto loop;

printf("The sum is %d\n", s);

Όχι goto: δομημένος προγραμματισμός!

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 44: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Αντικειμενοστρεφής Προγραμματισμός

Τι είναι:

Μοντέλο προγραμματισμού -> Ένας τρόπος σκέψης

Τυπικός ορισμός:

Η αντικειμενοστρέφεια (object-orientation) είναι μία προσέγγιση στην ανάπτυξη λογισμικού που οργανώνει τόσο το πρόβλημα όσο και τη λύση του ως μία συλλογή από διακριτά αντικείμενα.

Τα αντικείμενα αλληλεπιδρούν για την επίλυση του προβλήματος

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής

Page 45: Δομές Δεδομένων& Αλγόριθμοι · p=2*PI*r; /* Εύρεση της περιμέτρου του κύκλου από τον τύπο Π=2*π*r */ printf("To εμβαδό

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

Αντικειμενοστρεφής Προγραμματισμός

1967: Simula67 (Νορβηγία) -> πρώτη αντικειμενοστρεφής γλώσσα

’70: Smalltalk (Palo Alto, CA) -> κάθε στοιχείo ένααντικείμενο

Αρχές ’80: o αντικειμενοστρεφής τρόπος σκέψης εισάγεται σε ακαδημαϊκούς κύκλους

’80: C++ (Stroustrup, AT&T): σοβαρή, αποδοτική γλώσσα, πρότυπο στη βιομηχανία

1995: JAVA, Sun Microsystems

Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής