343 Ειςαγωγι ςτον Προγραμματιςμό

Σχετικά έγγραφα
343 Ειςαγωγι ςτον Προγραμματιςμό

Τίτλος Μαθήματος: Εισαγωγή στον Προγραμματισμό

343 Ειςαγωγι ςτον Προγραμματιςμό

343 Ειςαγωγι ςτον Προγραμματιςμό

Τίτλος Μαθήματος: Εισαγωγή στον Προγραμματισμό

Δομζσ Δεδομζνων. Αναηιτθςθ και Ταξινόμθςθ Διάλεξθ 3

343 Ειςαγωγι ςτον Προγραμματιςμό

343 Ειςαγωγι ςτον Προγραμματιςμό

Τίτλος Μαθήματος: Εισαγωγή στον Προγραμματισμό

343 Ειςαγωγι ςτον Προγραμματιςμό

343 Ειςαγωγι ςτον Προγραμματιςμό

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

Τίτλος Μαθήματος: Εισαγωγή στον Προγραμματισμό

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

17. Πολυδιάςτατοι πίνακεσ

343 Ειςαγωγι ςτον Προγραμματιςμό

343 Ειςαγωγι ςτον Προγραμματιςμό

242 -ΕισαγωγήστουςΗ/Υ

Δομζσ Δεδομζνων Πίνακεσ

Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. 15. Πίνακεσ ΙI. Ιωάννθσ Κατάκθσ. ΕΠΛ 032: Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων

343 Ειςαγωγι ςτον Προγραμματιςμό

Πληροφορική 2. Αλγόριθμοι

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

ΕΡΓΑΣΗΡΙΑΚΗ ΑΚΗΗ 4.1

Τίτλος Μαθήματος: Εισαγωγή στον Προγραμματισμό

Διάλεξη 17η: Ταξινόμηση και Αναζήτηση

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

16. Πίνακεσ και Συναρτήςεισ

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

Ιδιότθτεσ πεδίων Γενικζσ.

Παράςταςη ακεραίων ςτο ςυςτημα ςυμπλήρωμα ωσ προσ 2

Εργαστηριακή Άσκηση 1

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;..

Δείκτεσ Διαχείριςθ Μνιμθσ. Βαγγζλθσ Οικονόμου Διάλεξθ 8

Εργαστήριο 2: Πίνακες

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

Εγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Εθνικό Τυπογραφείο)

ΗΥ-150. Ταξινόµηση και Αναζήτηση

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

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

Ιςοηυγιςμζνα δζντρα και Β- δζντρα. Δομζσ Δεδομζνων

Δομθμζνοσ Προγραμματιςμόσ. Βαγγζλθσ Οικονόμου Εργαςτιριο 9

Εργαςτιριο Βάςεων Δεδομζνων

Εισαγωγή στον δομημένο προγραμματισμό

343 Ειςαγωγι ςτον Προγραμματιςμό

Δομζσ Αφαιρετικότθτα ςτα Δεδομζνα

Εγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Εθνικό Τυπογραφείο)

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

Ηλεκτρονικι Επιχειρθςιακι Δράςθ Εργαςτιριο 1

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

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

Ένα πρόβλθμα γραμμικοφ προγραμματιςμοφ βρίςκεται ςτθν κανονικι μορφι όταν:

343 Ειςαγωγι ςτον Προγραμματιςμό

Ειδικά Θζματα Βάςεων Δεδομζνων

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

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

Οδηγίεσ προσ τουσ εκπαιδευτικοφσ για το μοντζλο τησ Αριθμογραμμήσ

Προγραμματισμός Η/Υ. Ενότητα 8: Ειδικά Θέματα Αλγορίθμων

ΑΞΙΟΛΟΓΗΣΗ ΕΚΠΑΙΔΕΥΤΙΚΟΥ

Προχωρημένες έννοιες προγραμματισμού σε C

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 7 θ Διάλεξθ Διαχείριςθ Μνιμθσ Μζροσ Γ

Γράφοι. Δομζσ Δεδομζνων Διάλεξθ 9

x n D 2 ENCODER m - σε n (m 2 n ) x 1 Παραδείγματα κωδικοποιθτϊν είναι ο κωδικοποιθτισ οκταδικοφ ςε δυαδικό και ο κωδικοποιθτισ BCD ςε δυαδικό.

Οδηγίεσ προσ τουσ εκπαιδευτικοφσ για το μοντζλο του Άβακα

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης

Πολυπλέκτες. 0 x 0 F = S x 0 + Sx 1 1 x 1

ΕΝΟΤΘΤΑ 2: ΕΠΙΚΟΙΝΩΝΩ ΜΕ ΤΟΝ ΥΠΟΛΟΓΙΣΤΘ. ΚΕΦΑΛΑΙΟ 6: Θ «Βοικεια» ςτον Υπολογιςτι

ΕΦΑΡΜΟΓΕ ΒΑΕΩΝ ΔΕΔΟΜΕΝΩΝ ΣΗ ΝΟΗΛΕΤΣΙΚΗ. Φιλιοποφλου Ειρινθ

ςυςτιματα γραμμικϊν εξιςϊςεων

Αλγόριθμοι Ταξινόμησης Μέρος 1

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 8: Αναζήτηση και ταξινόμηση

Δζντρα. Δομζσ Δεδομζνων

5 ΜΕΘΟΔΟΙ - ΠΑΡΑΜΕΤΡΟΙ

