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

Σχετικά έγγραφα
Τίτλος Μαθήματος: Εισαγωγή στον Προγραμματισμό

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3 ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ ( while, do while )

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

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

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

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

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

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

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

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

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

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

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

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

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

ΑΝΑΠΣΤΞΘ ΕΦΑΡΜΟΓΩΝ Ε ΠΡΟΓΡΑΜΜΑΣΙΣΙΚΟ ΠΕΡΙΒΑΛΛΟΝ 3 ο ΓΕΝΙΚΟ ΛΤΚΕΙΟ Ν. ΜΤΡΝΘ- ΕΠΙΜΕΛΕΙΑ: ΠΤΡΙΔΑΚΘ Λ.

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

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

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

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

Εργαςτιριο Πικανοτιτων Σθμειϊςεισ προγραμματιςμοφ: βαςικζσ γνϊςεισ ανάπτυξθσ εφαρμογϊν. Κϊςτασ Αρβανιτάκθσ

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

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

8 τριγωνομετρία. βαςικζσ ζννοιεσ. γ ςφω. εφω και γ. κεφάλαιο

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D.

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

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Θεςιακά ςυςτιματα αρίκμθςθσ

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

Ειςαγωγι ςτθν Επιςτιμθ Υπολογιςτϊν. Ειςαγωγι ςτθν Python

Στα προθγοφμενα δφο εργαςτιρια είδαμε τθ δομι απόφαςθσ (ι επιλογισ ι ελζγχου ροισ). Ασ κυμθκοφμε:

ΡΟΓΑΜΜΑΤΙΣΤΙΚΟ ΡΕΙΒΑΛΛΟΝ MICRO WORLDS PRO

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 3 ο Εργαςτιριο υγχρονιςμόσ Διεργαςιϊν

Γενικά Μαθηματικά ΙΙ

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

ΘΥ101: Ειςαγωγι ςτθν Πλθροφορικι

ΦΥΕ 14 ΑΚΑΔ. ΕΤΟΣ Η ΕΡΓΑΣΙΑ. Ημερομηνία παράδοςησ: 12 Νοεμβρίου (Όλεσ οι αςκιςεισ βακμολογοφνται ιςοτίμωσ με 10 μονάδεσ θ κάκε μία)

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

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

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

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

Σχεδίαςη Σφγχρονων Ακολουθιακών Κυκλωμάτων

Μονάδες 6. Μονάδες ΓΑΨΕ Δεν υπάρχει ρίηα 2. ΑΝ Α>0 ΤΟΤΕ 3. ΤΕΛΟΣ_ΑΝ 4. ΑΛΛΙΩΣ 5. ίηα Τ_(Α)

ΛΕΙΤΟΥΓΙΚΆ ΣΥΣΤΉΜΑΤΑ. 5 ο Εργαςτιριο Ειςαγωγι ςτθ Γραμμι Εντολϊν

Τίτλος Μαθήματος: Εισαγωγή στον Προγραμματισμό. Ενότητα: Εισαγωγικά μαθήματος και Δυαδική αναπαράσταση

Ρρογραμματιςμόσ Μεκόδων Επίλυςθσ Ρροβλθμάτων. 18. Αλφαριθμητικά. Ιωάννθσ Κατάκθσ. ΕΡΛ 032: Ρρογραμματιςμόσ Μεκόδων Επίλυςθσ Ρροβλθμάτων

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

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

Η θεωρία τησ ςτατιςτικήσ ςε ερωτήςεισ-απαντήςεισ Μέροσ 1 ον (έωσ ομαδοποίηςη δεδομένων)

Δυναμικι Μθχανϊν I. Διάλεξθ 16. Χειμερινό Εξάμθνο 2013 Τμιμα Μθχανολόγων Μθχ., ΕΜΠ

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

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

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

Γομέρ Γεδομένων (Data Structures) Χαπμανδάπηρ Δςάγγελορ, Τμήμα Δθαπμοζμένων Μαθημαηικών, Δαπινό Δξάμηνο 2010/11. Διζαγωγή: Σύνηομη Δπιζκόπηζη ηηρ C++

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

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

ΕΝΟΤΗΤΑ 2: ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 5: Γνωριμία με το λογιςμικό του υπολογιςτι

Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. Διαφάνειεσ: Βαςικζσ Αρχζσ Προγραμματιςμοφ Α.Π.Θ. Δθμιτρθσ Βράκασ

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

Διαχείριςη Αριθμοδεικτών (v.1.0.7)

Ποσοτικές Μέθοδοι Δρ. Χάϊδω Δριτσάκη

Μεθόδων Επίλυσης Προβλημάτων

Μετατροπι Αναλογικοφ Σιματοσ ςε Ψθφιακό. Διάλεξθ 10

ΜΑΘΗΜΑΤΙΚΑ Α Γυμνασίου

Ειςαγωγή ςτισ Συναρτήςεισ τησ PHP

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

Βάρειπ Δεδξμέμωμ. Επγαστήπιο ΙΙ. Τμήμα Πλεπουοπικήρ ΑΠΘ

Megatron ERP Βάςη δεδομζνων Π/Φ - κατηγοριοποίηςη Databox

ΧΕΔΙΑΜΟ ΠΡΟΪΟΝΣΩΝ ΜΕ Η/Τ

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

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

Σ ΤΑΤ Ι Σ Τ Ι Κ Η. Statisticum collegium V

Ακολουκιακά Λογικά Κυκλώματα

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

Πανεπιςτιμιο Κφπρου ΟΙΚ 223: Μακθματικά για οικονομολόγουσ ΙΙ Διδάςκων:

Ανάλυςη κλειςτϊν δικτφων

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

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

Transcript:

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

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

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

Ενότθτα 8 ΤΝΑΡΣΘΕΙ: ΠΡΟΚΑΘΟΡΙΜΕΝΕ ΤΝΑΡΣΘΕΙ 5-4

Προκακοριςμζνεσ Συναρτιςεισ Δυο ειδϊν ςυναρτιςεισ: Αυτζσ που επιςτρζφουν κάποια τιμι Αυτζσ που δεν επιςτρζφουν κάποια τιμι (void) Οι βιβλιοκικεσ περιζχουν ςυναρτιςεισ για να τισ χρθςιμοποιιςουμε Πρζπει να ανοίξουμε τθν κατάλλθλθ βιβλιοκικθ με #include, π.χ.: <cmath>, <cstdlib> ( απλζσ "C" βιβλιοκικεσ) <iostream> (για cout, cin) 5-5

