Αλγόριθμοι Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

Σχετικά έγγραφα
Πληροφορική 2. Αλγόριθμοι

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

Βασικές Αρχές Προγραμματισμού

ΑΕΠΠ Ερωτήσεις θεωρίας

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2

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

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

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Πληροφορική II. Ενότητα 2 : Αλγόριθμοι. Δρ. Γκόγκος Χρήστος

Επιλέξτε Σωστό ή Λάθος για καθένα από τα παρακάτω:

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2. Α1. Ο αλγόριθμος είναι απαραίτητος μόνο για την επίλυση προβλημάτων πληροφορικής

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ

Κεφάλαιο 2 ο Βασικές Έννοιες Αλγορίθμων (σελ )

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

Ψευδοκώδικας. November 7, 2011

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Ενδεικτικές Ερωτήσεις Θεωρίας

ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

2 η Διάλεξη C++ Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Πρόβλημα 29 / σελίδα 28

Δομές Ακολουθίας- Επιλογής - Επανάληψης. Δομημένος Προγραμματισμός

Στοιχειώδης προγραμματισμός σε C++

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Κεφάλαιο 2 ο. Επικοινωνία:

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. 1 ο ΚΕΦΑΛΑΙΟ


Οικονόμου Βαγγέλησ Διάλεξη Νο 2. Δομημένοσ Προγραμματιςμόσ - Διάλεξη 2

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

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

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

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

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΩΝ ΚΕΦΑΛΑΙΟ 2 ο ΚΕΦΑΛΑΙΟ 7 ο ΕΡΩΤΗΣΕΙΣ ΓΕΝΙΚΑ ΠΕΡΙ ΑΛΓΟΡΙΘΜΩΝ