Αλγόριθμοι Αναζήτησης

Τίτλος Μαθήματος: Θεωρία Γραφημάτων. Ενότητα: Εισαγωγικά μαθήματος. Διδάσκων: Λέκτορας Xάρης Παπαδόπουλος. Τμήμα: Μαθηματικών

Εργαστήριο 6: Αναζήτηση, Ανάλυση Πολυπλοκότητας

Α) Ενδεικτικϋσ απαντόςεισ των θεμϊτων

Joomla! - User Guide

343 Ειςαγωγι ςτον Προγραμματιςμό

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

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

5. Απλή Ταξινόμηση. ομές εδομένων. Χρήστος ουλκερίδης. Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Αναζήτηση και Ταξινόμηση Χειμερινό Εξάμηνο 2016

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

Εγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Περιφέρειες)

Διδάςκων: Κωνςταντίνοσ τεφανίδθσ

Τίτλος Μαθήματος: Εισαγωγή στον Προγραμματισμό

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

Διάλεξη 04: Παραδείγματα Ανάλυσης

ΗΛΕΚΣΡΟΝΙΚΗ ΤΠΗΡΕΙΑ ΑΠΟΚΣΗΗ ΑΚΑΔΗΜΑΪΚΗ ΣΑΤΣΟΣΗΣΑ

242 -ΕισαγωγήστουςΗ/Υ

Ειδικζσ Ναυπηγικζσ Καταςκευζσ και Ιςτιοφόρα κάφη (Ε)

Παράςταςη ςυμπλήρωμα ωσ προσ 1

Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4. Παραδείγματα Ανάλυσης Πολυπλοκότητας Ανάλυση Αναδρομικών Αλγόριθμων

ΟΝΟΜΑΣΟΛΟΓΙΑ ΠΑΡΑΜΕΣΡΩΝ ΓΙΑ ΠΡΟΑΡΜΟΜΕΝΕ ΑΝΑΦΟΡΕ. παραμζτρου> (Εμφανίηεται ςαν Caption ςτθν φόρμα των φίλτρων).

Τίτλος Μαθήματος: Εισαγωγή στον Προγραμματισμό

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

assessment.gr USER S MANUAL (users)

ΠΡΟΓΡΑΜΜΑΣΙΜΌ ΤΠΟΛΟΓΙΣΏΝ. Κεφάλαιο 8 Η γλϊςςα Pascal

Transcript:

343 Ειςαγωγι ςτον Προγραμματιςμό Τμιμα Μακθματικϊν Πανεπιςτιμιο Ιωαννίνων Ακαδθμαϊκό Ζτοσ 2016-2017 Χάρθσ Παπαδόπουλοσ 207δ, B όροφοσ e-mail: charis@cs.uoi.gr Ωρεσ Γραφείου: Πζμπτθ 11-13

Θ: διάλεξη (θεωρία) Ε: Εργαστήριο Q: Σεστ quiz Επιπλζον Προαιρετικό Εργαςτιριο Οκτώβριος 2015 Δ Σ Σ Π Π 3 4 5 6 7 Θ 10 11 12 13 14 Θ 17 18 19 20 21 Θ 24 Ε 25 Ε 26 27 28 Νοέμβριος 2015 Δ Σ Σ Π Π 1 2 3 4 Θ 7 Ε 8 Ε 9 10 11 Θ 14 Ε 15 16 17 18 Θ 21 Σ 22 23 24 25 Θ 28 Ε 29 Ε 30 Δεκέμβριος 2015 Δ Σ Σ Π Π 1 2 Θ 5 E 6 Ε 7 8 9 Θ 6 ο Εργαςτήριο: Προαιρετικό (χωρίσ παρουςία) Δευτζρα 19 Δεκεμβρίου Τρίτθ 20 Δεκεμβρίου ϊρεσ 14-15:30, Τμιματα Α1 & Α2-11036 ϊρεσ 15:30-17, Τμιματα Α3 & Α4 11037-11146 ϊρεσ 17-18:30, Τμιματα Α5 & Β1 11147-12 Q 13 14 15 16 Θ 19 20 Ε 21 22 23 Ιανουάριος 2016 Δ Σ Σ Π Π 2 3 4 5 6 9 10 11 12 13 Θ

Τελικι Βακμολογία Επιτυχήσ παρακολοφθηςη των υποχρεωτικϊν εργαςτθρίων μια (1) το πολφ απουςία ςτα 5 ή 6 εργαςτθριακά μακιματα Ζνα (1) τεςτ (Τ1) με βάροσ 15% του ςυνολικοφ βακμοφ. Ανάπτυξθ Κϊδικα ςτο Εργαςτιριο Ζνα (1) quiz (Q2) με βάροσ 15% του ςυνολικοφ βακμοφ. Ερωτιςεισ Πολλαπλϊν Επιλογϊν Όςοι απουςιάςουν ςε ζνα τεςτ ι quiz: μθδενίηεται το 15% Παλαιότεροι φοιτητζσ: μποροφν να λάβουν μζροσ ςτα τεςτ ι ςτα quiz Σελική βαθμολογία (με επιτυχι παρακολοφκθςθ εργαςτθρίων): TB = max 15% Τ1 + 15% Q2 + 70% ΓρΕξ ΓρΕξ