Προκακοριςμζνεσ Συναρτιςεισ Μακθματικζσ ςυναρτιςεισ: Βρίςκονται ςτθ βιβλιοκικθ <cmath> Οι περιςςότερεσ επιςτρζφουν μια τιμι Συςτατικά: sqrt: theroot: theroot = sqrt(9.0); όνομα ςυνάρτθςθσ μεταβλθτι που ανακζτουμε τθν απάντθςθ (απάντθςθ = επιςτρεφόμενθ τιμι) 9.0: όριςμα τθσ ςυνάρτθςθσ sqrt(9.0): κλιςθ τθσ ςυνάρτθςθσ Είςοδοσ: 9.0 Επεξεργαςία: υπολογιςμόσ τετραγωνικισ ρίηασ Ζξοδοσ: 3.0 που ανατίκεται ςτθ μεταβλθτι theroot 5-6

Κλιςθ Συνάρτθςθσ φνταξθ υναρτιςεων που επιςτρζφουν μια τιμι όλνκα_ζπλάξηεζεο( Λίζηα_Οξηζκάηωλ ) όπου Λίζηα_Οξηζκάηωλ: όξηζκα1, όξηζκα2,..., όξηζκαν (Ν 0) Παράδειγμα side = sqrt(area); cout << "2.5 εηο ηελ 3.0 = " << pow(2.5, 3.0) ; Η κλιςθ μπορεί να είναι μζροσ μιασ ζκφραςθσ: bonus = sqrt(sales)/10; 5-7

#include <iostream> #include <cmath> Παράδειγμα με ςυν/ςθ int main( ) const double COST_PER_SQ_MT = 10.50; double budget, area, lengthside; cout << "Δώζε ην δηαζέζηκν πνζό "; cin >> budget; area = budget/cost_per_sq_mt; lengthside = sqrt(area); Παράδειγμα Δώζε ην δηαζέζηκν πνζό 25 Γηα ηελ ηηκή ηωλ 25.00 κπνξώ λα θηηάμω ζθπιόζπηην κε 1.54 κέηξα ζε θάζε πιεπξά. cout.setf(ios::fixed); cout.setf(ios::showpoint); cout.precision(2); cout << "Γηα ηελ ηηκή ηωλ " << budget << endl << " κπνξώ λα θηηάμω ζθπιόζπηην κε << lengthside << " κέηξα ζε θάζε πιεπξά.\n"; return 0; 5-8

Περιςςότερεσ Προκακοριςμζνεσ Συναρτιςεισ #include <cstdlib> Περιζχει ςυναρτιςεισ όπωσ: abs() // απόλυτθ τιμι ενόσ int labs() // απόλυτθ τιμι ενόσ long int rand() // τυχαίοσ ακζραιοσ #include <cmath> Περιζχει ςυναρτιςεισ όπωσ: pow(, ) floor() sqrt() // δφναμθ α β // ςτρογγυλοποίθςθ προσ τα κάτω // τετραγωνικι ρίηα δζχεται δφο ορίςματα 5-9

Πίνακασ Μακθματικϊν Συναρτιςεων Υπάρχουν ΠΟΛΛΕΣ άλλεσ ςυναρτιςεισ (τριγωνομετρικζσ, αλφαρικμθτικζσ,...) ΠΑΡΑΡΣΘΜΑ 4 5-10

Προκακοριςμζνεσ ςυναρτιςεισ void Δεν επιςτρζφουν τιμι Εκτελοφν οριςμζνεσ ενζργειεσ αλλά δεν ςτζλνουν κάποια απάντθςθ Όταν τισ καλοφμε αποτελοφν μια εντολι: exit(1); // τερματίηει το πρόγραμμα Διλωςθ: void exit(int n) ζχει ζνα όριςμα τφπου int Κατά ςφμβαςθ: με όριςμα 1 υπάρχει ςφάλμα κατά τθν εκτζλεςθ με όριςμα 0 όλεσ οι υπόλοιπεσ περιπτϊςεισ ΓΕΝΙΚΑ: προςοχι ςτισ μετατροπζσ τφπου ςτα ορίςματα 5-11

Γεννιτριεσ τυχαίων αρικμϊν Επιςτρζφουν "τυχαία επιλεγμζνουσ" αρικμοφσ rand() δεν δζχεται ορίςματα Επιςτρζφει ακζραιο μεταξφ 0 & RAND_MAX RAND_MAX: ςτακερά βιβλιοκικθσ <cstdlib> εξαρτάται από το ςφςτθμα, ~32767 Κλιμάκωςθ Επιτρζπει επιλογι τυχαίων από μικρότερο διάςτθμα rand() % 6 Επιςτρζφει τυχαία τιμι μεταξφ 0 & 5 Μετατόπιςθ rand() % 6 + 1 Μετατοπίηει το φάςμα μεταξφ 1 & 6 (π.χ., ρίψθ ηαριοφ) 5-12

Γεννιτρια Συνάρτθςθ (seed) Ψευδοτυχαίοι αρικμοί Πολλζσ κλιςεισ τθσ rand() παράγουν τθν ίδια ακολουκία αρικμϊν Χριςθ τθσ γεννιτριασ ςυνάρτθςθσ (seed) για διαφορετικζσ τιμζσ: srand(seed_value); void ςυνάρτθςθ Δζχεται ζνα όριςμα, ακζραιο αρικμό "seed" Οποιαδιποτε seed τιμι, ακόμα και τον χρόνο ςυςτιματοσ: srand( time(0) ); time() επιςτρζφει τον χρόνο ςυςτιματοσ ςαν αρικμθτικι τιμι Βιβλιοκικθ <time> περιζχει ςυναρτιςεισ time() 5-13

Παραδείγματα Τυχαίοσ double ςτο *0.0... 1.0] (RAND_MAX rand())/static_cast<double>(rand_max) Μετατροπι τφπων για να πάρουμε double αρικμό Τυχαίοσ ακζραιοσ μεταξφ 1 & 6: rand() % 6 + 1 "%" υπόλοιπο διαίρεςθσ Τυχαίοσ ακζραιοσ μεταξφ 10 & 20: rand() % 10 + 10 5-14

