343 Ειςαγωγι ςτον Προγραμματιςμό Τμιμα Μακθματικϊν Πανεπιςτιμιο Ιωαννίνων Ακαδθμαϊκό Ζτοσ 2016-2017 Χάρθσ Παπαδόπουλοσ 207δ, B όροφοσ e-mail: charis@cs.uoi.gr Ωρεσ Γραφείου: Πζμπτθ 11-13
Τμιματα Εργαςτθρίων Εργαςτήριο (μεγάλο): Εργαςτιριο Θ/Υ 1 ο όροφο δίπλα από το Αναγνωςτιριο Τα εργαςτιρια κα ξεκινιςουν Δευτζρα 24 Οκτωβρίου και Σρίτη 25 Οκτωβρίου Εργαςτήρια Δευτζρα (14:00-20:15) Α1 Δευτζρα 14:00-15:15-10992 Α2 Δευτζρα 15:15-16:30 10993-11036 Α3 Δευτζρα 16:30-17:45 11037-11088 Α4 Δευτζρα 17:45-19:00 11089-11146 Α5 Δευτζρα 19:00-20:15 11147-11196 Εργαςτήριο Σρίτη (14:00-15:15) Β1 Σρίτη 14:00-15:15 11197 - Αλλαγζσ ΔΕΝ επιτρζπονται! Διάρκεια Εργαςτηρίου: 1h:15m
Τελικι Βακμολογία Επιτυχήσ παρακολοφθηςη των υποχρεωτικϊν εργαςτθρίων μια (1) το πολφ απουςία ςτα 5 ή 6 εργαςτθριακά μακιματα Ζνα (1) τεςτ (Τ1) με βάροσ 15% του ςυνολικοφ βακμοφ. Ανάπτυξθ Κϊδικα ςτο Εργαςτιριο Ζνα (1) quiz (Q2) με βάροσ 15% του ςυνολικοφ βακμοφ. Ερωτιςεισ Πολλαπλϊν Επιλογϊν Όςοι απουςιάςουν ςε ζνα τεςτ ι quiz: μθδενίηεται το 15% Παλαιότεροι φοιτητζσ: μποροφν να λάβουν μζροσ ςτα τεςτ ι ςτα quiz Σελική βαθμολογία (με επιτυχι παρακολοφκθςθ εργαςτθρίων): TB = max 15% Τ1 + 15% Q2 + 70% ΓρΕξ ΓρΕξ
1 ο Τεςτ Το 1 ο quiz κα διεξαχκεί τθν Δευτζρα 21 Νοεμβρίου Για όλα τα τμιματα!! 14:00-21:00 ςτα ακόλουκα τμιματα: Ώρεσ Α. Μ. 14:00-14:45 ΤΜΘΜΑ Α1 15:00-15:45 ΤΜΘΜΑ Α2 16:00-16:45 ΤΜΘΜΑ Α3 17:00-17:45 ΤΜΘΜΑ Α4 18:00-18:45 ΤΜΘΜΑ Α5 19:00-19:45 ΤΜΘΜΑ Β1 Αν λείψετε: Δεν μετράει ωσ απουςία Μθδενίηεται το 15% 20:00-20:45 ΤΜΘΜΑ δεν ανικουν Α1-Α5,Β1 6-4
Θ: διάλεξη (θεωρία) Ε: Εργαστήριο Θμερολόγιο Μακιματοσ Q: Σεστ quiz Οκτώβριος 2015 Δ Σ Σ Π Π 3 4 5 6 7 Θ 10 11 12 13 14 Θ 17 18 19 20 21 Θ 24 Ε 25 Ε 26 27 28 Εβδομάδα Θζματα Υλη βιβλιογραφίασ Πα, 7 Οκτωβρίου Πα, 14 Οκτωβρίου Πα, 21 Οκτωβρίου Δε, Σρ, 24-25 Οκτ Εισαγωγικά μαθήματος & Δυαδική αναπαράσταση Είσοδος/Έξοδος δεδομένων, τύποι δεδομένων & μεταβλητών Προεπεξεργαστής, αριθμητικοί και λογικοί τελεστές 1 ο Εργαστήριο *1+: 1.1, Παράρτθμα 3 *2+: Κεφ. 1, Β, Δ *1+: 1.2, 1.3, 1.4, 1.5, Παράρτθμα 1 *2+: Κεφ. 2, Γ *1+: 2.1, Παράρτθμα 2 *2+: 4.11, 4.12, Α, ΣΤ Νοέμβριος 2015 Δ Σ Σ Π Π 1 2 3 4 Θ 7 Ε 8 Ε 9 10 11 Θ 14 Ε 15 16 17 18 Θ 21 Σ 22 23 24 25 Θ Πα, 4 Νοεμβρίου Δε, Σρ, 7-8 Νοε Πα, 11 Νοεμβρίου Δε, Σρ, 14-15 Νοε Πα, 18 Νοεμβρίου Ροή ελέγχου: if/else, switch, for, while, do-while και ροή ελέγχου if/else 2 ο Εργαστήριο υναρτήσεις, εμβέλεια μεταβλητών και αναδρομή 3 ο Εργαστήριο Επανάληψη με Παραδείγματα [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 28 Ε 29 Ε 30 Δεκέμβριος 2015 Δ Σ Σ Π Π 1 2 Θ 5 E 6 Ε 7 8 9 Θ 12 Q 13 14 15 16 Θ Ιανουάριος 2016 Δ Σ Σ Π Π 2 3 4 5 6 9 10 11 12 13 Θ Δε, 21 Νοε Πα, 25 Νοεμβρίου Δε, Σρ, 28-29 Νοε Πα, 2 Δεκεμβρίου Δε, Σρ, 5-6 Δεκ Πα, 9 Δεκεμβρίου Δε, 12 Δεκ Πα, 16 Δεκεμβρίου Πα, 13 Ιανουαρίου 1 ο Test (Ανάπτυξη κώδικα) Πίνακες (μονοδιάστατοι και πολυδιάστατοι) 4 ο Εργαστήριο Εφαρμογές σε ταξινομήσεις και αναζήτηση στοιχείων 5 ο Εργαστήριο Αλφαριθμητικά και υμβολοσειρές 2 ο Quiz (Ερωτήσεις πολλαπλών επιλογών) Εγγραφές, δομές και χρήση αρχείων Επανάληψη [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
Θ: διάλεξη (θεωρία) Ε: Εργαστήριο Θμερολόγιο Μακιματοσ Q: Σεστ quiz Οκτώβριος 2015 Δ Σ Σ Π Π 3 4 5 6 7 Θ 10 11 12 13 14 Θ 17 18 19 20 21 Θ 24 Ε 25 Ε 26 27 28 Εβδομάδα Θζματα Υλη βιβλιογραφίασ Πα, 7 Οκτωβρίου Πα, 14 Οκτωβρίου Πα, 21 Οκτωβρίου Δε, Σρ, 24-25 Οκτ Εισαγωγικά μαθήματος & Δυαδική αναπαράσταση Είσοδος/Έξοδος δεδομένων, τύποι δεδομένων & μεταβλητών Προεπεξεργαστής, αριθμητικοί και λογικοί τελεστές 1 ο Εργαστήριο *1+: 1.1, Παράρτθμα 3 *2+: Κεφ. 1, Β, Δ *1+: 1.2, 1.3, 1.4, 1.5, Παράρτθμα 1 *2+: Κεφ. 2, Γ *1+: 2.1, Παράρτθμα 2 *2+: 4.11, 4.12, Α, ΣΤ Νοέμβριος 2015 Δ Σ Σ Π Π 1 2 3 4 Θ 7 Ε 8 Ε 9 10 11 Θ 14 Ε 15 16 17 18 Θ 21 Σ 22 23 24 25 Θ Πα, 4 Νοεμβρίου Δε, Σρ, 7-8 Νοε Πα, 11 Νοεμβρίου Δε, Σρ, 14-15 Νοε Πα, 18 Νοεμβρίου Ροή ελέγχου: if/else, switch, for, while, do-while και ροή ελέγχου if/else 2 ο Εργαστήριο υναρτήσεις, εμβέλεια μεταβλητών και αναδρομή 3 ο Εργαστήριο Επανάληψη με Παραδείγματα [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 28 Ε 29 Ε 30 Δεκέμβριος 2015 Δ Σ Σ Π Π 1 2 Θ 5 E 6 Ε 7 8 9 Θ 12 Q 13 14 15 16 Θ Ιανουάριος 2016 Δ Σ Σ Π Π 2 3 4 5 6 9 10 11 12 13 Θ Δε, 21 Νοε Πα, 25 Νοεμβρίου Δε, Σρ, 28-29 Νοε Πα, 2 Δεκεμβρίου Δε, Σρ, 5-6 Δεκ Πα, 9 Δεκεμβρίου Δε, 12 Δεκ Πα, 16 Δεκεμβρίου Πα, 13 Ιανουαρίου 1 ο Test (Ανάπτυξη κώδικα) Πίνακες (μονοδιάστατοι και πολυδιάστατοι) 4 ο Εργαστήριο Εφαρμογές σε ταξινομήσεις και αναζήτηση στοιχείων 5 ο Εργαστήριο Αλφαριθμητικά και υμβολοσειρές 2 ο Quiz (Ερωτήσεις πολλαπλών επιλογών) Εγγραφές, δομές και χρήση αρχείων Επανάληψη [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
Ενότθτα 12 ΤΝΑΡΣΗΕΙ: ΠΑΡΑΜΕΣΡΟΙ 5-7
Παράμετροι κλιςθσ με τιμι Στθν κλιςθ τθσ ςυνάρτθςθσ τοποκετοφνται αντίγραφα των τιμϊν Ουςιαςτικά είναι ςαν τοπικζσ μεταβλθτζσ Αν αλλάξουν τιμι, τότε "τοπικζσ" μεταβολζσ Θ ςυνάρτθςθ δεν ζχει πρόςβαςθ ςτθ "πραγματικι παράμετρο" Αυτι είναι θ εξ'οριςμοφ κλιςθ ςε όλα τα παραδείγματα ωσ τϊρα 5-8
#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-9
Τυπικό ςφάλμα Κλαςικό λάκοσ: Διλωςθ παραμζτρου "ξανά" μζςα ςε ςυν/ςθ: double fee(int hoursworked, int minutesworked) int quarterhours; // local variable int minutesworked // NO! Σφάλμα ςτον μεταφραςτι: "Redefinition error " Παράμετροι με τιμι είναι ςαν "τοπικζσ μεταβλθτζσ" Αλλά θ ςυν/ςθ τισ ζχει δθλωμζνεσ "αυτόματα" 5-10
Παράμετροι κλιςθσ με αναφορά Χρθςιμοποιοφνται για να ζχουν πρόςβαςθ ςτισ πραγματικζσ παραμζτρουσ Τα δεδομζνα που καλεί κάποιοσ μπορεί να αλλάξουν κατά το κάλεςμα μιασ ςυν/ςθσ! Συνικωσ χρθςιμοποιοφνται για είςοδο/διάβαςμα Αυτόσ που καλεί κζλει τισ τιμζσ που κα διαβάςει θ ςυν/ςθ Δθλϊνονται με & μετά τον τφπο ςτθ λίςτα παραμζτρων void getinput( double& receiver ) cout << " Δώσε τιμή: \n"; cin >> receiver; int main() double number;... getinput( number );... 5-11
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-12
Μθχανιςμόσ κλιςθσ με αναφορά Τι πραγματικά περνάμε ςαν αναφορά; Μια αναφορά ςτθν πραγματικι παράμετρο όταν κάλεςε τθν ςυνάρτθςθ Αναφζρεται ςτθν κζςθ μνιμθσ τθσ πραγματικισ παραμζτρου Καλείται ςυχνά ωσ "διεφκυνςθ", που είναι ζνα μοναδικό νοφμερο που δείχνει ςε διακριτι κζςθ μνιμθσ void getnumbers( int& input1, int& input2 ); getnumbers( first, second) first second 1010 input1 1012 input2 5-13
Στακερζσ Παράμετροι αναφοράσ Οι παράμετροι με αναφορά εγκυμονοφν κινδφνουσ Τα δεδομζνα μποροφν να αλλάξουν Μερικζσ φορζσ είναι επικυμθτό, άλλεσ όχι Για να "προςτατεφςουμε" τα δεδομζνα, περνϊντασ παράλλθλα παραμζτρουσ με αναφορά: Χριςθ τθσ δεςμευμζνθσ λζξθσ const void sendconstref( const int &par1, const int &par2 ); Οι παράμετροι γίνονται "μόνο για διάβαςμα" (read-only) από τθν ςυνάρτθςθ Δεν επιτρζπονται αλλαγζσ ςτο ςϊμα τθσ ςυν/ςθσ 5-14
Μικτζσ λίςτεσ παραμζτρων Συνδυαςμόσ παραμζτρων ςτο κάλεςμα τθσ ςυν/ςθσ Θ λίςτα παραμζτρων μπορεί να περιζχει παραμζτρουσ με τιμι και παραμζτρουσ με αναφορά Θ ςειρά των οριςμάτων ςτθ λίςτα είναι ΣΘΜΑΝΤΙΚΘ: void mixedcall(int & par1, int par2, double & par3); Όταν καλοφμε τθ ςυν/ςθ: mixedcall(arg1, arg2, arg3); arg1 integer, παράμετροσ με αναφορά arg2 integer, παράμετροσ με τιμι arg3 double, παράμετροσ με αναφορά 5-15
#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-16
#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-17
Ενότθτα 13 ΤΝΑΡΣΗΕΙ: ΤΠΕΡΦΟΡΣΩΗ 5-18
Υπερφόρτωςθ Συναρτιςεισ με το ίδιο όνομα Διαφορετικι λίςτα παραμζτρων Δυο διαφορετικζσ δθλϊςεισ ςυναρτιςεων Τπογραφή ςυνάρτηςησ Όνομα ςυνάρτθςθσ & λίςτα παραμζτρων Μοναδικά για κάκε οριςμό ςυνάρτθςθσ Επιτρζπει ίδια ενζργεια ςε διαφορετικά δεδομζνα 5-19
Παράδειγμα Υπερφόρτωςθσ: Μζςοσ Όροσ Υπολογίηει το μζςο όρο 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-20
Παράδειγμα Υπερφόρτωςθσ: Μζςοσ Όροσ Ποια ςυνάρτθςθ καλείται; Εξαρτάται από το ίδιο το κάλεςμα: avg = average(5.2, 6.7); Καλεί "δφο-παραμζτρων average()" avg = average(6.5, 8.5, 4.2); Καλεί" τριϊν-παραμζτρων average()" Ο μεταφραςτισ επιλφει τζτοια κζματα βαςιηόμενοσ ςτθν υπογραφι ςτο κάλεςμα "Ταιριάηει" το κάλεςμα με τθν αντίςτοιχθ ςυν/ςθ 5-21
Επίλυςθ Υπερφόρτωςθσ 1 ον : Απόλυτο ταίριαςμα Κοιτάηει για ίδια υπογραφι όπου δεν απαιτείται κάποια μετατροπι τφπου 2 ον : Συμβατό ταίριαςμα Κοιτάηει για "ςυμβατι" υπογραφι όπου μια αυτόματθ μετατροπι τφπου είναι δυνατι: 1 οσ προϊκθςθ (π.χ., int double) δεν χάνονται δεδομζνα 2 οσ αποκοπι (π.χ., double int) πικανι απϊλεια δεδομζνων Ομοιότθτεσ ςτα ίδια επίπεδα ςφάλμα ςτο μεταφραςτι void f(int n, double m); void f(double n, int m); f(33, 44); 5-22
Αυτόματθ μετατροπι τφπου και Υπερφόρτωςθ Οι τυπικοί αρικμθτικοί τφποι φτιάχνουν ςυνικωσ τφπουσ "double" Επιτρζπει "οποιοδιποτε" αρικμθτικό τφπο int double float double char double *αργότερα κα το δοφμε! Αποφεφγει υπερφόρτωςθ για διαφορετικοφσ αρικμθτικοφσ τφπουσ 5-23
Αυτόματθ μετατροπι τφπου και Υπερφόρτωςθ 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-24
Προεπιλεγμζνα Ορίςματα Κατά τθν κλιςθ επιτρζπει τθν αποφυγι μερικϊν οριςμάτων Στθ διλωςθ/οριςμό ςυνάρτθςθσ: 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-25
#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-26
Ενότθτεσ 1-13 ΕΠΑΝΑΛΗΨΗ 6-27
Μ.Ο. τριϊν ακεραίων Να γραφεί ζνα πρόγραμμα που διαβάηει τρεισ κετικοφσ ακεραίουσ και υπολογίηει το μζςο όρο των τριϊν ακεραίων 6-28
Μ.Ο. τριϊν ακεραίων Να γραφεί ζνα πρόγραμμα που διαβάηει τρεισ κετικοφσ ακεραίουσ και υπολογίηει το μζςο όρο των τριϊν ακεραίων #include <iostream> int main( ) int x, y, z, sum; double avg; cout << "Enter x,y,z:"; cin >> x >> y >> z; sum = x + y + z; avg = static_cast<double>(sum)/3; // ή avg = sum / 3.0 ; cout << "Avg: " << avg; return 0; 6-29
Μ.Ο. τριϊν ακεραίων Να γραφεί ζνα πρόγραμμα που διαβάηει τρεισ κετικοφσ ακεραίουσ και υπολογίηει το μζςο όρο των τριϊν ακεραίων. Κατά τθν είςοδο να γίνεται επαναλθπτικόσ ζλεγχοσ τιμϊν. 6-30
Μ.Ο. τριϊν ακεραίων Να γραφεί ζνα πρόγραμμα που διαβάηει τρεισ κετικοφσ ακεραίουσ και υπολογίηει το μζςο όρο των τριϊν ακεραίων. Κατά τθν είςοδο να γίνεται επαναλθπτικόσ ζλεγχοσ τιμϊν. #include <iostream> int main( ) int x, y, z, sum; double avg; do cout << "Enter x,y,z:"; cin >> x >> y >> z; while( (x < 0) (y < 0) (z <0) ); sum = x + y + z; avg = static_cast<double>(sum)/3; // ή avg = sum / 3.0 ; cout << "Avg: " << avg; 6-31
Μ.Ο. τριϊν ακεραίων Να γραφεί μια ςυνάρτθςθ που δζχεται τρεισ κετικοφσ ακεραίουσ και υπολογίηει το μζςο όρο των τριϊν ακεραίων. main(): Καλζςτε από τθν main() τθν ςυνάρτθςθ που φτιάξατε αφοφ πρϊτα διαβάςετε τουσ αρικμοφσ. Θα πρζπει κατά τθν είςοδο να ελζγχετε (επαναλθπτικά) για επιτρεπτζσ τιμζσ. 6-32
#include <iostream> double avg(int x, int y, int z); int main( ) int x, y, z; double avg; do cout << "Enter x,y,z:"; cin >> x >> y >> z; while( (x < 0) (y < 0) (z <0) ); cout << "Avg: " << avg(x, y, z); double avg(int x, int y, int z) int sum; sum = x + y + z; return ( static_cast<double>(sum) / 3 ); 6-33
Μ.Ο. τριϊν ακεραίων Να γραφεί ζνα πρόγραμμα που διαβάηει τρεισ κετικοφσ ακεραίουσ και υπολογίηει το μζςο όρο των τριϊν ακεραίων. Θα πρζπει να χρθςιμοποιιςετε τουλάχιςτον τρεισ ςυν/ςεισ: μια για διάβαςμα μια για υπολογιςμό μια για εκτφπωςθ Θα πρζπει κατά τθν είςοδο να ελζγχετε (επαναλθπτικά) για επιτρεπτζσ τιμζσ. 6-34
#include <iostream> void read(int &x, int &y, int &z); double avg(int x, int y, int z); void print(double a); int main( ) int x, y, z; double mo; read(x,y,z); mo = avg(x,y,z); print(mo); void read(int &x, int &y, int &z) do cout << "Enter x,y,z:"; cin >> x >> y >> z; while( (x < 0) (y < 0) (z <0) ); void print(double a) cout << "Avg: " << a << endl; double avg(int x, int y, int z) int sum; sum = x + y + z; return ( static_cast<double>(sum) / 3 ); 6-35
Μ.Ο. τριϊν ακεραίων Να γραφεί ζνα πρόγραμμα που διαβάηει τρεισ κετικοφσ ακεραίουσ και υπολογίηει το μζςο όρο των τριϊν ακεραίων. Θα πρζπει να χρθςιμοποιιςετε τουλάχιςτον τρεισ ςυν/ςεισ: μια για διάβαςμα μια για υπολογιςμό μια για εκτφπωςθ Θα πρζπει κατά τθν είςοδο να ελζγχετε (επαναλθπτικά) για επιτρεπτζσ τιμζσ. Να ςυμπεριλάβετε ζνα βρόχο ο οποίοσ κα επιτρζπει ςτο χριςτθ να επαναλαμβάνει τον υπολογιςμό για νζεσ τιμζσ ειςόδου μζχρι ο χριςτθσ να δθλϊςει ότι δεν κζλει να ςυνεχίςει. 6-36
#include <iostream> void read(int &x, int &y, int &z); double avg(int x, int y, int z); void print(double a); int main( ) int x, y, z; char ans; double mo; do read(x,y,z); mo = avg(x,y,z); print(mo); cout << "again(y/n)?"; cin >> ans; while(ans == 'y'); double avg(int x, int y, int z) int sum; sum = x + y + z; return ( static_cast<double>(sum) / 3 ); void read(int &x, int &y, int &z) do cout << "Enter x,y,z:"; cin >> x >> y >> z; while( (x < 0) (y < 0) (z <0) ); void print(double a) cout << "Avg: " << a << endl; 6-37
Γενικά Όλεσ οι προθγοφμενεσ παραλλαγζσ ςτισ εκφωνιςεισ απαιτοφν και διαφορετικό τρόπο επίλυςθσ Πρόγραμμα Πρόγραμμα με ςυναρτιςεισ Πρόγραμμα με ςυναρτιςεισ και ζλεγχο δεδομζνων Πρόγραμμα με επιμζρουσ ςυναρτιςεισ (προςοχι ςτισ &παραμζτρουσ) Πρόγραμμα με επιμζρουσ ςυναρτιςεισ και επαναλθπτικό υπολογιςμό Θα πρζπει να τουσ καταλαβαίνουμε από τθν εκφϊνθςθ ποιο ολοκλθρωμζνο πρόγραμμα ηθτάμε Στθ ςυνζχεια μόνο κάποια κατθγορία ηθτάμε και επιλφουμε Θα πρζπει ωςτόςο να μποροφμε να διαχειριςτοφμε και τισ υπόλοιπεσ κατθγορίεσ 6-38
Ενότθτεσ 1-13 ΕΠΑΝΑΛΗΨΗ ΕΡΓΑΣΗΡΙΩΝ 6-39
Ηιτθμα 3 ο PreLab-2 Γράψτε ζνα πρόγραμμα που εκτυπϊνει ζνα ορκογϊνιο τρίγωνο από * («αςτεράκια») με βάςθ και φψοσ a. Τθν ποςότθτα a τθ δίνει ο χριςτθσ. Παράδειγμα: Για a = 5: * ** *** **** ***** 6-40
Ηιτθμα 3 ο PreLab-2 Γράψτε ζνα πρόγραμμα που εκτυπϊνει ζνα ορκογϊνιο τρίγωνο από * («αςτεράκια») με βάςθ και φψοσ a. Τθν ποςότθτα a τθ δίνει ο χριςτθσ. Παράδειγμα: Για a = 5: * ** *** **** ***** int main() int i,j,a; cout << "Give number: " ; cin >> a; for ( i = 1; i < a + 1; i++ ) for ( j = 1; j < i + 1; j++) cout << "*"; cout << endl; return 0; 6-41
Ηιτθμα 3 ο Lab-2 Γράψτε ζνα πρόγραμμα που εκτυπϊνει ζνα δζντρο από * («αςτεράκια») με φψοσ a. Τθν ποςότθτα a τθ δίνει ο χριςτθσ. Παράδειγμα: Για a = 5: * *** ***** ******* ********* 6-42
Ηιτθμα 3 ο Lab-2 Γράψτε ζνα πρόγραμμα που εκτυπϊνει ζνα δζντρο από * («αςτεράκια») με φψοσ a. Τθν ποςότθτα a τθ δίνει ο χριςτθσ. Παράδειγμα: Για a = 5: * *** ***** ******* ********* int main() int i,j,a; cout << "Give number: " ; cin >> a; for ( i = 1; i < a + 1; i++ ) for ( j = 1; j < a - i + 1; j++) cout << " "; for ( j = 1; j <= 2*i - 1; j++) cout << "*"; cout << endl; return 0; 6-43
Ηιτθμα 1 ο PreLab-3 Συνάρτθςθ που δζχεται δφο ακζραιουσ αρικμοφσ α, β και επιςτρζφει το εφροσ ακεραίων τιμϊν μεταξφ του α και β. Μζςα ςτθ ςυνάρτθςθ κα πρζπει να χρθςιμοποιιςετε ςυν/ςεισ max() και min() από δυο αρικμοφσ. main(): διαβάςτε δφο ακεραίουσ α, β και εκτυπϊςτε το αποτζλεςμα τθσ ςυνάρτθςθσ.
Ηιτθμα 1 ο PreLab-3 Συνάρτθςθ που δζχεται δφο ακζραιουσ αρικμοφσ α, β και επιςτρζφει το εφροσ ακεραίων τιμϊν μεταξφ του α και β. Μζςα ςτθ ςυνάρτθςθ κα πρζπει να χρθςιμοποιιςετε ςυν/ςεισ max() και min() από δυο αρικμοφσ. main(): διαβάςτε δφο ακεραίουσ α, β και εκτυπϊςτε το αποτζλεςμα τθσ ςυνάρτθςθσ. int numbers(int a, int b); int max(int a, int b); int min(int a, int b); int main() int a, b; cout << "Give a & b:"; cin >> a >> b; cout << numbers(a,b); int numbers(int a, int b) return max(a,b) min(a,b); int max(int a, int b) if ( a > b ) return( a ); else return(b); int min(int a, int b) return ( (a < b)? a: b );
Ηιτθμα 2 ο PreLab-3 Δθμιουργιςτε μια νζα ςυνάρτθςθ που δζχεται δφο ακζραιεσ τιμζσ x και n, και επιςτρζφει τθν τιμι τθσ ακόλουκθσ ςυνάρτθςθσ main(): Καλζςτε από τθν main() τθν ςυνάρτθςθ που φτιάξατε αφοφ πρϊτα διαβάςετε τα x και n και εκτυπϊςτε το ανάλογο αποτζλεςμα τθσ ςυνάρτθςθσ. Θα πρζπει κατά τθν είςοδο να ελζγχετε επαναλθπτικά αν το n είναι περιττό. n n x n x n x x x 1 3 4 2 1 2 5 3 n i i x i x 3 1 1
int main() int x, n; cout << "Give x"; cin >> x; do cout << "Give odd n "; cin >> n; while( n % 2 == 0 ); cout << fun(x, n); double fun(int x, int n) double sum; sum = 1.0 / x; for(int i = 3; i <= n; i = i + 2) sum = sum + (i-1) / pow( static_cast<double>(x), n) ; return sum;
Ηιτθμα 1 ο Lab-3 Γράψτε μια ςυνάρτθςθ που υπολογίηει τθ μζςθ τυπικι απόκλιςθ τεςςάρων βακμολογιϊν. Θ τυπικι απόκλιςθ ορίηεται ωσ θ τετραγωνικι ρίηα του μζςου όρου των τεςςάρων τιμϊν (s i - a) 2 όπου α είναι ο μζςοσ όροσ των βακμολογιϊν s 1, s 2, s 3, s 4. (s 1 a) 2 +(s 2 a) 2 +(s 3 a) 2 +(s 4 a) 2 4 Θ ςυνάρτθςθ κα καλεί δυο άλλεσ ςυναρτιςεισ. main(): Ενςωματϊςτε τθ ςυν/ςθ ςτθ main() που κα ςασ επιτρζπει να δοκιμάηετε τθ ςυνάρτθςθ ξανά και ξανά μζχρι να πείτε ςτο πρόγραμμα ότι ζχετε τελειϊςει.
double apoklisi( int s1, int s2, int s3, int s4, double a) a = avg(s1,s2,s3,s4); double sum; sum = pow((s1-a), 2.0) + pow((s2-a), 2.0) + pow((s3-a), 2.0) + pow((s4-a), 2.0); result = sqrt(sum); return result; double avg(int s1, int s2, int s3, int s4) int sum; double result; sum = s1 + s2 + s3 + s4; result = sum / static_cast<double>(4.0); return result;
double apoklisi( int s1, int s2, int s3, int s4, double a) a = avg(s1,s2,s3,s4); double sum; sum = pow((s1-a), 2.0) + pow((s2-a), 2.0) + pow((s3-a), 2.0) + pow((s4-a), 2.0); result = sqrt(sum); return result; double avg(int s1, int s2, int s3, int s4) int sum; double result; sum = s1 + s2 + s3 + s4; result = sum / static_cast<double>(4.0); return result; char ans; do cout << "Vathmos s1: "; cin >> s1; cout << "Vathmos s2: "; cin >> s2; cout << "Vathmos s3: "; cin >> s3; cout << "Vathmos s4: "; cin >> s4; cout << apoklisi(s1,s2,s3,s4,a); cout << "again?(y/n): "; cin >> ans; while (ans == 'y' ans == 'Y');
Ηιτθμα 2 ο Lab-3 Παλίνδρομοσ: αν μπορεί να διαβαςτεί το ίδιο από τθν αρχι και το τζλοσ του (π.χ. 2772, 4444, 9119). Δθμιουργιςτε μια ςυνάρτθςθ που δζχεται ζναν ακζραιο τετραψιφιο αρικμό και επιςτρζφει true ι false ανάλογα αν ο αρικμόσ είναι παλίνδρομοσ ι όχι. Επίςθσ δθμιουργιςτε μια άλλθ ςυνάρτθςθ που κα εκτυπϊνει τα ψθφία του αρικμοφ με απόςταςθ 4 κενϊν το ζνα από το άλλο. Τθν δεφτερθ ςυνάρτθςθ κα τθν καλεί θ πρϊτθ. main(): Καλζςτε από τθν main() τθν ςυνάρτθςθ που φτιάξατε αφοφ πρϊτα διαβάςετε τον τετραψιφιο αρικμό (1000-9999). Θα πρζπει κατά τθν είςοδο να ελζγχετε επαναλθπτικά αν ο αρικμόσ είναι τετραψιφιοσ.
int main() int num; do cout << "Give num (1000...9999)"; cin >> num; while( num < 1000 num > 9999 ); if( check(num) ) cout << "Palindromos!"; else cout << "OXI Palindromos!"; bool check(int num) int x = num; int s1 = x%10; x = x/10; int s2 = x%10; x = x/10; int s3 = x%10; x = x/10; int s4 = x%10; print(s4,s3,s2,s1); if(s1==s4 && s2==s3) return true; else return false; void print ( int a, int b, int c, int d ) cout << a << " " << b << " " << c << " " << d << endl;
Συναρτιςεισ (ςφνοψθ) Όταν πρόκειται να γράψουμε μια ςυν/ςθ: 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-53
Βιβλιογραφία Καλι Μελζτθ [1] W. Savitch, Πλιρθσ C++, Εκδόςεισ Τηιόλα, 2011 [2+ Θ. Deitel and P. Deitel, C++ Προγραμματιςμόσ 6θ Εκδοςθ, Εκδόςεισ Μ. Γκιοφρδασ, 2013 Υλη βιβλιογραφίασ [1]: Κεφ. 1 4, 13.1-13.2, Παραρτιματα 1, 2, 3, 4 [2]: Κεφ. 1, 2, 4, 6 Παραρτιματα Α, Β, Γ, Δ, ΣΤ 1o QUIZ (όλα τα τμιματα): Δευτζρα 16 Νοεμβρίου 6-54