2 ο Quiz Το 2 ο quiz κα διεξαχκεί τθν Δευτζρα 12 Δεκεμβρίου Διάρκεια: 45 λεπτά 12 Ερωτιςεισ με απαντιςεισ πολλαπλϊν επιλογϊν + 2 Ερωτιςεισ: Ονοματεπϊνυμο & Α.Μ. Ώρεσ Α. Μ. 14:00-14:45 ΤΜΗΜΑ Α1 14:45-15:30 ΤΜΗΜΑ Α2 15:30-16:15 ΤΜΗΜΑ Α3 16:15-17:00 ΤΜΗΜΑ Α4 17:00-17:45 ΤΜΗΜΑ Α5 17:45-18:30 ΤΜΗΜΑ Β1 Αν λείψετε: Δεν μετράει ωσ απουςία Μθδενίηεται το 15% 18:30-19:15 ΤΜΗΜΑ που δεν ανικουν Α1-Α5,Β1 6-4

ecourse.uoi.gr 8-5

ecourse.uoi.gr 8-6

ecourse.uoi.gr 8-7

ecourse.uoi.gr Σθμειϊςτε: Username & Password 8-8

Θ: διάλεξη (θεωρία) Ε: Εργαστήριο Q: Σεστ quiz Οκτώβριος 2015 Δ Σ Σ Π Π 3 4 5 6 7 Θ 10 11 12 13 14 Θ 17 18 19 20 21 Θ 24 Ε 25 Ε 26 27 28 Νοέμβριος 2015 Δ Σ Σ Π Π 1 2 3 4 Θ 7 Ε 8 Ε 9 10 11 Θ 14 Ε 15 16 17 18 Θ 21 Σ 22 23 24 25 Θ 28 Ε 29 Ε 30 Δεκέμβριος 2015 Δ Σ Σ Π Π 1 2 Θ 5 E 6 Ε 7 8 9 Θ 12 Q 13 14 15 16 Θ 19 20 Ε 21 22 23 Ιανουάριος 2016 Δ Σ Σ Π Π 2 3 4 5 6 9 10 11 12 13 Θ Ημερολόγιο Μακιματοσ Εβδομάδα Θζματα Υλη βιβλιογραφίασ Πα, 7 Οκτωβρίου Εισαγωγικά μαθήματος & Δυαδική *1+: 1.1, Παράρτθμα 3 αναπαράσταση *2+: Κεφ. 1, Β, Δ Πα, 14 Οκτωβρίου Είσοδος/Έξοδος δεδομένων, τύποι δεδομένων & *1+: 1.2, 1.3, 1.4, 1.5, Παράρτθμα 1 μεταβλητών *2+: Κεφ. 2, Γ Πα, 21 Οκτωβρίου Προεπεξεργαστής, αριθμητικοί και λογικοί *1+: 2.1, Παράρτθμα 2 τελεστές *2+: 4.11, 4.12, Α, ΣΤ Δε, Σρ, 24-25 Οκτ 1 ο Εργαστήριο Πα, 4 Νοεμβρίου Ροή ελέγχου: if/else, switch, for, while, do-while [1]: 2.2, 2.3 και ροή ελέγχου if/else *2+: Κεφ. 4, Κεφ. 5 Δε, Σρ, 7-8 Νοε 2 ο Εργαστήριο Πα, 11 Νοεμβρίου υναρτήσεις, εμβέλεια μεταβλητών και [1]: 3.1, 3.2, 3.3, 4.1, 4.2, 13.1, 13.2 αναδρομή *2+: Κεφ. 6 Δε, Σρ, 14-15 Νοε 3 ο Εργαστήριο Πα, 18 Νοεμβρίου Επανάληψη Εργαστηρίου [1]: 5.1, 5.2, 5.4 *2+: Κεφ. 7 Δε, 21 Νοε 1 ο Test (Ανάπτυξη κώδικα) Πα, 25 Νοεμβρίου Επανάληψη με Παραδείγματα [1]: 5.1, 5.2, 5.4 *2+: Κεφ. 7 Δε, Σρ, 28-29 Νοε 4 ο Εργαστήριο Πα, 2 Δεκεμβρίου Πίνακες (μονοδιάστατοι και πολυδιάστατοι) *1+: Παράρτθμα 4, 9.1, 9.2, 9.3 *2+: 6.7, 6.8, Κεφ. 18 Δε, Σρ, 5-6 Δεκ 5 ο Εργαστήριο Πα, 9 Δεκεμβρίου Εφαρμογές σε ταξινομήσεις και αναζήτηση *1+: Παράρτθμα 4, 9.1, 9.2, 9.3 στοιχείων *2+: 6.7, 6.8, Κεφ. 18 Δε, 12 Δεκ 2 ο Quiz (Ερωτήσεις πολλαπλών επιλογών) Πα, 16 Δεκεμβρίου υμβολοσειρές, εγγραφές, δομές και χρήση [1]: 6.1, 5.3, 12.1, 12.2, 12.4, 13.3 αρχείων *2+: Κεφ. 21, 7.7, 7.8, 17.1-17.10, 19 Δε, 19 Δεκ 6 ο Εργαστήριο (Προαιρετικό) Πα, 13 Ιανουαρίου Επανάληψη