Παραδείγματα 10 όμοιεσ ακολουκίεσ τυχαίων ακεραίων cout << "1st:\n"; srand(99); for(i=0; i< 10; i++) cout << (rand() % 11) << endl; cout << "2nd:\n"; srand(99); for(i=0; i< 10; i++) cout << (rand() % 11) << endl; Παράδειγμα 1st: 9 3 2 10 0 1 4 9 9 7 2nd: 9 3 2 10 0 1 4 9 9 7 5-15

char ans; cin >> month >> day; srand(month*day); cout << "Weather for today:\n"; do prediction = rand() % 3; switch (prediction) case 0: cout << "sunny! \n"; break; case 1: cout << "cloudy!\n"; break; case 2: cout << "stormy!\n"; break; default: cout << "Program is not working.\n"; cout << "Next day?(y/n): "; cin >> ans; while (ans == 'y' ans == 'Y'); Παράδειγμα Give month day: 2 14 sunny! Next day?(y/n): y sunny! Next day?(y/n): y stormy! Next day?(y/n): y cloudy! Next day?(y/n): n 5-16

Ενότθτα 9 ΤΝΑΡΣΘΕΙ: ΟΡΙΗΟΜΕΝΕ ΑΠΟ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΣΘ 5-17

Συναρτιςεισ οριηόμενεσ από εςάσ Γράφετε τισ δικζσ ςασ ςυναρτιςεισ Χωρίηετε το πρόγραμμα ςε κομμάτια Δομθμζνοσ Προγραμματιςμόσ Επαναχρθςιμοποίθςθ ςυναρτιςεων Πιο εφκολο ςτθν κατανόθςθ Ο οριςμόσ των ςυναρτιςεων μπορεί να γίνει: είτε ςτο ίδιο αρχείο είτε ςε διαφορετικό αρχείο για να τισ χρθςιμοποιιςουν και άλλοι 5-18

Συςτατικά για τον οριςμό ςυναρτιςεων 3 βαςικά ςυςτατικά ❶ Διλωςθ υνάρτθςθσ (ι πρωτότυπο ςυν/ςθσ) Πλθροφορία για τον μεταφραςτι ❷ Οριςμόσ υνάρτθςθσ Ο κϊδικασ τθσ ςυνάρτθςθσ για το τί ακριβϊσ κάνει ❸ Κάλεςμα υνάρτθςθσ Μεταφζρει τον ζλεγχο ςτθν ςυνάρτθςθ 5-19

Διλωςθ (πρωτότυπο) ςυνάρτθςθσ Διλωςθ για τον μεταφραςτι Καταλαβαίνει ότι πρόκειται για ςυνάρτθςθ Τοποκετείται πριν το πρϊτο κάλεςμα τθσ ςυνάρτθςθσ Συνικωσ (ςχεδόν πάντα) πριν τον οριςμό τθσ int main() φνταξθ Διλωςθσ υνάρτθςθσ επηζηξεθόκελνο_ηύπνο όλνκα_ζπλάξηεζεο( Λίζηα_Οξηζκάηωλ ); όπου Λίζηα_Οξηζκάηωλ: όξηζκα1, όξηζκα2,..., όξηζκαν (Ν 0) Παράδειγμα double totalweight( int number, double weight ); // Επηζηξέθεη ην ζπλνιηθό βάξνο ηεκαρίωλ // πνπ ην θαζέλα δπγίδεη weight void showresults( double fdegrees, double cdegrees ); // Εθηππώλεη κήλπκα πνπ ιέεη όηη νη fdegrees // Φαξελάηη ηζνδπλακνύλ κε cdegrees Κέιζηνπο 5-20