for for for for( . */

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

Θεωρητικές Ασκήσεις. ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. 1 ο Μέρος

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον. Διάρκεια 3 ώρες. Όνομα... Επώνυμο... Βαθμός...

Γ7.1 Επανάληψη ύλης Β Λυκείου. Γ Λυκείου Κατεύθυνσης

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

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της;

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

Εισαγωγή στην Πληροφορική

Επιλέξτε Σωστό ή Λάθος για καθένα από τα παρακάτω:

Εισαγωγή στη γλώσσα προγραμματισμού C++

Αλγόριθμοι Αναπαράσταση αλγορίθμων Η αναπαράσταση των αλγορίθμων μπορεί να πραγματοποιηθεί με:

2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ

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

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

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

ΕΡΩΤΗΣΕΙΣ ΔΙΑΦΟΡΩΝ ΤΥΠΩΝ ΣΤΟ ΚΕΦΑΛΑΙΟ 2.2

Πρόβλημα 37 / σελίδα 207

Ο αλγόριθμος πρέπει να τηρεί κάποια κριτήρια

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

A. Να γράψετε τον αριθμό της κάθε μιας από τις παρακάτω προτάσεις και δίπλα. το γράμμα Σ, εάν είναι σωστή, ή το γράμμα Λ, εάν είναι λανθασμένη.

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

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

ΕΡΩΤΗΣΕΙΣ ΑΞΙΟΛΟΓΗΣΗΣ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ ΓΛΩΣΣΟΜΑΘΕΙΑ

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

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΠΑΝΕΛΛΑΔΙΚΩΝ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον

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

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 2 Εντολές Εισόδου/Εξόδου Τελεστές. Δρ. Γιώργος Λαμπρινίδης 23/10/2015 Η - Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 1

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ

Υπολογιστικά & Διακριτά Μαθηματικά

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

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

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

ΑΡΧΗ 2ΗΣ ΣΕΛΙΔΑΣ Γ Α... Β

επιµέλεια Θοδωρής Πιερράτος

Πρόβλημα είναι μια κατάσταση η οποία χρήζει αντιμετώπισης, απαιτεί λύση, η δε λύση της δεν είναι γνωστή, ούτε προφανής.

Κεφάλαιο 10 ο Υποπρογράµµατα

Α1. Στον προγραµµατισµό χρησιµοποιούνται δοµές δεδοµένων. 1. Τι είναι δυναµική δοµή δεδοµένων; Μονάδες 3 2. Τι είναι στατική δοµή δεδοµένων;

1 Ο Λύκειο Ρόδου. Β ΓΕΛ ΕισΑρχΕπ Η/Υ. Γεωργαλλίδης Δημήτρης

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #2

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

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

I. ΑΛΓΟΡΙΘΜΟΣ II. ΠΡΑΞΕΙΣ - ΣΥΝΑΡΤΗΣΕΙΣ III. ΕΠΑΝΑΛΗΨΕΙΣ. 1. Τα πιο συνηθισμένα σενάρια παραβίασης αλγοριθμικών κριτηρίων είναι:

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

Εισαγωγή στην επιστήμη των υπολογιστών. Λογισμικό Υπολογιστών Κεφάλαιο 8ο Αλγόριθμοι

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Πληροφορική 2. Γλώσσες Προγραμματισμού

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον. Κεφάλαια 2,7,8

ΗΥ-150. Προγραμματισμός

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

Φάσμα προπαρασκευή για Α.Ε.Ι. & Τ.Ε.Ι.

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

Δομές Επανάληψης. Εισαγωγή στη C++

Υπολογισμός - Συλλογή Δεδομένων - Πίνακες

Βασικές έννοιες προγραμματισμού

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

ΑΕΠΠ Ερωτήσεις τύπου Σωστό-Λάθος

Transcript:

Αλγόριθμοι Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

Εισαγωγή Τι είναι ένας αλγόριθμος Ευκλείδης πατέρας των ποιο γνωστών αλγορίθμων (πχ ΜΚΔ) Στην αρχή : μαθηματικό παιχνίδι (μεγάλος όγκος υπολογισμών για την επίλυση πρακτικών προβλημάτων) Εποχή των υπολογιστών: οι αλγόριθμοι στη μάχη για την επίλυση άλυτων μέχρι τότε υπολογιστικών προβλημάτων Αλγοριθμική: κλάδος των μαθηματικών που πέρασε στο κλάδο της πληροφορικής

Εισαγωγή Η αλγοριθμική: Ο πυρήνας της επιστήμης της πληροφορικής Τα προγράμματα των υπολογιστών δεν θα ήταν δυνατό να υπάρξουν χωρίς τους αλγορίθμους Τεχνικές σχεδίασης αλγορίθμων : στρατηγικές επίλυσης προβλημάτων

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

Αλγόριθμος- σημαντικά σημεία Ξεκάθαροι έκφραση του κάθε βήματος του αλγορίθμου Σαφής καθορισμός του εύρους των τιμών των εισόδων Αναπαράσταση του αλγορίθμου με διάφορους ισοδύναμους μεταξύ τους τρόπους Ενδέχεται να υπάρχουν περισσότεροι του ενός αλγόριθμοι για την επίλυση του ίδιου προβλήματος Αλγόριθμοι για το ίδιο πρόβλημα μπορεί να βασίζονται σε εντελώς διαφορετικές ιδέες και μπορεί να επιλύουν το πρόβλημα με εντελώς διαφορετικές ταχύτητες

Ευκλείδης Ο αλγόριθμος του ΜΚΔ Μέγιστος Κοινός Διαιρέτης (GCD, greatest common divisor): Ο ΜΚΔ 2 μη αρνητικών, μη ταυτόχρονα-μηδενικών ακεραίων m και n, δηλούμενος ως mkd(m,n) ορίζεται ως ο μεγαλύτερος ακέραιος που διαιρεί ακριβώς τους m και n. Ο Ευκλείδης (Αλεξάνδρεια 3 αιώνας πχ) στο βιβλίο του «στοιχεία» περιέγραψε έναν αλγόριθμο για την επίλυση αυτού του προβλήματος

Ευκλείδης Ο αλγόριθμος του ΜΚΔ Σε σύγχρονους όρους ο αλγόριθμος του Ευκλείδη βασίζεται στην επαναληπτική εφαρμογή της ταυτότητας: Mkd(m,n)=mkd(n,m mod n) Έως ότου το (m mod n ) γίνει ίσο με το 0 M mod n : είναι το υπόλοιπο της διαίρεσης του m από το n Ισχύει ΜΚΔ(m,0)=m (γιατί;) άρα η τελική τιμή του m θα είναι ο ΜΚΔ της αρχικής τιμή του m και του n

Ευκλείδης Ο αλγόριθμος του ΜΚΔ Παράδειγμα Mkd(60,24)=mkd(24,12)=mkd(12,0)=12 Φανταστείτε τον αλγόριθμο να τρέχει για μεγάλους αριθμούς

Ευκλείδης Ο αλγόριθμος του ΜΚΔ Αλγόριθμος του Ευκλείδη για τον υπολογισμό του mkd(m,n): 1. Εάν n=0 επέστρεψε την τιμή του m ως απάντηση και σταμάτησε αλλιώς προχώρα στο βήμα 2 2. Διαίρεσε τον m με τον n και ανάθεσε την τιμή του υπολοίπου στον r 3. Ανάθεσε την τιμή του n στον m και αυτήν του r στον n. Πήγαινε στο βήμα 1

Ευκλείδης Ο αλγόριθμος του ΜΚΔ Ο αλγόριθμος του Ευκλείδη σε μορφή ψευδοκώδικα: 1. // Υπολογισμός του ΜκΔ των αριθμων m & n 2. while n 0 do { 3. r m mod n 4. m n 5. n r 6. } 7. return m

Αλγόριθμος ελέγχου διαδοχικών ακεραίων -ΜΚΔ Από τον ορισμό του ΜΚΔ είναι προφανές ότι ο ΜΚΔ δεν μπορεί να είναι μεγαλύτερος από το μικρότερο από τους δύο αυτούς αριθμούς 1. Ανάθεσε τη τιμή min(m,n) στον t 2. Διαίρεσε τον m με τον t. Εάν το υπόλοιπο της διαίρεσης αυτής είναι 0 πήγαινε στο βήμα 3. Αλλιώς πήγαινε στο βήμα 4 3. Διαίρεσε τον n με τον t. Εάν το υπόλοιπο της διαίρεσης αυτής είναι 0, επέστρεψε την τιμή του t ως απάντηση και σταμάτησε αλλιώς πήγαινε στο βήμα 4 4. Μείωσε την τιμή του t κατά 1. Πήγαινε στο βήμα 2 Παρατηρήστε ότι σε αντίθεση με τον αλγόριθμο του Ευκλειδη, εάν ένας από τους αριθμούς στην είσοδο είναι 0 δεν δουλεύει σωστά

Αλγόριθμος γινομένου πρώτων παραγόντων - ΜΚΔ 1. Ανέλυσε τον m σε γινόμενο πρώτων παραγόντων 2. Ανέλυσε τον n σε γινόμενο πρώτων παραγόντων 3. Τακτοποίησε όλους τους κοινούς παράγοντες στα γινόμενα των Βημάτων 1 και 2. Εάν ένας πρώτος παράγοντας επαναλαμβάνεται p m και p n φορές στα αναπτύγματα των m και n αντίστοιχα, τότε αυτός θα πρέπει να επαναληφθεί min (p m, p n ) φορές 4. Υπολόγισε το γινόμενο όλων των κοινών παραγόντων και επέστρεψε την τιμή αυτή ως το ΜΚΔ των m και n Για τους αριθμούς 60 και 24: 60=2*2*3*5 24=2*2*2*3 ΜΚΔ=2*2*3=12

Πρώτοι Αριθμοί το κόσκινο του Ερατοσθένη Πρώτος αριθμός είναι ένας φυσικός αριθμός μεγαλύτερος της μονάδας με την ιδιότητα οι μόνοι φυσικοί διαιρέτες του να είναι η μονάδα και ο εαυτός του. Το κόσκινο του Ερατοσθένη (200πχ) παράγει διαδοχικούς πρώτους αριθμούς ου δεν υπερβαίνουν ένα δοσμένο ακέραιο n Ο αλγόριθμος ξεκινά αρχικοποιώντας μια λίστα ακεραίων αριθμών από το 2 μέχρι το n Στη 1 η επανάληψη απαλείφει από τη λίστα όλα τα πολλαπλάσια του 2 Κατόπιν προχωρά στην επόμενη τιμή της λίστας δηλαδή στο 3 και απαλείφει όλα τα πολλαπλάσιά του και συνεχίζει στον επόμενο αριθμό που έχει απομείνει στη λίστα (το 5 μιας και το 4 έχει διαγραφή ως πολλαπλάσιο του 2)

ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΙΚΗΣ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ 1. Μπορούμε να θεωρήσουμε τους αλγόριθμους ως διαδικαστικές λύσεις (procedural solutions) για διάφορα προβλήματα. Οι λύσεις αυτές δεν αποτελούν απαντήσεις αλλά ειδικές εντολές για τη λήψη μιας απάντησης

Διαδικασία σχεδίασης και ανάλυσης ενός αλγορίθμου Κατανόηση του προβλήματος Αποφάσεις για: υπολογιστικά μέσα, επακριβή ή προσεγγιστική επίλυση, δομές δεδομένων, τεχνική σχεδίασης αλγορίθμων Σχεδίαση ενός αλγορίθμου Απόδειξη ορθότητας Ανάλυση του αλγόριθμου Κωδικοποίηση του αλγορίθμου

Κατανόηση του προβλήματος Προσεκτικό διάβασμα της περιγραφής του προβλήματος Διευκρινήσεις σε δυσνόητα σημεία Έλεγχος αν υπάρχει ήδη κάποιος αλγόριθμος που να λύνει το συγκεκριμένο πρόβλημα Μια είσοδος σε έναν αλγόριθμο ονομάζεται έκφανση (instance) Επακριβής καθορισμός του εύρους των εκφάνσεων Εάν δεν γίνει σωστός καθορισμός ενδέχεται ο αλγόριθμος να μη δουλεύει σε οριακές περιπτώσεις Σωστός Αλγόριθμος είναι αυτός που δουλεύει καλά για όλες τις εισόδους ΕΠΙΣΤΡΟΦΗ

Αποφάσεις για: υπολογιστικά μέσα, επακριβή η προσεγγιστική επίλυση, δομές δεδομένων, τεχνική σχεδίασης αλγορίθμου Ακολουθιακοί αλγόριθμοι: Οι πιο παλιοί υπολογιστές ήταν βασισμένοι στην αρχιτεκτονική τυχαίας προσπέλασης, όπου οι εντολές εκτελούνται η μια μετά την άλλη, επιτελώντας μια λειτουργία κάθε φορά για αυτό και οι αλγόριθμοι που σχεδιάζονται για αυτή την αρχιτεκτονική λέγονται τυχαίας προσπέλασης Παράλληλοι αλγόριθμοι: Τα νέα υπολογιστικά συστήματα έχουν τη δυνατότητα της εκτέλεσης πολλών παράλληλων λειτουργιών, και οι αλγόριθμοι που σχεδιάζονται για τέτοια συστήματα λέγονται παράλληλοι αλγόριθμοι

Αποφάσεις για: υπολογιστικά μέσα, επακριβή η προσεγγιστική επίλυση, δομές δεδομένων, τεχνική σχεδίασης αλγορίθμου Ουσιώδης επιλογή: ακριβής ή προσεγγιστική λύση Επιλογή των κατάλληλων δομών δεδομένων Πίνακας: Ένας μονοδιάστατος πίνακας (one dimensional array) είναι μια ακολουθία n στοιχείων του ίδιου τύπου, τα οποία βρίσκονται αποθηκευμένα σε συνεχόμενες θέσεις μνήμης στον υπολογιστή, η προσπέλασή τους γίνεται με τον καθορισμό μια τιμής δείκτη (index) του πίνακα αυτού Οι πίνακες χρησιμοποιούνται για την υλοποίηση μιας πληθώρας άλλων δομών δεδομένων όπως η συμβολοσειρά (string) μια ακολουθία από χαρακτήρες που ανήκουν σε ένα αλφάβητο. Η συμβολοσειρά τερματίζεται από έναν ειδικό χαρακτήρα, οποίος καταδεικνύει το τέλος της. Οι συμβολοσειρές που αποτελούνται από μονάδες και μηδενικά καλούνται δυαδικές ή συμβολοσειρές bit

Αποφάσεις για: υπολογιστικά μέσα, επακριβή η προσεγγιστική επίλυση, δομές δεδομένων, τεχνική σχεδίασης αλγορίθμου Λίστα: Πεπερασμένη ακολουθία στοιχείων δεδομένων διατεταγμένα σε γραμμική διάταξη. Απλά συνδεδεμένη λίστα Κώδικας δημιουργίας λίστας #include <stdio.h> #include <stdlib.h> struct node { int data; struct node *next; }

Αποφάσεις για: υπολογιστικά μέσα, επακριβή η προσεγγιστική επίλυση, δομές δεδομένων, τεχνική σχεδίασης αλγορίθμου Διπλά συνδεδεμένη λίστα n στοιχείων Κώδικας δημιουργίας λίστας #include <stdio.h> #include <stdlib.h> struct node { int data; struct node *next; struct node *prev;

Αποφάσεις για: υπολογιστικά μέσα, επακριβή η προσεγγιστική επίλυση, δομές δεδομένων, τεχνική σχεδίασης αλγορίθμου Δύο ειδικοί τύποι λιστών: Στοίβα (stuck): είναι μια λίστα στην οποία η εισαγωγή και η διαγραφή στοιχείων μπορεί να γίνει μόνο στο ένα άκρο της που ονομάζεται κορυφή. Η όλη δομή δεδομένων συμπεριφέρεται με έναν τρόπο τελευταίος μέσα πρώτος έξω (last - in - first out, LIFO) χρησιμοποιούνται κυρίως στην υλοποίηση αναδρομικών αλγορίθμων Ουρά: είναι μια λίστα στη οποία τα στοιχεία διαγράφονται μόνο από το ένα άκρο τους το οποίο ονομάζεται πρόσθιο τμήμα (front). Νέα στοιχεία μπορούν να προστίθενται μόνο στο άλλο άκρο της που ονομάζεται οπίσθιο τμήμα (rear). Η λίστα αυτή λειτουργεί με έναν τρόπο πρώτος μέσα πρώτος έξω (first in first out FIFO)

Αποφάσεις για: υπολογιστικά μέσα, επακριβή η προσεγγιστική επίλυση, δομές δεδομένων, τεχνικές σχεδίασης αλγορίθμου Μια τεχνική σχεδίασης αλγορίθμων ή στρατηγική, ή υπόδειγμα, είναι μια γενική προσέγγιση επίλυσης προβλημάτων με αλγοριθμικό τρόπο, η οποία εφαρμόζεται σε μια ποικιλία προβλημάτων που ανακύπτουν σε διάφορους τομείς της πληροφορικής. ΕΠΙΣΤΡΟΦΗ

Σχεδίαση ενός αλγορίθμου Ωμή βία Απευθείας προσέγγιση της επίλυσης ενός προβλήματος. Πχ εύρεση κλειδιού κρυπτογράφησης Διαίρεση και κυριαρχία Η ποιο διαδεδομένη τεχνική, σπάσιμο του προβλήματος σε πολλά μικρά Μείωση και κυριαρχία : βασίζεται στην εκμετάλλευση της σχέσης που υφίσταται μεταξύ μιας δεδομένης έκφανσης του προβλήματος και της λύσης μιας μικρότερης έκφανσης του ίδιου προβλήματος Μείωση κατά μία σταθερά Μείωση κατά ένα παράγοντα Μειωση μετεβλητου μεγέθους

Σχεδίαση ενός αλγορίθμου Μετασχηματισμός και κυριαρχία: τροποποιείται το πρόβλημα έτσι ώστε να γίνει πιο εύκολο στη λύση του Απλοποίηση έκφανσης Αλλαγή αναπαράστασης Αναγωγή του προβλήματος Δυναμικός προγραμματισμός Τεχνική επίλυσης προβλημάτων τα οποία αποτελούνται από αλληλεπικαλυπτόμενα υποπροβλήματα.

Σχεδίαση ενός αλγορίθμου Τεχνική απληστίας (greedy) Εφαρμόζεται σε προβλήματα βελτιστοποίησης. Η τεχνική αυτή προτείνει την κατασκευή μιας λύσης διαμέσου μιας ακολουθίας βημάτων, όπου το καθένα επεκτείνει μια μερικώς κατασκευασθείσα μέχρι τώρα λύση Επαναληπτική βελτίωση Ξεκινά με κάποια αποδεκτή λύση (λύση η οποία ικανοποιεί τους δοθέντες περιορισμούς του προβλήματος) και προχωρά στη βελτίωσή της, επιτελώντας κατ επανάληψη ένα απλό σχετικά βήμα. ΕΠΙΣΤΡΟΦΗ

Απόδειξη ορθότητας Πρέπει να αποδειχτεί ότι ο αλγόριθμος που καθορίσατε, δουλεύει και παράγει τις επιθυμητές εξόδους για τις αντίστοιχες εισόδους Η ποιο συνηθισμένη μέθοδος είναι η μέθοδος της επαγωγής ΕΠΙΣΤΡΟΦΗ

Ανάλυση του αλγόριθμου Ελέγχουμε τη χρονική και χωρική αποδοτικότητα του αλγορίθμου Την απλότητά του Την γενικότητά του ΕΠΙΣΤΡΟΦΗ

Κωδικοποίηση του αλγορίθμου Η υλοποίηση του αλγορίθμου ως πρόγραμμα ηλεκτρονικού υπολογιστή Ο κίνδυνος έγκειται στη πιθανότητα η μετάβαση από τον αλγόριθμο στο πρόγραμμα να γίνει είτε λανθασμένα είτε μη αποδοτικά Ο έλεγχος των προγραμμάτων των υπολογιστών είναι ουσιαστικά μια τέχνη και όχι μια επιστήμη ΕΠΙΣΤΡΟΦΗ

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

C++

Χρήσιμες διευθύνσεις Περιβάλλον ανάπτυξης: http://www.bloodshed.net/devcpp.html Tutorials: http://www.cplusplus.com/doc/tutorial/ http://www.cprogramming.com/ http://www.netspace.org/~mts/cpp/ http://www.functionx.com/cpp/index.ht m

Διαδικασία συγγραφής και εκτέλεσης προγράμματος

Μεταβλητές Κάθε πρόγραμμα σε οποιαδήποτε γλώσσα και αν είναι γραμμένο, τα δεδομένα του, τις ενδιάμεσες πράξεις, τα αποτελέσματα τα αποθηκεύει στην κεντρική μνήμη επεξεργασίας (RAM) του υπολογιστή. Τη θέση μνήμης που αποθηκεύονται τα παραπάνω για να μπορέσουμε να τη χρησιμοποιήσουμε πρέπει να της δοθεί ένα όνομα. Μεταβλητή είναι μια δεσμευμένη θέση μνήμης της οποίας έχουμε αποδώσει ένα όνομα και μέσω του ονόματος αυτού αναφερόμαστε στη τιμή που είναι αποθηκευμένη σε αυτή

Σταθερές - Εντολές Οι σταθερές είναι προκαθορισμένες τιμές που δεν μεταβάλλονται κατά τη διάρκεια εκτέλεσης ενός προγράμματος. Υπάρχουν αντίστοιχες σταθερές για κάθε τύπο δεδομένων Εντολή είναι μια φράση της γλώσσας προγραμματισμού που αναγκάζει τον Η/Υ να εκτελέσεις μια συγκεκριμένη λειτουργία

Λογικό διάγραμμα

Λογικό διάγραμμα Έστω ότι θέλουμε να δημιουργήσουμε ένα πρόγραμμα το οποίο να δέχεται να υπολογίζει το ΜΟ της εξέτασης προόδου και της τελικής ενός φοιτητή και αν αυτός είναι μεγαλύτερος από 5 τότε να τυπώνει ένα μήνυμα ότι προάγεται ειδάλλως ότι απέτυχε, το λογικό διάγραμμα θα είναι το παρακάτω:

Λογικό διάγραμμα

Το πρώτο μας πρόγραμμα

Το πρώτο μας πρόγραμμα Οι εντολές που ξεκινούν με : #include <cstdlib> #include <iostream> εξαναγκάζουν τον μεταγλωττιστή της C++ να συμπεριλάβει τα αρχεία αυτά κατά τη διάρκεια της μεταγλώττισης. Το αρχείο πχ «iostream> περιέχει τις δηλώσεις των αντικειμένων και των συναρτήσεων εισόδου και εξόδου της c++ (cout) Εντολή using namespace std : ενημερώνει το μεταγλωττιστή της c++ ότι τα ονόματα που θα χρησιμοποιούνται (συναρτήσεις, αντικείμενα) από αυτό το σημείο και μετά θα ανήκουν στο όνομα χώρου std. Η χρήση ονομάτων χώρου δίνει τη δυνατότητα στη c++ να χρησιμοποιεί οντότητες (μεταβλητές, συναρτήσεις, αντικείμενα, κλπ) που έχουν το ίδιο όνομα, αλλά επιτελούν διαφορετική λειτουργία ανάλογα με το όνομα χώρου στο οποίο ανήκουν.

Το πρώτο μας πρόγραμμα Συνάρτηση main() Η συνάρτηση main() είναι υποχρεωτική σε κάθε πρόγραμμα της c++. Στην περίπτωση που το πρόγραμμα μας έχει μια μόνο συνάρτηση, αυτή πρέπει να είναι η main(). Αν το πρόγραμμά μας περιέχει περισσότερες από μια συναρτήσεις η main() είναι η πρώτη που εκτελείται. Η αριστερή αγκύλη { σηματοδοτεί την αρχή των προτάσεων της συνάρτησης και η δεξία } το τέλος τους

Η δομή ενός προγράμματος στη c++ Ένα απλό πρόγραμμα στη C++ αποτελείται συνήθως από 3 βασικά τμήματα: 1. Μια συνάρτηση main(). Κάθε πρόγραμμα περιέχει μια και μόνο μια συνάρτηση main(). 2. Δηλωτικές προτάσεις: int a,b; Δηλώνει 2 ακέραιες μεταβλητές. Κάθε δηλωτική πρόταση τερματίζεται με ελληνικό ερωτηματικό (;) 3. Εκτελέσιμες προτάσεις: Οι εκτελέσιμες προτάσεις αποτελούνται από εντολές παραστάσεις, κλήσεις συναρτήσεων ή χρήση αντικειμένων και επιτελούν μια συγκεκριμένη λειτουργία. Τερματίζονται με το ελληνικό ερωτηματικό (;)

Η δομή ενός προγράμματος στη c++ Σχόλια προγράμματος: Ο σωστός σχεδιασμός ενός προγράμματος επιβάλει τη χρήση σχολίων μέσα στο ίδιο πρόγραμμα με σκοπό να το κάνει περισσότερο ευανάγνωστο και κατανοητό. Τα σχόλια αρχίζουν με το ζεύγος των χαρακτήρων /* και τελειώνουν με τους χαρακτήρες */

Δηλώσεις μεταβλητών Για να χρησιμοποιηθεί μια μεταβλητή πρέπει πρώτα να έχει δηλωθεί. Τύποι μεταβλητών:

Δηλώσεις μεταβλητών Το όνομα μιας μεταβλητής μπορεί να αποτελείται από χαρακτήρες, αριθμούς, και το χαρακτήρα υπογράμμισης «_». Ο πρώτος χαρακτήρας του ονόματος πρέπει να είναι γράμμα. Το πλήθος των χαρακτήρων του ονόματος θεωρητικά είναι απεριόριστο αλλά μπορεί να μεταβάλλεται από έκδοση σε έκδοση. Δεν επιτρέπεται η χρήση Ελληνικών χαρακτήρων σε ονόματα μεταβλητών. Στη c++ οι πεζοί και οι κεφαλαίοι χαρακτήρες είναι διακριτοί.

Δηλώσεις μεταβλητών Στην πρόταση δήλωσης μιας μεταβλητής μπορούμε να της αναθέσουμε και αρχική τιμή int a=4, b; float c=4.6, m; char ch= A ; Στη c++ μπορούμε να δηλώσουμε μεταβλητές στις οποίες να δώσουμε αρχική τιμή χωρίς όμως στη συνέχεια να μπορούμε να τις μεταβάλλουμε: const int a=4; const float b=5.8;

Δηλώσεις μεταβλητών Μπορούμε να δηλώσουμε μεταβλητές σε διάφορα σημεία ενός προγράμματος, ανάλογα με το σημείο που δηλώνεται διαφέρει και το τμήμα του προγράμματος στο οποίο ισχύει Καλό είναι να δηλώνουμε τις μεταβλητές στη αρχή της συνάρτησης (η γλώσσα c σε αντίθεση με τη c++ το απαιτεί) Στη c++ μια μεταβλητή πριν της ανατεθεί μια τιμή έχει απροσδιόριστο περιεχόμενο και όχι 0 ή κενό όπως συμβαίνει σε άλλες γλώσσες

Αριθμητικοί τελεστές ΤΕΛΕΣΤΗΣ ΠΕΡΙΓΡΑΦΗ = Απόδοσης τιμής + πρόσθεση - αφαίρεση * Πολλαπλασιασμός / Διαίρεση % Υπόλοιπο ακέραιας διαίρεσης ++, -- Τελεστές αύξησης και μείωσης κατά 1

Σχεσιακοί τελεστές ΤΕΛΕΣΤΗΣ ΠΕΡΙΓΡΑΦΗ == Ισο!= Όχι ίσο (άνισο) > Μεγαλύτερο >= Μεγαλύτερο ή ίσο < Μικρότερο <= Μικρότερο ή ίσιο Χρησιμοποιούνται για να σχηματίσουμε λογικές συνθήκες. Το αποτέλεσμα είναι μία λογική τιμή, είτε αληθής (true) είτε ψευδής (false).

Λογικοί τελεστές Τελεστής Περιγραφη! Λογικό not && Λογικό and Λογικό or χρησιμοποιούνται για να σχηματίσουν λογικές προτάσεις. ΠΙΝΑΚΑΣ ΑΛΗΘΕΙΑΣ ΤΕΛΕΣΤΗ! (NOT) ΛΟΓΙΚΗ ΕΚΦΡΑΣΗ Α!Α ΑΛΗΘΗΣ ΨΕΥΔΗΣ ΨΕΥΔΗΣ ΑΛΗΘΗΣ

Λογικοί τελεστές ΠΙΝΑΚΑΣ ΑΛΗΘΕΙΑΣ ΛΟΓΙΚΟΥ ΤΕΛΕΣΤΗ && (AND) ΛΟΓΙΚΗ ΕΚΦΡΑΣΗ Α ΛΟΓΙΚΗ ΕΚΦΡΑΣΗ Β Α&&Β ΑΛΗΘΗΣ ΑΛΗΘΗΣ ΑΛΗΘΗΣ ΑΛΗΘΗΣ ΨΕΥΔΗΣ ΨΕΥΔΗΣ ΨΕΥΔΗΣ ΑΛΗΘΗΣ ΨΕΥΔΗΣ ΨΕΥΔΗΣ ΨΕΥΔΗΣ ΨΕΥΔΗΣ ΠΙΝΑΚΑΣ ΑΛΗΘΕΙΑΣ ΛΟΓΙΚΟΥ ΤΕΛΕΣΤΗ (OR) ΛΟΓΙΚΗ ΕΚΦΡΑΣΗ Α ΛΟΓΙΚΗ ΕΚΦΡΑΣΗ Β Α Β ΑΛΗΘΗΣ ΑΛΗΘΗΣ ΑΛΗΘΗΣ ΑΛΗΘΗΣ ΨΕΥΔΗΣ ΑΛΗΘΗΣ ΨΕΥΔΗΣ ΑΛΗΘΗΣ ΑΛΗΘΗΣ ΨΕΥΔΗΣ ΨΕΥΔΗΣ ΨΕΥΔΗΣ

ΠΑΡΑΣΤΑΣΕΙΣ Μια παράσταση αποτελείται από σταθερές, μεταβλητές και συναρτήσεις, συνήθως σε συνδυασμό με αριθμητικούς (πχ +,-) ή λογικούς τελεστές Ο τελεστής ίσον (=) καταχωρίζει το αποτέλεσμα της παράστασης που βρίσκεται δεξιά του, στη μεταβλητή που εμφανίζεται στα αριστερά του. Αριστερά από έναν τελεστή (=) επιτρέπεται να εμφανίζεται μόνο το όνομα μιας μεταβλητής Το αποτέλεσμα μιας παράστασης είναι του ίδιου τύπου δεδομένων με το τύπο του ιεραρχικά υψηλότερου μέλους της παράστασης: int a=10,b=5; float c; C=(a+b)/2 Η μεταβλητή C θα πάρει τη τιμή 7 και όχι 7.5 θα είναι τύπου int Αν θέλουμε να πάρουμε το σωστό αποτέλεσμα θα πρέπει να γράψουμε C=(a+b)/2.0;

Αλφαριθμητικές σταθερές Οι αλφαριθμητικές σταθερές είναι σύνολα χαρακτήρων μέσα σε διπλά εισαγωγικά ( this is a char ) Προσοχή να μη γίνει σύγχυση με τις σταθερές χαρακτήρων, οι οποίες περιέχουν ένα χαρακτήρα μέσα απλά εισαγωγικά ( C ) τις οποίες η c++ χειρίζεται σαν αριθμούς

Η c++ και οι αγκύλες της Οι {} αποτελούν ένα βασικό κομμάτι της φιλοσοφίας της c++ για τη δημιουργία δομημένων και «ευανάγνωστων προγραμμάτων» Χρησιμοποιούνται για τη δημιουργία σύνθετων προτάσεων, δηλαδή προτάσεων που αποτελούνται από περισσότερες προτάσεις, αλλά αντιμετωπίζονται από τη C++ ως μια πρόταση Μέσα σε μια σύνθετη πρόταση μπορούν να δηλωθούν μεταβλητές που να έχουν ισχύ μόνο μέσα στη πρόταση { a=4; { int m=8; cout<< m; } }

Η οδηγία define #define PI 3.141593 main() { float aktina,emvadon; aktina=10; emvadon=aktina*aktina*pi; }

ΜΚΔ - ευκλειδης #include <iostream> main() { int r; int a=30, b = 16; while (b!= 0) { r = b; b = a % b; a = r; } printf("mkd=%d", a); system("pause"); return 0; }