Θ: διάλεξη (θεωρία) Ε: Εργαστήριο Q: Σεστ quiz Οκτώβριος 2015 Δ Σ Σ Π Π 3 4 5 6 7 Θ 10 11 12 13 14 Θ 17 18 19 20 21 Θ 24 Ε 25 Ε 26 27 28 Νοέμβριος 2015 Δ Σ Σ Π Π 1 2 3 4 Θ 7 Ε 8 Ε 9 10 11 Θ 14 Ε 15 16 17 18 Θ 21 Σ 22 23 24 25 Θ 28 Ε 29 Ε 30 Δεκέμβριος 2015 Δ Σ Σ Π Π 1 2 Θ 5 E 6 Ε 7 8 9 Θ 12 Q 13 14 15 16 Θ 19 20 Ε 21 22 23 Ιανουάριος 2016 Δ Σ Σ Π Π 2 3 4 5 6 9 10 11 12 13 Θ Ημερολόγιο Μακιματοσ Εβδομάδα Θζματα Υλη βιβλιογραφίασ Πα, 7 Οκτωβρίου Εισαγωγικά μαθήματος & Δυαδική *1+: 1.1, Παράρτθμα 3 αναπαράσταση *2+: Κεφ. 1, Β, Δ Πα, 14 Οκτωβρίου Είσοδος/Έξοδος δεδομένων, τύποι δεδομένων & *1+: 1.2, 1.3, 1.4, 1.5, Παράρτθμα 1 μεταβλητών *2+: Κεφ. 2, Γ Πα, 21 Οκτωβρίου Προεπεξεργαστής, αριθμητικοί και λογικοί *1+: 2.1, Παράρτθμα 2 τελεστές *2+: 4.11, 4.12, Α, ΣΤ Δε, Σρ, 24-25 Οκτ 1 ο Εργαστήριο Πα, 4 Νοεμβρίου Ροή ελέγχου: if/else, switch, for, while, do-while [1]: 2.2, 2.3 και ροή ελέγχου if/else *2+: Κεφ. 4, Κεφ. 5 Δε, Σρ, 7-8 Νοε 2 ο Εργαστήριο Πα, 11 Νοεμβρίου υναρτήσεις, εμβέλεια μεταβλητών και [1]: 3.1, 3.2, 3.3, 4.1, 4.2, 13.1, 13.2 αναδρομή *2+: Κεφ. 6 Δε, Σρ, 14-15 Νοε 3 ο Εργαστήριο Πα, 18 Νοεμβρίου Επανάληψη Εργαστηρίου [1]: 5.1, 5.2, 5.4 *2+: Κεφ. 7 Δε, 21 Νοε 1 ο Test (Ανάπτυξη κώδικα) Πα, 25 Νοεμβρίου Επανάληψη με Παραδείγματα [1]: 5.1, 5.2, 5.4 *2+: Κεφ. 7 Δε, Σρ, 28-29 Νοε 4 ο Εργαστήριο Πα, 2 Δεκεμβρίου Πίνακες (μονοδιάστατοι και πολυδιάστατοι) *1+: Παράρτθμα 4, 9.1, 9.2, 9.3 *2+: 6.7, 6.8, Κεφ. 18 Δε, Σρ, 5-6 Δεκ 5 ο Εργαστήριο Πα, 9 Δεκεμβρίου Εφαρμογές σε ταξινομήσεις και αναζήτηση *1+: Παράρτθμα 4, 9.1, 9.2, 9.3 στοιχείων *2+: 6.7, 6.8, Κεφ. 18 Δε, 12 Δεκ 2 ο Quiz (Ερωτήσεις πολλαπλών επιλογών) Πα, 16 Δεκεμβρίου υμβολοσειρές, εγγραφές, δομές και χρήση [1]: 6.1, 5.3, 12.1, 12.2, 12.4, 13.3 αρχείων *2+: Κεφ. 21, 7.7, 7.8, 17.1-17.10, 19 Δε, 19 Δεκ 6 ο Εργαστήριο (Προαιρετικό) Πα, 13 Ιανουαρίου Επανάληψη

Ενότθτα 17 ΑΛΓΟΡΙΘΜΟΙ ΣΑΞΙΝΟΜΗΗ 8-11

Αποτελεςματικότθτα Αλγορίκμου Θα εξετάςουμε διάφορουσ αλγορίκμουσ που επιλφουν ίδια προβλιματα. Όταν ςχεδιάηουμε ζναν αλγόρικμο μασ ενδιαφζρει θ αποτελεςματικότητά του (ταχφτθτα) Ζνασ γνωςτόσ τρόποσ για να ποςοτικοποιοφμε τθν αποτελεςματικότθτα ενόσ αλγορίκμου (πρόγραμμα) γίνεται με τθν εφρεςθ του πλήθοσ των ςυγκρίςεων που χρηςιμοποιεί. Το πλικοσ των ςυγκρίςεων μπορεί να εξαρτάται από τθν είςοδο. Περιπτϊςεισ: χειρότερη, μέςη, καλφτερη 8-12

Παραδείγματα if ( i < 5) i++; if (( i < 5 ) && ( i >0 )) i++; Γίνονται 1 και 2 ςυγκρίςεισ, αντίςτοιχα. Στο ακόλουκο κομμάτι πόςεσ ςυγκρίςεισ γίνονται; for(i=0; i<n; i++) cout << " i = " << i << endl; Στο ακόλουκο (δοκιμάςτε με αρχικζσ τιμζσ i=0 και i=4): while(i<5){ cout << " i = " << i << endl; i+=2; } 8-13