Κεφαλίδα ςυν/ςθσ Οριςμόσ Συνάρτθςθσ Κϊδικασ τθσ ςυνάρτθςθσ για το τί κα εκτελεί όπωσ ακριβϊσ κάναμε μζςα ςτθ main() Παράδειγμα υπολογιςμόσ ςυνολικοφ κόςτουσ (#αντικειμζνων*ποςό) + 5% φόροσ Σϊμα ςυν/ςθσ double totalcost( int numberparameter, double priceparameter ) const double TAXRATE = 0.05; double subtotal; subtotal = priceparameter * numberparameter; return (subtotal + subtotal * TAXRATE); Εντολι return: επιςτρζφει τθν ζκφραςθ και τερματίηει τθν εκτζλεςθ τθσ ςυν/ςθσ 5-21

Τοποκζτθςθ Οριςμοφ Συνάρτθςθσ Μετά τθν ςυνάρτθςθ main() ΟΧΙ "μζςα" ςτθ main()! Οι ςυναρτιςεισ είναι "ιςοδφναμεσ" Καμία ςυν/ςθ δεν αποτελεί κομμάτι κάποιασ άλλθσ ςυν/ςθσ Η εντολι return Επιςτρζφει δεδομζνα ςε αυτόν που κάλεςε τθν ςυν/ςθ 5-22

Κλιςθ Συνάρτθςθσ Όπωσ και ςτισ προκακοριςμζνεσ ςυναρτιςεισ: bill = totalcost( number, price ); Η ςυν/ςθ totalcost() επιςτρζφει double Ανατίκεται ςτθ μεταβλθτι bill Ορίςματα είναι: number, price Μποροφν να είναι εκφράςεισ, μεταβλθτζσ, ςτακερζσ ι και ςυνδυαςμόσ αυτϊν Στο κάλεςμα ςυν/ςθσ, ζνα όριςμα ονομάηεται και "τυπικι παράμετροσ" Μθν ςυγχζεται τα ορίςματα των ςυναρτιςεων: Ορίςματα ςε λάκοσ ςειρά οδθγοφν ςε λάκοσ αποτζλεςμα 5-23

#include <iostream> using namespace std; double totalcost(int numberparameter, double priceparameter); //ππνινγηζκόο ζπλνιηθνύ θόζηνπο (#αληηθεηκέλωλ*πνζό) + 5% θόξνο int main( ) double price, bill; int number; Διλωςθ ςυν/ςθσ (μθν ξεχνάτε το ; ςτο τζλοσ) cout << "Enter the number of items: "; cin >> number; cout << "Enter the price"; cin >> price; bill = totalcost(number, price); cout << "Final bill: " << bill << endl; return 0; double totalcost(int numberparameter, double priceparameter) const double TAXRATE = 0.05; double subtotal; subtotal = priceparameter * numberparameter; return (subtotal + subtotal*taxrate); Κλιςθ ςυν/ςθσ Κεφαλίδα ςυν/ςθσ Σϊμα ςυν/ςθσ Οριςμόσ ςυν/ςθσ 5-24

Κλιςθ ςυναρτιςεων από ςυναρτιςεισ Ήδθ το κάνουμε αυτό: θ main() είναι ςυνάρτθςθ Η μοναδικι απαίτθςθ: Η διλωςθ τθσ ςυνάρτθςθσ πρζπει να εμφανίηεται πρϊτα Ο οριςμόσ τθσ ςυνάρτθςθσ πρζπει να εμφανίηεται Μετά τον οριςμό τθσ main() Συχνά ςυναρτιςεισ καλοφν άλλεσ ςυναρτιςεισ Μια ςυνάρτθςθ μπορεί επίςθσ να καλεί τον εαυτό τθσ "Αναδρομι" 5-25

Παράδειγμα ςτρογγυλοποίθςθσ Θζλουμε να ςτρογγυλοποιιςουμε ζναν αρικμό ςτο πλθςιζςτερο ακζραιο τμιμα 2.4 2, 2.9 3 Οι ςυν/ςεισ floor() και ceil() επιςτρζφουν τον αμζςωσ προθγοφμενο ι επόμενο ακζραιο αρικμό ceil (2.4) 3 floor(2.9) 2 Αν προςκζςουμε 0.5 ςτον αρικμό και ηθτιςουμε το floor(): floor(2.4+0.5) 2 floor(2.9+0.5) 3 int round(double number) return static_cast<int>(floor(number + 0.5)); 5-26

#include <iostream> #include <cmath> int round(double number); int main( ) double doublevalue; char ans; do cout << "Enter a double value: "; cin >> doublevalue; cout << "Rounded is " << round(doublevalue) << endl; cout << "Again? (y/n): "; cin >> ans; while (ans == 'y' ans == 'Y'); return 0; int round(double number) return static_cast<int>(floor(number + 0.5)); 5-27

#include <iostream> char mystery(int a, int b); Τι εκτυπϊνει το πρόγραμμα; int main( ) cout << mystery( 10,9 ) << "ow\n"; return 0; char mystery(int a, int b) if( a > b ) return 'W'; else return 'H'; Γράψτε μια διλωςθ και ζναν οριςμό ςυν/ςθσ που παίρνει τρια ορίςματα, όλα int, και επιςτρζφει το άκροιςμά τουσ. Γράψτε μια διλωςθ και ζναν οριςμό ςυν/ςθσ που παίρνει ζνα όριςμα, τφπου double. Η ςυν/ςθ επιςτρζφει τον χαρακτιρα 'Θ' αν το όριςμα είναι κετικό και 'Α' αν το όριςμα είναι αρνθτικό. 5-28

Συναρτιςεισ που επιςτρζφουν μια λογικι τιμι Αντί να ζχουμε if ( (( rate >= 10 ) && ( rate < 20 )) ( rate == 0) )... Θα μποροφςαμε if ( appropriate(rate) )... Αρκεί να ορίςουμε και να δθλϊςουμε τθν ςυν/ςθ: bool appropriate(int rate) return ( (( rate >= 10 ) && ( rate < 20 )) ( rate == 0) ); 5-29

Οριςμόσ ςυναρτιςεων τφπου void Συν/ςεισ τφπου void δεν επιςτρζφουν τιμι 2 βαςικζσ διαφορζσ: λζξθ void & δεν απαιτεί τθν εντολι return void showresults ( double fdegrees, double cdegrees ) cout.setf(ios::fixed); cout.setf(ios::showpoint); cout.precision(1); cout << fdegrees << " βαζκνί θαξελάηη είλαη ηζνδύλακνη κε " << cdegrees << " βαζκνύο θέιζηνπο \n"; showresults ( 2.5, 0.3 ) ; 5-30

#include <iostream> void icecreamdivision(int number, double totalweight); int main( ) int number; double totalweight; cout << "Enter the customers: "; cin >> number; cout << "Enter weight of ice cream : "; cin >> totalweight; icecreamdivision(number, totalweight); return 0; void icecreamdivision(int number, double totalweight) double portion; if (number == 0) cout << "Cannot divide among zero customers.\n"; return; portion = totalweight/number; cout << "Each one receives " << portion; Μπορείτε να ζχετε εντολι return μζςα ςε ςυν/ςθ void. 5-31

int main( ) friendly( ); shy( 6 ); cout << " Ξαλά: \n"; shy( 2 ); friendly( ); cout << "Τέινο \n"; return 0; Παραδείγματα void friendly( ) cout << "Γεηα ζαο \n"; void shy( int a ) if (a < 5 ) return ; cout << "Αληίν \n"; 5-32

Ενότθτα 10 ΤΝΑΡΣΘΕΙ: ΚΑΝΟΝΕ ΕΜΒΕΛΕΙΑ 5-33

Τοπικζσ μεταβλθτζσ Τοπικζσ Μεταβλθτζσ: δθλϊνονται μζςα ςε μια ςυνάρτθςθ Εμβζλεια: μζςα ςε αυτι τθν ςυνάρτθςθ double totalcost( int numberparameter, double priceparameter ) const double TAXRATE = 0.05; τοπικι ςτακερά double subtotal; τοπικι μεταβλθτι subtotal = priceparameter * numberparameter; return (subtotal + subtotal * TAXRATE); Αν μια μεταβλθτι είναι τοπικι τότε μπορείτε να ζχετε μια άλλθ μεταβλθτι με το ίδιο όνομα ςε μια άλλθ ςυνάρτθςθ δυο διαφορετικζσ μεταβλθτζσ με το ίδιο όνομα 5-34

#include <iostream> double estimate(int minpeas, int maxpeas, int podcount); int main( ) int maxcount, mincount, podcount; double averagepea, yield; cout << "Enter minimum and maximum and number of pods: "; cin >> mincount >> maxcount >> podcount; cout << "Enter the average weight: "; cin >> averagepea; yield = estimate(mincount, maxcount, podcount) * averagepea; cout << "Average weight = " << averagepea << endl << "Estimated average = " << yield << endl; return 0; double estimate(int minpeas, int maxpeas, int podcount) double averagepea; // Επηζηξέθεη κηα εθηίκεζε // γηα ηε κέζε ζνδεηά κπηδειηώλ // ειάρηζηνο-κέγηζηνο αξηζκόο // κπηδειηώλ ζε έλαλ θαξπό averagepea = (maxpeas + minpeas)/2.0; return (podcount * averagepea); 5-35

Κακολικζσ μεταβλθτζσ Οι τοπικζσ μεταβλθτζσ ζχουν εμβζλεια μόνο μζςα ςτθ ςυνάρτθςθ που ορίηονται Μεταβλθτζσ που δεν ορίηονται μζςα ςε μια ςυνάρτθςθ ονομάηονται κακολικζσ Δθλϊνονται ςτθν αρχι του προγράμματοσ: ζξω από το ςϊμα όλων των ςυναρτιςεων μποροφν να χρθςιμοποιθκοφν ςε οποιαδιποτε ςυν/ςθ Συνικθσ τακτικι: Δθλϊνονται μετά τισ οδθγίεσ include <... > και τθν οδθγία using... 5-36

#include <iostream> #include <cmath> const double PI = 3.14159; double area(double radius); // εκβαδόλ θύθινπ double volume(double radius); // όγθνο ζθαίξαο int main( ) double radius, area, volume; cout << "Enter a radius \n"; cin >> radiusofboth; area = area(radius); volume = volume(radius); cout << "Area = " << area<< "\nvolume = " << volume << "\n"; return 0; double area(double radius) return (PI * pow(radius, 2)); // θαζνιηθή κεηαβιεηή double volume(double radius) return ((4.0/3.0) * PI * pow(radius, 3)); 5-37

Μπλοκ Σφνκετθ εντολι (μπλοκ): τμιμα εντολϊν μζςα ςε, - Μεταβλθτι που δθλϊνεται μζςα ςε μπλοκ ζχει εμβζλεια μόνο ςε αυτό το μπλοκ τοπικι μεταβλθτι του μπλοκ Ο οριςμόσ τθσ μεταβλθτισ ιςχφει από τθν διλωςθ τθσ μεταβλθτισ μζχρι τθν - Οι ςυναρτιςεισ είναι μπλοκ for(int i = 0; i < 10; i++) cout << i ; cout << ", "; while(1) cout << "give a number:" ; int num; cin >> num; if( num == 0 ) break; else cout "non-zero!! \n"; 5-38

Κανόνεσ εμβζλειασ Εμφωλιαςμζνα μπλοκ (και ςυναρτιςεισ) Οι κανόνεσ ιςχφουν και για κακολικζσ και τοπικζσ μεταβλθτζσ Κανόνασ εμβζλειασ Αν ζνα όνομα μεταβλθτισ χρθςιμοποιείται ςε δυο μπλοκ (το ζνα μζςα ςτο άλλο) τότε είναι δυο διαφορετικζσ μεταβλθτζσ με το ίδιο όνομα Η εςωτερικι μεταβλθτι δεν μπορεί να προςπελαςτεί από το ζξω μπλοκ Η εξωτερικι μεταβλθτι δεν μπορεί να προςπελαςτεί από το μζςα μπλοκ Οποιαδιποτε αλλαγι δεν επθρεάηει τθν άλλθ μεταβλθτι Παράδειγμα int x = 0; cout << x; int x = 1; cout << x; 5-39

Παράδειγμα εμβζλειασ int x = 1; cout << x << endl; cout << x; int x = 2; cout << x << endl; cout << x; int x = 3; cout << x << endl; cout << x << endl; cout << x << endl; 5-40

Παράδειγμα εμβζλειασ #include <iostream> int x = 1; void funa( ); void funb( ); int main( ) int x = 5; funa(); funb(); funa(); funb(); cout << x << " "; void funa( ) int x = 25; x++; cout << x << " "; void funb( ) x *= 10; cout << x << " "; 5-41

Ενότθτα 11 ΤΝΑΡΣΘΕΙ: ΑΝΑΔΡΟΜΙΚΕ ΤΝΑΡΣΘΕΙ 5-42

Αναδρομικζσ ςυναρτιςεισ Αναδρομι Συναρτιςεισ που καλοφν το εαυτό τουσ Πρζπει να λφνουν τθν βαςικι περίπτωςθ χωρίσ αναδρομι Διαιροφν το πρόβλθμα ςε Βαςικι περίπτωςθ που λφνουν «εφκολα» Σε άλλεσ περιπτϊςεισ που μοιάηουν με το αρχικό πρόβλθμα και τότε Καλοφν ζνα αντίγραφο του εαυτοφ τουσ για τθν λφςθ τουσ (αναδρομι) Κάποια ςτιγμι φτάνει ςτθν βαςικι περίπτωςθ και τθν επιλφει Περνάει επιμζρουσ αποτελζςματα προσ τα επάνω και τελικά φτάνει ςτθν λφςθ του όλου προβλιματοσ 5-43

Παράδειγμα αναδρομισ: Παραγοντικό (n!) Παραγονικό 5! = 5 * 4 * 3 * 2 * 1 Παρατθροφμε 5! = 5 * 4! 4! = 4 * 3!... Γενικά: n! = n * (n-1)! με 1! = 0! = 1 Μποροφν να υπολογιςτοφν αναδρομικά Βάςθ αναδρομισ (1! = 0! = 1). Μετά γυρίηουμε πίςω 2! = 2 * 1! = 2 * 1 = 2; 3! = 3 * 2! = 3 * 2 = 6; 4! = 4 * 3! = 4 * 6 = 24 5-44

#include <iostream> int factorial(int n); Παραγοντικό int main( ) for(int i = 1; i <= 20; i++) cout << "Factorial ( " << i << " ) = " << factorial(i); return 0; int factorial(int n) if( n <= 1 ) return 1; else return factorial(n-1) * n; 5-45

Η ςειρά Fibonacci Η ςειρά Fibonacci 0, 1, 1, 2, 3, 5, 8... Κάκε αρικμόσ είναι άκροιςμα των δφο προθγουμζνων fib( n ) = fib( n - 1 ) + fib( n - 2 ) Αναδρομικόσ οριςμόσ Βάςθ: fib(0) = 0 και fib(1) = 1 5-46

Η ςειρά Fibonacci Η ςειρά Fibonacci 0, 1, 1, 2, 3, 5, 8... Κάκε αρικμόσ είναι άκροιςμα των δφο προθγουμζνων fib( n ) = fib( n - 1 ) + fib( n - 2 ) f( 3 ) return f( 2 ) + f( 1 ) return f( 1 ) + f( 0 ) return 1 return 1 return 0 5-47

#include <iostream> int fibonacci(int n); int main( ) cout << "Enter a number: "; cin >> num; Fibonacci cout << "Fibonacci ( " << num << " ) = " << fibonacci(num); return 0; int fibonacci(int n) if( n <= 1 ) return n; else return fibonacci( n - 1 ) + fibonacci( n - 2 ); 5-48

Κάκετοι αρικμοί Στόχοσ: εμφάνιςε τα ψθφία του αρικμοφ κάκετα, ζνα ςε κάκε γραμμι Παράδειγμα: writevertical(1234); Επικυμθτό Αποτζλεςμα: 1 2 3 4 5-49

Αναδρομικόσ οριςμόσ Διάςπαςε το πρόβλθμα ςε 2 περιπτϊςεισ Βάςθ: αν n < 10 Γράψε το αρικμό n ςτθν οκόνθ Αναδρομικι περίπτωςθ: αν n >= 10: 1- Γράψε όλα τα ψθφία κάκετα εκτόσ από το τελευταίο 2- Γράψε το τελευταίο ψθφίο Παράδειγμα: παράμετροσ 1234: 1 θ ενζργεια: εμφανίηει τα 1, 2, 3 κάκετα 2 θ ενζργεια: εμφανίηει το 4 5-50

Οριςμόσ τθσ writevertical( ) void writevertical(int n) if (n < 10) //Base case cout << n << endl; else //Recursive step writevertical(n/10); cout << (n%10) << endl; Αναδρομικι περίπτωςθ: αν n >= 10: 1- Γράψε όλα τα ψθφία κάκετα εκτόσ από το τελευταίο 2- Γράψε το τελευταίο ψθφίο 5-51

Ανάλυςθ τθσ writevertical( ) Παράδειγμα εκτζλεςθσ: writevertical(123); writevertical(12); (123/10) writevertical(1); (12/10) cout << 1 << endl; cout << 2 << endl; cout << 3 << endl; Τα δείχνουν ποιον υπολογιςμό εκτελεί θ ςυν/ςθ Προςζξτε τισ δυο πρϊτεσ κλιςεισ ξανά (αναδρομι) Η τελευταία κλιςθ (1) εκτυπϊνει και "τερματίηει" 5-52

Μθν ξεχνάτε τθν βάςθ τθσ αναδρομισ Θεωριςτε ζναν άλλο τρόπο οριςμοφ τθσ ςυν/ςθσ: void newwritevertical(int n) newwritevertical(n/10); cout << (n%10) << endl; Φαίνεται "λογικι" ςυνάρτθςθ Του λείπει όμωσ θ βαςικι περίπτωςθ!! Η αναδρομι δεν ςταματάει ποτζ! Ατζρμονθ αναδρομι 5-53

Θα μποροφςατε και χωρίσ αναδρομι void writevertical(int n) int nstens = 1; int leftendpiece = n; while (leftendpiece > 9) leftendpiece = leftendpiece/10; nstens = nstens*10; for (int i=nstens; i > 0; i = i/10) cout << (n/i) << endl; n = n%i; void writevertical(int n) if (n < 10) cout << n << endl; else writevertical(n/10); cout << (n%10) << endl; 5-54

Ενότθτα 12 ΤΝΑΡΣΘΕΙ: ΠΑΡΑΜΕΣΡΟΙ 5-55

Παράμετροι κλιςθσ με τιμι Στθν κλιςθ τθσ ςυνάρτθςθσ τοποκετοφνται αντίγραφα των τιμϊν Ουςιαςτικά είναι ςαν τοπικζσ μεταβλθτζσ Αν αλλάξουν τιμι, τότε "τοπικζσ" μεταβολζσ Η ςυνάρτθςθ δεν ζχει πρόςβαςθ ςτθ "πραγματικι παράμετρο" Αυτι είναι θ εξ'οριςμοφ κλιςθ ςε όλα τα παραδείγματα ωσ τϊρα 5-56

#include <iostream> const double RATE = 150.00; //Επξώ αλα 15 ιεπηά. double fee(int hoursworked, int minutesworked); //Χξεώζεηο γηα hoursworked θαη minutesworked int main( ) Δεν αλλάηει θ τιμι int hours, minutes; τθσ μεταβλθτισ double bill; minutes από τθν cout << "Enter the hours and minutes:\n"; κλιςθ τθσ fee( ) cin >> hours >> minutes; bill = fee(hours, minutes); cout << "For " << hours << " and " << minutes << ", your bill is " << bill << endl; return 0; double fee(int hoursworked, int minutesworked) int quarterhours; minutesworked = hoursworked*60 + minutesworked; quarterhours = minutesworked/15; return (quarterhours*rate); 5-57

Τυπικό ςφάλμα Κλαςικό λάκοσ: Διλωςθ παραμζτρου "ξανά" μζςα ςε ςυν/ςθ: double fee(int hoursworked, int minutesworked) int quarterhours; // local variable int minutesworked // NO! Σφάλμα ςτον μεταφραςτι: "Redefinition error " Παράμετροι με τιμι είναι ςαν "τοπικζσ μεταβλθτζσ" Αλλά θ ςυν/ςθ τισ ζχει δθλωμζνεσ "αυτόματα" 5-58

Παράμετροι κλιςθσ με αναφορά Χρθςιμοποιοφνται για να ζχουν πρόςβαςθ ςτισ πραγματικζσ παραμζτρουσ Τα δεδομζνα που καλεί κάποιοσ μπορεί να αλλάξουν κατά το κάλεςμα μιασ ςυν/ςθσ! Συνικωσ χρθςιμοποιοφνται για είςοδο/διάβαςμα Αυτόσ που καλεί κζλει τισ τιμζσ που κα διαβάςει θ ςυν/ςθ Δθλϊνονται με & μετά τον τφπο ςτθ λίςτα παραμζτρων void getinput( double& receiver ) cout << " Δώζε ηηκή: \n"; cin >> receiver; int main() double number;... getinput( number );... 5-59

int main( ) int firstnum, secondnum; getnumbers(firstnum, secondnum); swapvalues(firstnum, secondnum); showresults(firstnum, secondnum); void getnumbers(int& input1, int& input2) cout << "Enter two integers: "; cin >> input1 >> input2; void swapvalues(int& variable1, int& variable2) int temp; temp = variable1; variable1 = variable2; variable2 = temp; void showresults(int output1, int output2) cout << "Αληίζηξνθα:"<< output1 << " " << output2 << endl; 5-60

Μθχανιςμόσ κλιςθσ με αναφορά Τι πραγματικά περνάμε ςαν αναφορά; Μια αναφορά ςτθν πραγματικι παράμετρο όταν κάλεςε τθν ςυνάρτθςθ Αναφζρεται ςτθν κζςθ μνιμθσ τθσ πραγματικισ παραμζτρου Καλείται ςυχνά ωσ "διεφκυνςθ", που είναι ζνα μοναδικό νοφμερο που δείχνει ςε διακριτι κζςθ μνιμθσ void getnumbers( int& input1, int& input2 ); getnumbers( first, second) first second 1010 input1 1012 input2 5-61

Στακερζσ Παράμετροι αναφοράσ Οι παράμετροι με αναφορά εγκυμονοφν κινδφνουσ Τα δεδομζνα μποροφν να αλλάξουν Μερικζσ φορζσ είναι επικυμθτό, άλλεσ όχι Για να "προςτατεφςουμε" τα δεδομζνα, περνϊντασ παράλλθλα παραμζτρουσ με αναφορά: Χριςθ τθσ δεςμευμζνθσ λζξθσ const void sendconstref( const int &par1, const int &par2 ); Οι παράμετροι γίνονται "μόνο για διάβαςμα" (read-only) από τθν ςυνάρτθςθ Δεν επιτρζπονται αλλαγζσ ςτο ςϊμα τθσ ςυν/ςθσ 5-62

Μικτζσ λίςτεσ παραμζτρων Συνδυαςμόσ παραμζτρων ςτο κάλεςμα τθσ ςυν/ςθσ Η λίςτα παραμζτρων μπορεί να περιζχει παραμζτρουσ με τιμι και παραμζτρουσ με αναφορά Η ςειρά των οριςμάτων ςτθ λίςτα είναι ΣΗΜΑΝΤΙΚΗ: void mixedcall(int & par1, int par2, double & par3); Όταν καλοφμε τθ ςυν/ςθ: mixedcall(arg1, arg2, arg3); arg1 integer, παράμετροσ με αναφορά arg2 integer, παράμετροσ με τιμι arg3 double, παράμετροσ με αναφορά 5-63

#include <iostream> void dostuff(int par1value, int& par2ref); int main( ) int n1, n2; n1 = 1; n2 = 2; dostuff(n1, n2); cout << "n1 κεηά = " << n1 << endl; cout << "n2 κεηά = " << n2 << endl; return 0; void dostuff(int par1value, int& par2ref) par1value = 111; cout << "par1value ζηε ζπλ/ζε= "<< par1value << endl; par2ref = 222; cout << "par2ref ζηε ζπλ/ζε= " << par2ref << endl; 5-64

#include <iostream> Τι εκτυπϊνει; void figuremeout(int& x, int y, int &z); int main( ) int a = 10, b = 20, c = 30; figuremeout(a, b, c); cout << a << " " << b << " " << c << endl; return 0; void figuremeout(int& x, int y, int &z) cout << x << " " << y << " " << z << endl; x = 1; y = 2; z = 3; cout << x << " " << y << " " << z << endl; 5-65

Παράδειγμα με Πίτςα Μασ ενδιαφζρει ποια πίτςα ςυμφζρει ( τιμι / cm 2 ): μικρι πίτςα με ςυγκεκριμζνθ διάμετρο μεγάλθ πίτςα με ςυγκεκριμζνθ διάμετρο 5-66

#include <iostream> void getdata(int& smalldiameter, double& pricesmall, int& largediameter, double& pricelarge); void giveresults(int smalldiameter, double pricesmall, int largediameter, double pricelarge); double unitprice(int diameter, double price); // Επηζηξέθεη ηηκή αλά ηεηξαγωληθό εθαηνζηό // Πξνζπλζήθε: diameter είλαη ε δηάκεηξνο ηεο πίηζαο // θαη ε price είλαη ην θόζηνο ηεο πίηζαο. int main( ) int diametersmall, diameterlarge; double pricesmall, pricelarge; getdata(diametersmall, pricesmall, diameterlarge, pricelarge); giveresults(diametersmall, pricesmall, diameterlarge, pricelarge); return 0; 5-67

void getdata(int& smalldiameter, double& pricesmall, int& largediameter, double& pricelarge) cout << "Enter diameter of a small pizza: "; cin >> smalldiameter; cout << "Enter the price of a small pizza: "; cin >> pricesmall; cout << "Enter diameter of a large pizza: "; cin >> largediameter; cout << "Enter the price of a large pizza: "; cin >> pricelarge; void giveresults(int smalldiameter, double pricesmall, int largediameter, double pricelarge) double unitpricesmall, unitpricelarge; unitpricesmall = unitprice(smalldiameter, pricesmall); unitpricelarge = unitprice(largediameter, pricelarge); cout << "Small pizza:\n" << unitpricesmall << endl << "Large pizza:\n" << unitpricelarge << endl; if (unitpricelarge < unitpricesmall) cout << "The large one is the better buy.\n"; else cout << "The small one is the better buy.\n"; 5-68

double unitprice(int diameter, double price) const double PI = 3.14159; double radius, area; radius = diameter/static_cast<double>(2); area = PI * radius * radius; return (price/area); Παράδειγμα Enter diameter of a small pizza: 10 Enter the price of a small pizza: 7.50 Enter diameter of a large pizza: 13 Enter the price of a large pizza: 14.75 Small pizza: 0.1000 Large pizza: 0.1111 The small one is the better buy. 5-69

Ενότθτα 13 ΤΝΑΡΣΘΕΙ: ΤΠΕΡΦΟΡΣΩΘ 5-70

Υπερφόρτωςθ Συναρτιςεισ με το ίδιο όνομα Διαφορετικι λίςτα παραμζτρων Δυο διαφορετικζσ δθλϊςεισ ςυναρτιςεων Τπογραφι ςυνάρτθςθσ Όνομα ςυνάρτθςθσ & λίςτα παραμζτρων Μοναδικά για κάκε οριςμό ςυνάρτθςθσ Επιτρζπει ίδια ενζργεια ςε διαφορετικά δεδομζνα 5-71

Παράδειγμα Υπερφόρτωςθσ: Μζςοσ Όροσ Υπολογίηει το μζςο όρο 2 αρικμϊν: double average(double n1, double n2) return ((n1 + n2) / 2.0); Υπολογίηει το μζςο όρο 3 αρικμϊν: double average(double n1, double n2, double n3) return ((n1 + n2 + n3) / 3.0); Κδιο όνομα, δυο ςυναρτιςεισ 5-72

Παράδειγμα Υπερφόρτωςθσ: Μζςοσ Όροσ Ποια ςυνάρτθςθ καλείται; Εξαρτάται από το ίδιο το κάλεςμα: avg = average(5.2, 6.7); Καλεί "δφο-παραμζτρων average()" avg = average(6.5, 8.5, 4.2); Καλεί" τριϊν-παραμζτρων average()" Ο μεταφραςτισ επιλφει τζτοια κζματα βαςιηόμενοσ ςτθν υπογραφι ςτο κάλεςμα "Ταιριάηει" το κάλεςμα με τθν αντίςτοιχθ ςυν/ςθ 5-73

Επίλυςθ Υπερφόρτωςθσ 1 ον : Απόλυτο ταίριαςμα Κοιτάηει για ίδια υπογραφι όπου δεν απαιτείται κάποια μετατροπι τφπου 2 ον : Συμβατό ταίριαςμα Κοιτάηει για "ςυμβατι" υπογραφι όπου μια αυτόματθ μετατροπι τφπου είναι δυνατι: 1 οσ προϊκθςθ (π.χ., int double) δεν χάνονται δεδομζνα 2 οσ αποκοπι (π.χ., double int) πικανι απϊλεια δεδομζνων Ομοιότθτεσ ςτα ίδια επίπεδα ςφάλμα ςτο μεταφραςτι void f(int n, double m); void f(double n, int m); f(33, 44); 5-74

Αυτόματθ μετατροπι τφπου και Υπερφόρτωςθ Οι τυπικοί αρικμθτικοί τφποι φτιάχνουν ςυνικωσ τφπουσ "double" Επιτρζπει "οποιοδιποτε" αρικμθτικό τφπο int double float double char double *αργότερα κα το δοφμε! Αποφεφγει υπερφόρτωςθ για διαφορετικοφσ αρικμθτικοφσ τφπουσ 5-75

Αυτόματθ μετατροπι τφπου και Υπερφόρτωςθ double kmlgas(double klm, double liters) return (klm/liters); Παραδείγματα : a = kmlgas(5, 20); Μετατρζπει 5 & 20 ςε doubles, και μετά περνάει τιμζσ a = kmlgas (5.8, 20.2); Δεν χρειάηεται μετατροπι a = kmlgas (5, 2.4); Μετατρζπει το 5 ςε 5.0, και μετά περνάει τιμζσ ςτθ ςυν/ςθ 5-76

Προεπιλεγμζνα Ορίςματα Κατά τθν κλιςθ επιτρζπει τθν αποφυγι μερικϊν οριςμάτων Στθ διλωςθ/οριςμό ςυνάρτθςθσ: void showvolume( int length, int width = 1, int height = 1 ); Τα τελευταία 2 ορίςματα είναι προεπιλεγμζνα (defaulted) Πικανά καλζςματα: showvolume(2, 4, 6); //τιμζσ ςε όλα τα ορίςματα showvolume(3, 5); //height προεπιλεγμζνο ςε 1 showvolume(7); //width & height προεπιλεγμζνα ςε 1 5-77

#include <iostream> using namespace std; Προκακοριςμζνα ορίςματα void showvolume(int length, int width = 1, int height = 1); //Returns the volume of a box. int main( ) showvolume(4, 6, 2); showvolume(4, 6); showvolume(4); Ζνα προκακοριςμζνο όριςμα δεν πρζπει να δίνεται ςτο κυρίωσ ςϊμα τθσ ςυν/ςθσ return 0; void showvolume(int length, int width, int height) cout << "Volume of a box with \n" << "Length = " << length << ", Width = " << width << endl << "and Height = " << height << " is " << length*width*height << endl; 5-78

Συναρτιςεισ (ςφνοψθ) Όταν πρόκειται να γράψουμε μια ςυν/ςθ: 1. Κακορίηουμε τον επιςτρεφόμενο τφπο Πχ. int 2. Δίνουμε όνομα ςτθν ςυν/ςθ Πχ. square 3. Δθλϊνουμε τα ορίςματα (τι κα πρζπει να δζχεται θ ςυν/ςθ ωσ είςοδο) Πχ. (int y) 4. Γράφουμε τθν διλωςθ τθσ ςυν/ςθσ Πχ. int square(int y); 5. Υλοποιοφμε τθν μζκοδο ζχοντασ υπόψιν τθν εντολι return Πχ. int square(int y) int result; result = y*y; return result; 5-79

Βιβλιογραφία Καλι Μελζτθ [1] W. Savitch, Πλιρθσ C++, Εκδόςεισ Τηιόλα, 2011 [2+ Η. Deitel and P. Deitel, C++ Προγραμματιςμόσ 6θ Εκδοςθ, Εκδόςεισ Μ. Γκιοφρδασ, 2013 Υλθ βιβλιογραφίασ [1]: 3.1, 3.2, 3.3, 4.1, 4.2, 13.1, 13.2 [2]: Κεφ. 6 5-80