Ταξινόμθςθ Πινάκων Ταξινόμθςθ ςε αφξουςα τάξθ: a[0] a*1+... a[99] Ταξινόμθςθ ςε φκίνουςα τάξθ: a[0] a[1]... a[99] Πολφ ςπουδαία εφαρμογι Σχεδόν κάκε οργανιςμόσ πρζπει να ταξινομεί κάποια δεδομζνα Συνικωσ οι επιχειριςεισ πρζπει να ταξινομοφν ι να κρατάνε ταξινομθμζνα μεγάλο όγκο δεδομζνων Ταξινομοφμε ζνα πίνακα με n (< 100) ςτοιχεία Θεωροφμε τον πίνακα ωσ μερικϊσ ςυμπλθρωμζνο πίνακα 8-14

Χριςθ ςυναρτιςεων Σε όλουσ τουσ αλγορίκμουσ κα χρθςιμοποιιςουμε τισ ακόλουκεσ ςυναρτιςεισ: Εναλλαγι ςτοιχείων void swapvalues(int& v1, int& v2) { int temp; temp = v1; v1 = v2; v2 = temp; } Θα μποροφςε και με αυτι τθν διλωςθ void swap(int a[], int i, int j) { int temp; temp = a[i]; a[i] = a[j]; a[j] = temp; } 8-15

Χριςθ ςυναρτιςεων Σε όλουσ τουσ αλγορίκμουσ κα χρθςιμοποιιςουμε τισ ακόλουκεσ ςυναρτιςεισ: Διάβαςμα void fillarray(int a[], int size, int& numberused) { cout << "Δώσε θετικούς αριθμούς (αρνητικό για τέλος).\n"; int next, index = 0; cin >> next; while ((next >= 0) && (index < size)) { a[index] = next; index++; cin >> next; } } numberused = index; 8-16

Χριςθ ςυναρτιςεων Σε όλουσ τουσ αλγορίκμουσ κα χρθςιμοποιιςουμε τισ ακόλουκεσ ςυναρτιςεισ: Εκτφπωςθ void printarray(int a[], int size) { for(int i = 0; i < size; i++) cout << a[i] << " "; cout << endl; }... printarray(a, numberused)... 8-17

#include <iostream> using namespace std; const int MAX_SIZE = 100; void fillarray(int a[], int size, int& numberused); void printarray(int a[], int size); void swapvalues(int& v1, int& v2); void sort(int a[], int size); int main( ) { int a[max_size], numberused; fillarray(a, MAX_SIZE, numberused); sort(a, numberused); printarray(a, numberused); } return 0; 8-18

Ταξινόμθςθ Πινάκων - Bubble Sort Μζκοδοσ τθσ πζτρασ (παραλλαγι: μζκοδοσ φυςαλίδασ ) Κάνει n-1 περάςματα πάνω από τον πίνακα: p=1,2,,n-1 Κατά το p πζραςμα, διαδοχικά ηεφγθ ςτοιχείων ςτισ κζςεισ i=0,1,,n-p ςυγκρίνονται Εάν είναι ςε αφξουςα τάξθ (ι ίςα), τα αφινουμε ζτςι Εάν δεν είναι ςε αφξουςα τάξθ, τα ανταλλάςςουμε Σε κάκε πζραςμα το επόμενο μεγαλφτερο ςτοιχείο βυκίηεται ςτθν ςωςτι κζςθ Επαναλαμβάνουμε μζχρι πλιρουσ ταξινόμθςθσ Εφκολο πρόγραμμα αλλά αργό Αρχίηοντασ τισ ςυγκρίςεισ από το τζλοσ του πίνακα προσ τθν αρχι ζχουμε τον αλγόρικμο τθσ φυςαλίδασ, όπου ςε κάκε πζραςμα το επόμενο μικρότερο ςτοιχείο ανεβαίνει ςτθν ςωςτι κζςθ 8-19

Ταξινόμθςθ Πινάκων - Bubble Sort Παράδειγμα Αρχικόσ πίνακασ: 3 4 2 6 7 Πζραςμα 1: 3 2 4 6 7 Πζραςμα 2: 2 3 4 6 7 Πζραςμα 3: 2 3 4 6 7 Πζραςμα 4: 2 3 4 6 7 8-20

Ταξινόμθςθ Πινάκων - Bubble Sort Παράδειγμα Αρχικόσ πίνακασ: 3 4 2 6 7 Πζραςμα 1: 3 2 4 6 7 Πζραςμα 2: 2 3 4 6 7 Πζραςμα 3: 2 3 4 6 7 Πζραςμα 4: 2 3 4 6 7 void sort(int a[], int size) { for(int pass = 1; pass < size; pass++) for(int i = 0; i < size pass; i++) if( a[i] > a[i+1]) swapvalues(a[i], a[i+1]); } 8-21

Ταξινόμθςθ Πινάκων Selection Sort Μζκοδοσ τθσ επιλογισ του επόμενου μικρότερου ςτοιχείου Κάνει n-1 περάςματα πάνω από τον πίνακα: p=0,1,2,3,,n-2 Στο p πζραςμα επιλζγουμε το μικρότερο ςτοιχείο μεταξφ των ςτοιχείων ςτισ κζςεισ i=p,,n-1 και το ανταλλάςςουμε με αυτό ςτθν p κζςθ του πίνακα Στο πρϊτο πζραςμα επιλζγουμε το μικρότερο ςτοιχείο και το βάηουμε ςτθν πρϊτθ κζςθ του πίνακα, μετά επιλζγουμε το επόμενο μικρότερο ςτοιχείο και το ανταλλάςςουμε με αυτό ςτθν δεφτερθ κζςθ, κ.ο.κ Επαναλαμβάνουμε μζχρι πλιρουσ ταξινόμθςθσ Εφκολο πρόγραμμα αλλά αργό 8-22

Ταξινόμθςθ Πινάκων Selection Sort Παράδειγμα Αρχικόσ πίνακασ: 6 5 2 4 3 Πζραςμα 1: 2 5 6 4 3 Πζραςμα 2: 2 3 6 4 5 Πζραςμα 3: 2 3 4 6 5 Πζραςμα 4: 2 3 4 5 6 Δυο εκδοχζσ Μποροφμε να δουλζψουμε και με maximum 8-23

Ταξινόμθςθ Πινάκων Selection Sort void sort(int a[], int size) { int min; for(int pass = 0; pass < size-1; pass++) { min = pass; for(int i = pass+1; i < size; i++) if( a[i] < a[min]) min = i; } swapvalues(a[pass], a[min]); } 8-24

Ταξινόμθςθ Πινάκων Insertion Sort Μζκοδοσ τθσ ειςαγωγισ του επόμενου ςτοιχείου ςτθν κατάλλθλθ κζςθ Κάνει n-1 περάςματα πάνω από τον πίνακα p=1,2,3,,n-1 Στο p πζραςμα το p ςτοιχείο ειςάγεται ςτθν ςωςτι κζςθ ςυγκρινόμενο με τα ςτοιχεία ςτισ κζςεισ i=0,1,,p-1. Θεωροφμε ότι τα ςτοιχεία ςτισ κζςεισ i=0,1,,p-1 είναι ιδθ ταξινομθμζνα Σε κάκε πζραςμα ζνα ςτοιχείο ςυγκρίνεται με τα ςτοιχεία πριν από αυτό και ειςάγεται ςτθν ςωςτι κζςθ γίνονται ανταλλαγζσ με τα μεγαλφτερα από αυτό ςτοιχεία Επαναλαμβάνουμε μζχρι πλιρουσ ταξινόμθςθσ Εφκολο πρόγραμμα αλλά αργό 8-25

Ταξινόμθςθ Πινάκων Selection Sort Παράδειγμα Αρχικόσ πίνακασ: 6 5 2 4 3 Πζραςμα 1: 6 5 2 4 3 Πζραςμα 1: 5 6 2 4 3 Πζραςμα 2: 5 6 2 4 3 Πζραςμα 2: 2 5 6 4 3 Πζραςμα 3: 2 5 6 4 3 Πζραςμα 3: 2 4 5 6 3 Πζραςμα 4: 2 5 6 4 3 Πζραςμα 4: 2 4 5 6 3 8-26

Ταξινόμθςθ Πινάκων Selection Sort Παράδειγμα Αρχικόσ πίνακασ: 6 5 2 4 3 Πζραςμα 1: 6 5 2 4 3 Πζραςμα 1: 5 6 2 4 3 Πζραςμα 2: 5 6 2 4 3 Πζραςμα 2: 2 5 6 4 3 Πζραςμα 3: 2 5 6 4 3 Πζραςμα 3: 2 4 5 6 3 Πζραςμα 4: 2 5 6 4 3 Πζραςμα 4: 2 4 5 6 3... temp = a[i]; j = i; while( temp < a[ j - 1 ] ) { a[ j ] = a[ j - 1 ]; j--; }... 8-27

Ταξινόμθςθ Πινάκων Insertion Sort void sort(int a[], int size) { int i, j, temp; for( int i = 1; i < size; i++ ) { temp = a[ i ]; Δεν ζχει βρεκεί ακόμα θ ςωςτι κζςθ } for(j = i; j > 0 && temp < a[ j - 1 ]; j-- ) a[ j ] = a[ j - 1 ]; Μετακίνθςθ όλων των a[ j ] = temp; ςτοιχείων μια κζςθ δεξιά } 8-28

Ενότθτα 18 ΑΝΑΖΗΣΗΗ ΣΟΙΧΕΙΟΤ 8-29

Αναηιτθςθ ςτοιχείου ςε πίνακα Αναηιτθςθ κάποιασ τιμισ κλειδί ςε ζνα μονοδιάςτατο πίνακα. Υπάρχουν δφο βαςικζσ μζκοδοι. Γραμμικι αναηιτθςθ Απλι Συγκρίνουμε κάκε ςτοιχείο με τθν τιμι κλειδί που αναηθτάμε Χριςιμθ για μικροφσ μθ ταξινομθμζνουσ πίνακεσ Πολφ αργι, είναι δυνατόν να κάνει n ςυγκρίςεισ ςε ζνα πίνακα με n ςτοιχεία 8-30

Παράδειγμα γραμμικισ αναηιτθςθσ Κλειδί αναηιτθςθσ: key = 7 Ελζγχουμε A[i] == key Α*0+ Α*1] Α*2] Α*3] Α*4] Α*5] Α*6] Α = [ 1, 3, 3, 6, 8, 9, 4 ] i=0 8-31

Παράδειγμα γραμμικισ αναηιτθςθσ Κλειδί αναηιτθςθσ: key = 7 Ελζγχουμε A[i] == key Α*0+ Α*1] Α*2] Α*3] Α*4] Α*5] Α*6] Α = [ 1, 3, 3, 6, 8, 9, 4 ] i=1 8-32

Παράδειγμα γραμμικισ αναηιτθςθσ Κλειδί αναηιτθςθσ: key = 7 Ελζγχουμε A[i] == key Α*0+ Α*1] Α*2] Α*3] Α*4] Α*5] Α*6] Α = [ 1, 3, 3, 6, 8, 9, 4 ] i=2 8-33

Παράδειγμα γραμμικισ αναηιτθςθσ Κλειδί αναηιτθςθσ: key = 7 Ελζγχουμε A[i] == key Α*0+ Α*1] Α*2] Α*3] Α*4] Α*5] Α*6] Α = [ 1, 3, 3, 6, 8, 9, 4 ] i=3 8-34

Παράδειγμα γραμμικισ αναηιτθςθσ Κλειδί αναηιτθςθσ: key = 7 Ελζγχουμε A[i] == key Α*0+ Α*1] Α*2] Α*3] Α*4] Α*5] Α*6] Α = [ 1, 3, 3, 6, 8, 9, 4 ] i=4 8-35

Παράδειγμα γραμμικισ αναηιτθςθσ Κλειδί αναηιτθςθσ: key = 7 Ελζγχουμε A[i] == key Α*0+ Α*1] Α*2] Α*3] Α*4] Α*5] Α*6] Α = [ 1, 3, 3, 6, 8, 9, 4 ] i=5 8-36

Παράδειγμα γραμμικισ αναηιτθςθσ Κλειδί αναηιτθςθσ: key = 7 Ελζγχουμε A[i] == key Α*0+ Α*1] Α*2] Α*3] Α*4] Α*5] Α*6] Α = [ 1, 3, 3, 6, 8, 9, 4 ] i=6 8-37

Παράδειγμα γραμμικισ αναηιτθςθσ Κλειδί αναηιτθςθσ: key = 7 Ελζγχουμε A[i] == key Α*0+ Α*1] Α*2] Α*3] Α*4] Α*5] Α*6] Α = [ 1, 3, 3, 6, 8, 9, 4 ] i=6 Αν δεν βρζκθκε (δεν επιςτρζψαμε τθν κζςθ i του πίνακα) τότε επιςτρζφουμε -1 (θ κζςθ -1 ςε πίνακα δεν υπάρχει) 8-38

int search(int a[ ], int numberused, int target) { int index = 0; bool found = false; while ((!found) && (index < numberused)) { } if (target == a[index]) else found = true; index++; } if (found) return index; else return -1; return -1; 8-39

Δυαδικι Αναηιτθςθ Για ταξινομθμζνουσ πίνακεσ Δυαδικι Αναηιτθςθ Συγκρίνουμε το μεςαίο ςτοιχείο (middle) του πίνακα με το κλειδί (key) που αναηθτάμε If key = middle, τότε βρζκθκε If key < middle, τότε θ αναηιτθςθ γίνεται ςτο αριςτερό ιμιςυ του πίνακα If key > middle, τότε θ αναηιτθςθ γίνεται ςτο δεξιό ιμιςυ του πίνακα Επαναλαμβάνουμε τθν δυαδικι αναηιτθςθ ςτο ιμιςυ που επιλζξαμε Πολφ γριγορθ, κάνει το πολφ log(n) ςυγκρίςεισ ςε ζνα πίνακα με n ςτοιχεία Για n = 1024 κάνει το πολφ 10 ςυγκρίςεισ 8-40

Παράδειγμα Κλειδί αναηιτθςθσ: key = 8 mid = (low+high)/2 Ελζγχουμε A[mid] == key return mid A[mid] < key low=mid+1 A[mid] > key high=mid-1 Α*0+ Α*1+ Α*2+ Α*3+ Α*4+ Α*5+ Α*6+ Α*7] Α = [ 1, 3, 3, 4, 6, 7, 7, 9 ] low mid high 8-41

Παράδειγμα Κλειδί αναηιτθςθσ: key = 8 mid = (low+high)/2 Ελζγχουμε A[mid] == key return mid A[mid] < key low=mid+1 A[mid] > key high=mid-1 Α*0+ Α*1+ Α*2+ Α*3+ Α*4+ Α*5+ Α*6+ Α*7] Α = [ 1, 3, 3, 4, 6, 7, 7, 9 ] low mid high 8-42

Παράδειγμα Κλειδί αναηιτθςθσ: key = 8 mid = (low+high)/2 Ελζγχουμε A[mid] == key return mid A[mid] < key low=mid+1 A[mid] > key high=mid-1 Α*0+ Α*1+ Α*2+ Α*3+ Α*4+ Α*5+ Α*6+ Α*7] Α = [ 1, 3, 3, 4, 6, 7, 7, 9 ] low high mid 8-43

Παράδειγμα Κλειδί αναηιτθςθσ: key = 8 mid = (low+high)/2 Ελζγχουμε A[mid] == key return mid A[mid] < key low=mid+1 A[mid] > key high=mid-1 Α*0+ Α*1+ Α*2+ Α*3+ Α*4+ Α*5+ Α*6+ Α*7] Α = [ 1, 3, 3, 4, 6, 7, 7, 9 ] high low mid 8-44

Παράδειγμα Κλειδί αναηιτθςθσ: key = 8 mid = (low+high)/2 Ελζγχουμε A[mid] == key return mid A[mid] < key low=mid+1 A[mid] > key high=mid-1 Α*0+ Α*1+ Α*2+ Α*3+ Α*4+ Α*5+ Α*6+ Α*7] Α = [ 1, 3, 3, 4, 6, 7, 7, 9 ] high low mid 8-45

Παράδειγμα Κλειδί αναηιτθςθσ: key = 8 mid = (low+high)/2 Ελζγχουμε A[mid] == key return mid A[mid] < key low=mid+1 A[mid] > key high=mid-1 Α*0+ Α*1+ Α*2+ Α*3+ Α*4+ Α*5+ Α*6+ Α*7] Α = [ 1, 3, 3, 4, 6, 7, 7, 9 ] high < low: δεν βρέθηκε! high low mid 8-46

bool binarysearch(int a[ ], int low, int high, int key) { int mid; } if (low > high) else { } return false; mid = (low + high)/2; if (key == a[mid]) return true; else if (key < a[mid]) return binarysearch(a, low, mid - 1, key); else if (key > a[mid]) return binarysearch(a, mid + 1, high, key); 8-47

bool binarysearch(int a[ ], int low, int high, int key) { int mid; } if (low > high) else { } return false; mid = (low + high)/2; if (key == a[mid]) return true; else if (key < a[mid]) return binarysearch(a, low, mid - 1, key); else if (key > a[mid]) Αν κζλουμε και τθν κζςθ που βρίςκεται το key; return binarysearch(a, mid + 1, high, key); 8-48

Ενότθτα 19 ΕΛΑΧΙΣΑ & ΜΕΓΙΣΑ ΣΟΙΧΕΙΑ 8-49

Εφρεςθ Μεγίςτου Ελαχίςτου ταυτόχρονα Αν κζλουμε το μζγιςτο και το ελάχιςτο ςτοιχείο ενόσ πίνακα: void minmax1(int a[], int size, int& min, int& max) { max = 0; min = 0; for(int i=0; i < size; i++) { if(a[i] > a[max]) max = i; if(a[i] < a[min]) min = i; } } Κάνει 2n-2 ςυγκρίςεισ ςε ζνα πίνακα με n ςτοιχεία 8-50

Εφρεςθ Μεγίςτου Ελαχίςτου ταυτόχρονα Αν κζλουμε το μζγιςτο και το ελάχιςτο ςτοιχείο ενόσ πίνακα: void minmax2(int a[], int size, int& min, int& max) { max = 0; min = 0; for(int i=0; i < size; i++) { if(a[i] > a[max]) max = i; else if(a[i] < a[min]) min = i; } } Κάνει κατά μζςο όρο n-1 + n/2 ςυγκρίςεισ ςε ζνα πίνακα με n ςτοιχεία 8-51

Εφρεςθ Μεγίςτου Ελαχίςτου ταυτόχρονα Πιο γριγοροσ: διαιρεί τον πίνακα ςε δφο ιμιςυ και βρίςκει αναδρομικά μζγιςτο και ελάχιςτο ςε κάκε μιςό Το ολικό ελάχιςτο είναι το ελάχιςτο των δφο ελαχίςτων και αντίςτοιχα για το ολικό μζγιςτο MaxMin m=(f+l) / 2 Α F m m+1 L max1, min1 max2, min2 Α F m Α m+1 L Kάνει το πολφ 3n/2-2 ςυγκρίςεισ max=maximum(max1,max2) min=minimum(min1,min2) 8-52

void minmax3(int a[], int low, int high, int& min, int& max) { int min1, max1, min2, max2; int size; } size = high low + 1; if(size == 1) // high = low { min = a[low]; max = a[high]; } else if(size == 2) // a[] = {a[low], a[high]} { if(a[low] < a[high]) { min = a[low]; max = a[high]; } else { min = a[high]; max = a[low]; } } else { minmax3(a, low, (low + size/2-1), min1, max1); minmax3(a, (low + size/2), high, min2, max2); min = (min1 < min2)? min1 : min2 ; max = (max1 > max2)? max1 : max2 ; } 8-53

Πίνακεσ (ςφνοψθ) Είναι μια ςυλλογι από μεταβλθτζσ Βρόχοι for ταιριάηουν απόλυτα για τουσ πίνακεσ Είςτε υπεφκυνοι για να μθν βγείτε ζξω από τα όρια του πίνακα Η παράμετροσ Πίνακα είναι ζνα "νζοσ" τφποσ Παρόμοια με το παράμετρο με αναφορά Τα ςτοιχεία του πίνακα αποκθκεφονται ςειριακά "Συνεχόμενο" κομμάτι ςτθν μνιμθ Μόνο θ διεφκυνςθ του 1 ου ςτοιχείου περνάει ςε ςυν/ςεισ Μερικϊσ ςυμπλθρωμζνοι πίνακεσ περιςςότερεσ μεταβλθτζσ Πολυδιάςτατοι πίνακεσ "πίνακασ από πίνακεσ" 8-54

Βιβλιογραφία Καλι Μελζτθ [1] W. Savitch, Πλιρθσ C++, Εκδόςεισ Τηιόλα, 2011 [2+ Η. Deitel and P. Deitel, C++ Προγραμματιςμόσ 6θ Εκδοςθ, Εκδόςεισ Μ. Γκιοφρδασ, 2013 [1]: 5.3, 13.3 Υλη βιβλιογραφίασ *2+: 7.7, 7.8, 8.6, Κεφ. 19 8-55