343 – Ειςαγωγι ςτον Ρρογραμματιςμό
Τμιμα Μακθματικϊν Ρανεπιςτιμιο Ιωαννίνων
Ακαδθμαϊκό Ζτοσ 2019-2020
Χάρθσ Ραπαδόπουλοσ
207δ, B’ όροφοσ
e-mail: [email protected]
Ωρεσ Γραφείου: Τρίτθ 11-13
Χριςιμο Υλικό
• Σελίδα Μακιματοσ:
http://www.cs.uoi.gr/~charis/c343
– Διαφάνειεσ Διαλζξεων
– Εργαςτθριακζσ Αςκιςεισ
– Υλοποιθμζνα προγράμματα και παραδείγματα
– Ανακοινώςεισ
• Λογιςμικό υλοποίθςθσ προγραμμάτων : Bloodshed DevC++ :
http://www.bloodshed.net/
• Εργαςτιριο (μεγάλο): Εργαςτιριο Η/Υ 1ο όροφο
• Τα εργαςτιρια κα ξεκινιςουν Δευτζρα 21 Οκτωβρίου, Σετάρτθ 23 Οκτωβρίου και Πζμπτθ 24 Οκτωβρίου
• Αλλαγζσ ΔΕΝ επιτρζπονται! Διάρκεια Εργαςτθρίου: 1h:30m
Τμιματα Εργαςτθρίων
Εργαςτιρια Δευτζρα (14:00-17:00)
Α1 Δευτζρα 14:00-15:30 _____ – 11881 Α2 Δευτζρα 15:30-17:00 11882 – 11934
Εργαςτιρια Πζμπτθ (09:00-12:00)
Γ1 Πζμπτθ 09:00-10:30 12026 – 12069 Γ2 Πζμπτθ 10:30-12:00 12070 – _____
Εργαςτιρια Σετάρτθ (09:00-12:00)
Β1 Σετάρτθ 09:00-10:30 11935 – 11981 Β2 Σετάρτθ 10:30-12:00 11982 – 12025
Θ: διάλεξη (θεωρία)
Ε: Εργαστήριο
Q: Σεστ quiz
Εβδομάδα Θζματα Υλθ βιβλιογραφίασ
Σρ, 8 Οκτωβρίου Εισαγωγικά μαθήματος, Δυαδική
αναπαράσταση, Είσοδος/Έξοδος δεδομένων
[1]: 1.1, Παράρτημα 3
[2]: Κεφ. 1, Β, Δ
Σρ, 15 Οκτωβρίου Σύποι δεδομένων & μεταβλητών, Αριθμητικοί και
Λογικοί Σελεστές, Ροή ελέγχου if/else
[1]: 1.2-1.5, 2.1, Παράρτημα 1
[2]: Κεφ. 2, Γ, 4.11, 4.12, Α, ΣΤ
Δε, Σε., Πε
21-23-24 Οκτ 1ο Εργαστήριο
Σρ, 22 Οκτωβρίου Ροή επαναληπτικού ελέγχου: for, while, do-while [1]: 2.2, 2.3
[2]: Κεφ. 4, Κεφ. 5
Σε, Πε
30-31 Οκτ 2ο Εργαστήριο
Σρ, 29 Οκτωβρίου υναρτήσεις, εμβέλεια μεταβλητών και
αναδρομή
[1]: Κεφ. 3, Κεφ. 4, 13.1, 13.2, Παρ. 4
[2]: Κεφ. 6
Δε, Σε, Πε,
4-6-7 Νοε 3ο Εργαστήριο
Σρ, 5 Νοεμβρίου Επανάληψη Εργαστηρίων
Πε, 14 Νοε 1ο Σεστ (Ανάπτυξη κώδικα στο Εργαστήριο)
Σρ, 12 Νοεμβρίου Πίνακες (μονοδιάστατοι και πολυδιάστατοι) [1]: 5.1, 5.2, 5.4
[2]: Κεφ. 7
Δε, Σε, Πε
18-20-21 Νοε 4ο Εργαστήριο
Σρ, 19 Νοεμβρίου Εφαρμογές σε ταξινομήσεις και αναζήτηση
στοιχείων
[1]: 5.3, 13.3
[2]: 7.7, 7.8, 8.6, Κεφ. 19
Δε, Σε, Πε
25-27-28 Νοε 5ο Εργαστήριο
Σρ, 26 Νοεμβρίου Επανάληψη με Παραδείγματα [1]: 9.1, 9.2, 9.3
[2]: 6.7, 6.8, Κεφ. 18
Πε, 5 Δεκ 2ο Quiz (Ερωτήσεις πολλαπλών επιλογών)
Σρ, 3 Δεκεμβρίου υναρτήσεις με χειρισμό πινάκων [1]: 5.1, 5.2, 5.3, 5.4, 13.3
[2]: Κεφ. 7, 8, 19
Δε, 9 Δεκ 6ο Προαιρετικό Εργαστήριο (χωρίς παρουσίες)
Σρ, 10 Δεκεμβρίου Αλφαριθμητικά, συμβολοσειρές, [1]: 9.1, 9.2, 9.3, 6.1, 12.1, 12.2, 12.4
[2]: 6.7, 6.8, Κεφ. 18, 21, 17.1-17.10
Σρ, 17 Δεκεμβρίου Εγγραφές, δομές και χρήση αρχείων [1]: 9.1, 9.2, 9.3, 6.1, 12.1, 12.2, 12.4
[2]: 6.7, 6.8, Κεφ. 18, 21, 17.1-17.10
Σρ, 14 Ιανουαρίου Επανάληψη
Οκτώβριος 2019
Δ Σ Σ Π Π
1 2 3 4
7 8 Θ 9 10 11
14 15 Θ 16 17 18
21 Ε 22 Θ 23 Ε 24 Ε 25
28 29 Θ 30 Ε 31 Ε
Νοέμβριος 2019
Δ Σ Σ Π Π
1
4 Ε 5 Θ 6 Ε 7 Ε 8
11 12 Θ 13 14 Q 15
18 Ε 19 Θ 20 Ε 21 Ε 22
25 Ε 26 Θ 27 Ε 28 Ε 29
Δεκέμβριος 2019
Δ Σ Σ Π Π
2 3 Θ 4 5 Q 6
9 E 10 Θ 11 12 13
16 17 Θ 18 19 20
Ιανουάριος 2020
Δ Σ Σ Π Π
6 7 8 9 10
13 14 Θ 15 16 17
Θ: διάλεξη (θεωρία)
Ε: Εργαστήριο
Q: Σεστ quiz
Εβδομάδα Θζματα Υλθ βιβλιογραφίασ
Σρ, 8 Οκτωβρίου Εισαγωγικά μαθήματος, Δυαδική
αναπαράσταση, Είσοδος/Έξοδος δεδομένων
[1]: 1.1, Παράρτημα 3
[2]: Κεφ. 1, Β, Δ
Σρ, 15 Οκτωβρίου Σύποι δεδομένων & μεταβλητών, Αριθμητικοί και
Λογικοί Σελεστές, Ροή ελέγχου if/else
[1]: 1.2-1.5, 2.1, Παράρτημα 1
[2]: Κεφ. 2, Γ, 4.11, 4.12, Α, ΣΤ
Δε, Σε., Πε
21-23-24 Οκτ 1ο Εργαστήριο
Σρ, 22 Οκτωβρίου Ροή επαναληπτικού ελέγχου: for, while, do-while [1]: 2.2, 2.3
[2]: Κεφ. 4, Κεφ. 5
Σε, Πε
30-31 Οκτ 2ο Εργαστήριο
Σρ, 29 Οκτωβρίου υναρτήσεις, εμβέλεια μεταβλητών και
αναδρομή
[1]: Κεφ. 3, Κεφ. 4, 13.1, 13.2, Παρ. 4
[2]: Κεφ. 6
Δε, Σε, Πε,
4-6-7 Νοε 3ο Εργαστήριο
Σρ, 5 Νοεμβρίου Επανάληψη Εργαστηρίων
Πε, 14 Νοε 1ο Σεστ (Ανάπτυξη κώδικα στο Εργαστήριο)
Σρ, 12 Νοεμβρίου Πίνακες (μονοδιάστατοι και πολυδιάστατοι) [1]: 5.1, 5.2, 5.4
[2]: Κεφ. 7
Δε, Σε, Πε
18-20-21 Νοε 4ο Εργαστήριο
Σρ, 19 Νοεμβρίου Εφαρμογές σε ταξινομήσεις και αναζήτηση
στοιχείων
[1]: 5.3, 13.3
[2]: 7.7, 7.8, 8.6, Κεφ. 19
Δε, Σε, Πε
25-27-28 Νοε 5ο Εργαστήριο
Σρ, 26 Νοεμβρίου Επανάληψη με Παραδείγματα [1]: 9.1, 9.2, 9.3
[2]: 6.7, 6.8, Κεφ. 18
Πε, 5 Δεκ 2ο Quiz (Ερωτήσεις πολλαπλών επιλογών)
Σρ, 3 Δεκεμβρίου υναρτήσεις με χειρισμό πινάκων [1]: 5.1, 5.2, 5.3, 5.4, 13.3
[2]: Κεφ. 7, 8, 19
Δε, 9 Δεκ 6ο Προαιρετικό Εργαστήριο (χωρίς παρουσίες)
Σρ, 10 Δεκεμβρίου Αλφαριθμητικά, συμβολοσειρές, [1]: 9.1, 9.2, 9.3, 6.1, 12.1, 12.2, 12.4
[2]: 6.7, 6.8, Κεφ. 18, 21, 17.1-17.10
Σρ, 17 Δεκεμβρίου Εγγραφές, δομές και χρήση αρχείων [1]: 9.1, 9.2, 9.3, 6.1, 12.1, 12.2, 12.4
[2]: 6.7, 6.8, Κεφ. 18, 21, 17.1-17.10
Σρ, 14 Ιανουαρίου Επανάληψη
Οκτώβριος 2019
Δ Σ Σ Π Π
1 2 3 4
7 8 Θ 9 10 11
14 15 Θ 16 17 18
21 Ε 22 Θ 23 Ε 24 Ε 25
28 29 Θ 30 Ε 31 Ε
Νοέμβριος 2019
Δ Σ Σ Π Π
1
4 Ε 5 Θ 6 Ε 7 Ε 8
11 12 Θ 13 14 Q 15
18 Ε 19 Θ 20 Ε 21 Ε 22
25 Ε 26 Θ 27 Ε 28 Ε 29
Δεκέμβριος 2019
Δ Σ Σ Π Π
2 3 Θ 4 5 Q 6
9 E 10 Θ 11 12 13
16 17 Θ 18 19 20
Ιανουάριος 2020
Δ Σ Σ Π Π
6 7 8 9 10
13 14 Θ 15 16 17
ΜΕΣΑΒΛΗΣΕ, ΕΚΦΡΑΕΙ & ΕΝΣΟΛΕ ΕΚΧΩΡΗΗ
Ενότθτα 3
Η μνιμθ του υπολογιςτι
• Η μνιμθ είναι ςαν ζνασ πίνακασ και μποροφμε να προςπελάςουμε ζνα ςτοιχείο τθσ μνιμθσ με ζναν αρικμό.
• Στο παραπάνω παράδειγμα: 32-bit αρχιτεκτονικι.
0
4 byte
8
12 32bit word
16
20
…
Μεταβλθτζσ
• Αντί να κυμόμαςτε αρικμοφσ και διευκφνςεισ, χρθςιμοποιοφμε μεταβλθτζσ ςε ζνα πρόγραμμα
• Λζμε ςτον υπολογιςτι να δεςμεφςει 3 κζςεισ μνιμθσ για να αποκθκεφςουμε ακζραιουσ αρικμοφσ
• Αυτζσ οι 3 κζςεισ μνιμθσ ονομάηονται x1, x2, και sum
• Οι διευκφνςεισ αναφζρονται με τα παραπάνω ονόματα
#include <iostream>
int main()
{
int x1, x2, sum;
return 0;
}
Μεταβλθτζσ
• Ουςιαςτικά τα ονόματα είναι ςυντομεφςεισ για τισ διευκφνςεισ
0
4 byte
8
12 32bit word
16
20
…
x1
x2
sum
Μεταβλθτζσ • Μετά τθν δζςμευςθ 3 κζςεων ςτθν μνιμθ μποροφμε να
αποκθκεφςουμε τιμζσ ςτισ αντίςτοιχεσ κζςεισ
• Αποκθκεφει τθν τιμι 1 ςτθν κζςθ μνιμθσ x1
• Αποκθκεφει τθν τιμι 2 ςτθν κζςθ μνιμθσ x2
• Αποκθκεφει τθν τιμι 3 ςτθν κζςθ μνιμθσ sum
#include <iostream>
int main()
{
int x1, x2, sum;
x1 = 1;
x2 = 2;
sum = x1 + x2;
return 0;
}
Μεταβλθτζσ
• Ουςιαςτικά τα ονόματα είναι ςυντομεφςεισ για τισ διευκφνςεισ
0
4 byte
8
12 32bit word
16
20
…
00000000 00000000 00000000 00000001
00000000 00000000 00000000 00000010
00000000 00000000 00000000 00000011
x1
x2
sum
Μεταβλθτζσ ςτθ C++
• Ονοματολογία μεταβλθτϊν: – Κάκε μεταβλθτι πρζπει να αρχίηει με: γράμμα ι _ (κάτω παφλα)
– Υπόλοιποι χαρακτιρεσ: γράμματα ι αρικμοί ι _
Ρ.χ.: x x1 x_1 _abc data2
12 3x %count
• Case sensitive γλϊςςα – Ξεχωρίηει τουσ πεηοφσ από τουσ κεφαλαίουσ χαρακτιρεσ
– 3 διαφορετικζσ μεταβλθτζσ: rate RATE Rate
• Δεςμευμζνεσ λζξεισ – Χριςθ μόνο για τον προκακοριςμζνο τουσ ςκοπό
– Δεν χρθςιμοποιοφνται για ονοματολογία μεταβλθτϊν (ςυναρτιςεων)
Δεςμευμζνεσ λζξεισ ςτθ C++
• Εκτόσ από τισ λζξεισ του πίνακα, δεςμευμζνεσ λζξεισ είναι οτιδιποτε ξεκινάει με _ _ – Χρθςιμοποιοφνται ςε τυποποιθμζνεσ βιβλιοκικεσ
– Ρ.χ. : __count __i __x1
Δεν ππέπει να δηλώνοςμε ηέηοιερ μεηαβληηέρ!!
Διλωςθ μεταβλθτϊν
• Κάκε μεταβλθτι ζχει: ❶ όνομα
❷ τφπο
❸ τιμι
Τφποσ: είδοσ πλθροφορίασ που αποκθκεφουμε ςτθν κζςθ μνιμθσ
Βαςικοί τφποι μεταβλθτϊν 1. ακζραιοι: int x;
2. χαρακτιρεσ: char x;
3. κινθτισ υποδιαςτολισ (προςεγγιςτικι αναπαράςταςθ πραγματικϊν αρικμϊν): double x;
4. λογικζσ (δυαδικζσ): bool x; (true-αλθκισ ι false-ψευδισ)
• Άλλοι τφποι μεταβλθτϊν: ςε λίγο… (αναπαράςταςθ αρικμϊν)
Διλωςθ μεταβλθτϊν
• Ραράδειγμα:
– Τελειϊνουν με ;
– Πταν υπάρχουν περιςςότερεσ από μια μεταβλθτζσ (<λίςτα>) τότε χωρίηονται με ,
• Κάκε μεταβλθτι πρζπει να δθλωκεί πριν τθν πρϊτθ χρθςιμοποίθςι τθσ. – Συνικωσ πριν τθν χρθςιμοποίθςι τθσ
ι
– ςτθν αρχι κάποιου τμιματοσ του προγράμματοσ που ξεκινάει με {
int x1, x2;
double sum;
int x, y, z;
x = 1;
y = 2;
i = 0;
int i; ΛΑΘΟΣ
Διλωςθ μεταβλθτϊν - Σφνταξθ
• Κάκε μεταβλθτι δθλϊνεται πριν χρθςιμοποιθκεί
• Η ςφνταξθ διαφοροποιείται όταν κζλουμε να δϊςουμε αρχικζσ τιμζσ ςτθν διλωςθ μεταβλθτϊν
φνταξθ όνοματφπου ονομαμεταβλητησ1, ονομαμεταβλητησ2, . . . ;
Παράδειγμα int count, numberOfDragons, numberOfTrolls;
double distance;
Απλοί τφποι μεταβλθτϊν
• Υπάρχουν και άλλοι τφποι μεταβλθτϊν όπωσ – αλφαρικμθτικοί χαρακτιρεσ: string
– Ρίνακεσ (arrays), κλάςεισ...
• Για τουσ ακεραίουσ υπάρχει μθ-προςθμαςμζνθ παραλλαγι: unsigned short, unsigned int, unsigned long
Σφποσ Χριςθ μνιμθσ Περιοχι Σιμών
short (ι short int) 2 bytes -32768 ζωσ 32767
int 4 bytes -2146473648 ζωσ 2147483647
long (ι long int) 10 bytes ± 9223372036854775807
float 4 bytes 10-38 ζωσ 1038
double 8 bytes 10-304 ζωσ 10308
long double 10 bytes 10-4932 ζωσ 104932
char 1 byte Πλοι οι χαρακτιρεσ ASCII
bool 1 byte false ι true
Εντολζσ εκχϊρθςθσ
• Αλλαγι τιμισ ςε μια μεταβλθτι
ονομαμεταβλητησ = ζκφραςη ;
ζκφραςη:
μεταβλθτι ι αρικμόσ ι ςφνκετθ ζκφραςθ αποτελοφμενθ από μεταβλθτζσ αρικμοφσ, τελεςτζσ, ςυν/ςεισ
• Αποτίμθςθ τθσ ζκφραςθσ ςτο δεξί μζλοσ και ςτθ ςυνζχεια κζτουμε τθν τιμι τθσ ζκφραςθσ ςτθ τιμι τθσ μεταβλθτισ
totalWeight = oneWeight * number ;
temparature = 37.5 ;
count = count + 2 ;
Εντολζσ εκχϊρθςθσ
• Οι εντολζσ εκχϊρθςθσ είναι εκφράςεισ – Επιςτρζφουν τθν τιμι που ανακζτουμε ςτθ μεταβλθτι (αριςτερό
μζροσ)
n = (m = 2); ι n = m = 2;
– Η υποζκφραςθ m = 2 αλλάηει τθν τιμι τθσ μεταβλθτισ m ςε 2 και
επιςτρζφει τθν τιμι 2 (που τθν ανακζτει τελικά και ςτθν μεταβλθτι n)
• Συνικωσ δεν τθν χρθςιμοποιοφμε αλλά αντιλαμβανόμαςτε καλφτερα ςε κάποια κομμάτια κϊδικα ενδεχόμενα λάκθ
Αρχικζσ τιμζσ
• Κάκε μεταβλθτι πρζπει να ζχει μια αρχικι τιμι εκτόσ αν υποδθλϊνεται ζμμεςα
– Η μεταβλθτι x δεν ζχει αρχικοποιθκεί και δεν γνωρίηουμε τθν τιμι
που ζχει (ςυνικωσ κα ζχει κάποιο τυχαίο αρικμό)
• Θα πρζπει να δϊςουμε αρχικι τιμι ςτθν μεταβλθτι x:
Πλα τα παραπάνω είναι ιςοδφναμα
int x, y;
y = x + 1;
int x(3), y;
y = x + 1;
int x, y;
x = 3;
y = x + 1;
int x = 3, y;
y = x + 1;
Αρχικζσ τιμζσ
Απόδοςθ αρχικών τιμών ςε δθλώςεισ φνταξθ όνοματφπου ονομαμεταβλητησ1 = εκφραςη1, ονομαμεταβλητησ2 = εκφραςη2, . . . ;
Παραδείγματα int count = 0, limit = 10, x = 0;
double distance = 999.99;
Απόδοςθ αρχικών τιμών ςε δθλώςεισ Εναλλακτικι φνταξθ όνοματφπου ονομαμεταβλητησ1 (εκφραςη1), ονομαμεταβλητησ2 (εκφραςη2), . . . ;
Παραδείγματα int count(0), limit(10), x(0);
double distance(999.99);
Ειδικζσ εντολζσ εκχϊρθςθσ • Συντόμευςθ εντολϊν εκχϊρθςθσ a = a + 3; a += 3;
Η εντολι εκχϊρθςθσ,
ονομαμεταβλητησ = ονομαμεταβλητησ τελεστης ζκφραςη ;
μπορεί να γραφεί ιςοδφναμα ςε
ονομαμεταβλητησ τελεστης = ζκφραςη ;
τελεστης: + , – , * , / , % *βαςικζσ αρικμθτικζσ πράξεισ+
• Ραραδείγματα: d -= 4 (d = d - 4)
e *= 5 (e = e * 5)
f /= 3 (f = f / 3)
g %= 9 (g = g % 9)
Συμβατότθτα εκχωριςεων Αποκικευςθ τιμισ ενόσ τφπου ςε μια μεταβλθτι άλλου τφπου
int myInt;
myInt = 2.99; (myInt = 2)
• Από κινθτισ υποδιαςτολισ ςε ακζραια: – κόβονται τα δεκαδικά ψθφία (ςυνικωσ)
double myDouble;
myDouble = 3; ( myDouble = 3.0)
• Από ακζραια ςε κινθτισ υποδιαςτολισ : – προςτίκεται ".0" (πάντα)
Συμβατότθτα εκχωριςεων Αποκικευςθ τιμισ ενόσ τφπου ςε μια μεταβλθτι άλλου τφπου
char myChar; int myInt;
myChar = 64; (myChar = 'Z') myInt = 'Z'; (myInt=64)
• Από char ςε int και από int ςε char: – αντιςτοίχθςθ από τον πίνακα ASCII
bool myBool; int myInt;
myBool = 2; (myBool = true) myInt = false; (myInt=0)
• Από bool ςε int και από int ςε bool : – bool=int: μθ-μθδενικόσ ακζραιοσ ωσ true, αλλιϊσ false
– int=bool: Η τιμι true αποκθκεφεται ωσ 1 και θ false ωσ 0
Στακερζσ • Στακερζσ τφπου int:
– δεν περιζχουν υποδιαςτολι int x = 3;
• Στακερζσ τφπου double: – γίνεται και με ςυμβολογραφία κινθτισ υποδιαςτολισ:
double x = 3670000, y=3.67e3, z= 5.89e-6;
(3670 = 3.67*103) (0.00000589 = 5.89*10-6)
• Στακερζσ τφπου char: – τοποκετϊντασ τον χαρακτιρα ςε μονά ειςαγωγικά ' ':
char symbol = 'Z';
– οι αλφαρικμθτικζσ ςτακερζσ (strings) με διπλά ειςαγωγικά " ":
cout << " Hello !! " ;
– Είναι διαφορετικό το 'Z' από το "Z" !!!
• Στακερζσ τφπου bool: – ζχει δφο μόνο τιμζσ true ι false: bool x = true, y=false;
Ρίνακασ ASCII Αρικμ Χαρακτ Αρικμ Χαρακτ Αρικμ Χαρακτ Αρικμ Χαρακτ
Ονομαςία ςτακερϊν (δεν αλλάηουν)
• Οι δθλωμζνεσ ςτακερζσ (const) δεν αλλάηουν κατά τθ διάρκεια του προγράμματοσ
• Συνικωσ οι ςτακερζσ μεταβλθτζσ γράφονται με ΚΕΦΑΛΑΙΑ
φνταξθ const όνοματφπου ονομαμεταβλητησ = Σταθερα;
Παραδείγματα const int MAX_TRIES = 3;
const double PI = 3.14159;
Ραράδειγμα ςτακερϊν
• Τι γίνεται αν αλλάξει το επιτόκιο ςε 5.5% ;
#include <iostream>
using namespace std;
int main()
{
const double RATE = 6.9;
double deposit;
cout << "Δώζηε ηο ποζό καηάθεζηρ " ;
cin >> deposit;
double newBalance;
newBalance = deposit + deposit*(RATE/100);
cout << "Σε ένα σπόνο ηο ποζό θα γίνει " << newBalance;
return 0;
}
Δώζηε ηο ποζό καηάθεζηρ 100
Σε ένα σπόνο ηο ποζό θα γίνει 106.9
Αρικμθτικοί τελεςτζσ
• Σχθματιςμόσ εκφράςεων από – μεταβλθτζσ, ςτακερζσ, τελεςτζσ
• Αρικμθτικοί τελεςτζσ μεταξφ – int και double τφπουσ
z = x τελεςτισ y
• Τφποσ παραγόμενθσ τιμισ:
– Αν x και y int z int
– Αν x ι y double z double
Ραράδειγμα: total = baseamount + increase
θ τιμι τθσ total εξαρτάται από τουσ τφπουσ των τιμϊν baseamount, increase
Τελεςτισ Ρεριγραφι
+ Ρρόςκεςθ
- Αφαίρεςθ
* Ρολλαπλαςιαςμόσ
/ Διαίρεςθ
% Υπόλοιπο διαίρεςθσ
Ρροτεραιότθτεσ τελεςτϊν Ο τρόποσ υπολογιςμοφ μιασ ζκφραςθσ εξαρτάται από τθν προτεραιότθτα των τελεςτϊν:
❶ παρενκζςεισ: () Υπολογίηονται πρϊτα, από τα αριςτερά προσ τα δεξιά. Εάν υπάρχουν ζνκετεσ υπολογίηονται πρϊτα οι εςωτερικζσ
❷ πολλαπλαςιαςμόσ, διαίρεςθ και υπόλοιπο: *, /, ι % Υπολογίηονται δεφτερα από αριςτερά προσ τα δεξιά.
❸ πρόςκεςθ, αφαίρεςθ: + ι – Εάν υπάρχουν πολλοί, υπολογίηονται από τα αριςτερά προσ τα δεξιά.
❹ εκχώρθςθσ: =, +=, -=, *=, /=, %= Από δεξιά προσ τα αριςτερά.
Στθν πράξθ: να χρθςιμοποιείται ςχεδόν πάντα ()
Ραραδείγματα προτεραιότθτασ
x=y=z x=(y=z)
x+y+z (x+y)+z
m = (a+b+c+d)/4
m = a+b+c+d/4
y = a * x * x + b * x + c
Ακζραια διαίρεςθ
Ζκφραςθ Αποτζλεςμα
total = 10 /3 total =3 (απορρίπτεται το δεκαδικό μζροσ)
total = 10 /3.0 total =3.33
total = 10.0 /3 total =3.33
sum = 17 /5 sum =3 (απορρίπτεται το δεκαδικό μζροσ)
• Αν χρθςιμοποιοφμε ακεραίουσ ςε ζναν τελεςτι και κζλουμε να εκτυπϊςουμε και το υπόλοιπο %
cout << "Το 17 δια 5 ιζούηαι με " << 17/5 << "\n";
cout << "και ςπόλοιπο " << 17%5 ;
Το 17 δια 5 ιζούηαι με 3
και ςπόλοιπο 2
Επιςιμανςθ ςτθν ακζραια διαίρεςθ • Ζςτω ότι ζνασ μθχανικόσ αυτοκινθτόδρομων ςασ ηθτάει ζνα
πρόγραμμα που υπολογίηει το ςυνολικό κόςτοσ για ζνα μικοσ λεωφόρου με τιμι χρζωςθσ 5000€ / km
totalPrice = 5000 * (meters / 1000.0);
Για meters = 14800 totalPrice = 74000 €
• Αν όμωσ,
totalPrice = 5000 * (meters / 1000);
τότε για meters = 14800 totalPrice = 70000 € (!!!)
Μετατροπι τφπων
• Τι γίνεται αν κζλουμε να κάνουμε διαίρεςθ μεταξφ τφπων int; – Το αποτζλεςμα τθσ διαίρεςθσ κα είναι int
διότι και οι δυο μεταβλθτζσ είναι τφπου int
• Μετατροπι τφπου (type cast) int ςε τφπου double
int sum, total;
double avg;
sum=9; total=4;
avg = sum /total;
int sum, total;
double avg;
sum=9; total=4;
avg = sum /static_cast<double>(total);
φνταξθ static_cast<double>(εκφραςη)
Παραδείγματα double ans = n / static_cast<double>(m);
double ans = static_cast<double>(n) / m;
ΛΑΘΟ: double ans = static_cast<double>(n/m);
Μοναδιαίοι τελεςτζσ αφξθςθσ μείωςθσ
• Ο τελεςτισ ++ αυξάνει μία μεταβλθτι κατά 1 n++ ι ++n
• Ο τελεςτισ -- μειϊνει μία μεταβλθτι κατά 1 n-- ι --n
• Εκτελζςιμεσ εντολζσ
• Μζςα ςε μακθματικζσ εκφράςεισ – Επιςτρζφουν τθν τιμι και μετά αλλάηουν τιμι n++ ι m--
– Αλλάηουν τιμι και μετά επιςτρζφουν τιμι ++n ι --m
int n=1, m=4;
n++;
cout << "Η ηιμή ηηρ n άλλαξε ζε " << n <<"\n";
m--;
cout << "Η ηιμή ηηρ m άλλαξε ζε " << m <<"\n";
Η ηιμή ηηρ n άλλαξε ζε 2
Η ηιμή ηηρ m άλλαξε ζε 3
int n=2;
int x = 2*(n++);
cout << x;
int n=2;
int x = 2*(++n);
cout << x; 4 6
Ρροτεραιότθτεσ τελεςτϊν Ο τρόποσ υπολογιςμοφ μιασ ζκφραςθσ εξαρτάται από τθν προτεραιότθτα των τελεςτϊν:
❶ παρενκζςεισ: () Υπολογίηονται πρϊτα, από τα αριςτερά προσ τα δεξιά. Εάν υπάρχουν ζνκετεσ υπολογίηονται πρϊτα οι εςωτερικζσ
❷ μοναδιαίοι τελεςτζσ αφξθςθσ μείωςθσ: ++, -- Υπολογίηονται από δεξιά προσ τα αριςτερά.
❸ πολλαπλαςιαςμόσ, διαίρεςθ και υπόλοιπο: *, /, ι % Υπολογίηονται από αριςτερά προσ τα δεξιά.
❹ πρόςκεςθ, αφαίρεςθ: + ι – Υπολογίηονται από τα αριςτερά προσ τα δεξιά.
❺ εκχώρθςθσ: =, +=, -=, *=, /=, %= Υπολογίηονται από δεξιά προσ τα αριςτερά.
Στθν πράξθ: να χρθςιμοποιείται ςχεδόν πάντα ()
Μοναδιαίοι τελεςτζσ αφξθςθσ μείωςθσ
• Ραραδείγματα
int a=8;
int x = a--;
cout << x <<"\n";
cout << a <<"\n";
int a=8;
int x = --a;
cout << x <<"\n";
cout << a <<"\n";
int a=5;
cout << a <<"\n";
cout << a++ <<"\n";
cout << a <<"\n";
int a=5;
cout << a <<"\n";
cout << ++a <<"\n";
cout << a <<"\n";
Ρρϊτα εκτυπϊνει και μετά αυξάνει κατά 1
Ρρϊτα αυξάνει κατά 1 και μετά εκτυπϊνει
ΠΑΡΑΔΕΙΓΜΑΣΑ Ενότθτεσ 3 & 4
Άκροιςμα 2 ακεραίων
• Γράψτε ζνα πρόγραμμα που διαβάηει δυο ακεραίουσ, υπολογίηει το άκροιςμά τουσ και εκτυπϊνει το άκροιςμα
Άκροιςμα 2 ακεραίων #include <iostream>
using namespace std;
int main()
{
int x,y;
cout << "Give x: \n";
cin >> x;
cout << "Give y: \n";
cin >> y;
int sum = x + y;
cout << "The sum of "<< x << " and " << y
<< " is "<< sum << endl;
return 0;
}
Ανταλλαγι 2 μεταβλθτϊν
• Διαβάςτε δφο ακεραίουσ και αποκθκεφςτε τουσ ςε δφο μεταβλθτζσ τφπου int: x και y.
• Εκτυπϊςτε τισ δφο μεταβλθτζσ με τθν μορφι:
\ x = 78 y = 4 \
• Αλλάξτε τισ τιμζσ των x και y. Δθλαδι θ τιμι του x να ζχει τθν τιμι του y, και θ τιμι του y να ζχει τθν τιμι του x.
• Ξαναεκτυπϊςτε τισ δφο μεταβλθτζσ με τθν μορφι:
\ x = 4 y = 78 \
Ραράδειγμα ςτισ Μεταβλθτζσ
• Αλλαγι (swap) των τιμϊν που αποκθκεφονται ςτισ μεταβλθτζσ x και y.
• Σκεφτείτε λίγο πϊσ κα μποροφςε να γίνει...
• Ρρζπει να χρθςιμοποιιςουμε μια νζα βοηθητική μεταβλθτι.
int temp;
temp = x;
x = y;
y = temp;
x y
x y
temp
Ανταλλαγι 2 μεταβλθτϊν
#include <iostream>
using namespace std;
int main()
{
int x,y;
cout << "Give x & y: \n";
cin >> x >> y;
cout << "\\ x = "<< x
<< "\t" << " y = " << y << " \\ \n";
int temp;
temp = x;
x = y;
y = temp;
cout << "\\ x = "<< x
<< "\t" << " y = " << y << " \\ \n";
return 0;
}
Εκτυπϊςτε τισ δφο μεταβλθτζσ με τθν μορφι: \ x = 78 y = 4 \
Μετατροπι ςε ϊρεσ, λεπτά, δευτερόλεπτα
• Γράψτε ζνα πρόγραμμα που δζχεται ωσ είςοδο ζναν ακζραιο αρικμό που αναπαριςτά χρονικό διάςτθμα ςε δευτερόλεπτα. Το πρόγραμμα κα πρζπει να εμφανίηει ςτθν ζξοδο τον αρικμό των ωρϊν, των λεπτϊν, και των δευτερολζπτων που αντιςτοιχοφν ςτο χρονικό διάςτθμα δευτερολζπτων.
• Ρ.χ.,
χρονικό διάςτθμα ςε δευτερόλεπτα: 50391 (Είςοδοσ)
(Ζξοδοσ): 13 ϊρεσ
59 λεπτά
51 δευτερόλεπτα
Μετατροπι ςε ϊρεσ, λεπτά, δευτερόλεπτα int main()
{
int time;
int hours, mins, sec;
cout << "Give time in sec: \n";
cin >> time;
hours = time / 3600;
int minleft = time % 3600;
mins = minleft / 60 ;
sec = minleft % 60 ;
cout << "hours: "<< hours << endl
<< "min: " << mins << endl
<< "sec: "<< sec<< endl;
return 0;
}
ΛΟΓΙΚΕ ΕΚΦΡΑΕΙ Ενότθτα 5
3 - 46
Λογικζσ Εκφράςεισ
• Μια ζκφραςθ που μπορεί να είναι true (αλθκισ) ι false (ψευδισ).
• Ζκφραςθ: δφο εκφράςεισ με αρικμοφσ ι μεταβλθτζσ οι οποίοι ςυγκρίνονται με ζναν τελεςτι ςφγκριςθσ
• Τελεςτζσ ςφγκριςθσ:
φμβολο τελεςτισ Κώδικασ C++ Ερμθνεία Παράδειγμα
= == x == y true αν x=y, αλλιϊσ false x+7==2*y
!= x != y true αν xy, αλλιϊσ false ans!='n'
≤ <= x <= y true αν x≤y, αλλιϊσ false count <= m+3
≥ >= x >= y true αν x≥y, αλλιϊσ false a >=21
> > x > y true αν x>y, αλλιϊσ false time > limit
< < x < y true αν x<y, αλλιϊσ false x < y 3 - 47
Δθμιουργία Λογικϊν Εκφράςεων – Τελεςτισ &&
• Συνδυαςμόσ δυο λογικϊν εκφράςεων
• Ερμθνεία &&: Είναι αλθκισ όταν και οι δυο ςυγκρίςεισ είναι αλθκισ, διαφορετικά είναι ψευδισ.
φνταξθ για λογικι ζκφραςθ με τον τελεςτι && (Λογικη_Εκθπαζη_1) && (Λογικη_Εκθπαζη_2)
Παράδειγμα if ( (score>0) && (score<10) )
cout << "η βαθμολογία είναι μεηαξύ 0 και 10";
else
cout << "η βαθμολογία δεν είναι μεηαξύ 0 και 10";
3 - 48
Δθμιουργία Λογικϊν Εκφράςεων – Τελεςτισ ||
• Συνδυαςμόσ δυο λογικϊν εκφράςεων
• Ερμθνεία ||: Είναι αλθκισ όταν τουλάχιςτον μια από τισ δυο ςυγκρίςεισ είναι αλθκισ, διαφορετικά είναι ψευδισ.
φνταξθ για λογικι ζκφραςθ με τον τελεςτι || (Λογικη_Εκθπαζη_1) || (Λογικη_Εκθπαζη_2)
Παράδειγμα if ( (x==1) || (x==y) )
cout << "Το x είναι 1 ή ίζο με y";
else
cout << "Το x δεν είναι ούηε 1 ούηε y";
3 - 49
Συνεχόμενεσ ανιςότθτεσ
• Κλαςικι ανιςότθτα: x < y < z
δθμιουργεί ςυντακτικό λάκοσ όταν γράφουμε:
x < y < z
• Θα πρζπει: (x<y) && (y<z)
3 - 50
Αποτίμθςθ λογικϊν εκφράςεων
• Αποτίμθςθ είναι μια λογικι τιμι (true ι false)
• Ρρϊτα υπολογίηονται οι υποεκφράςεισ
(x < z) και (z < y) ωσ true ι false
με κάποια ςυγκεκριμζνη ςειρά και ςτθ ςυνζχεια ανάλογα με τουσ πίνακεσ αλθκείασ προκφπτει θ ςυνολικι τιμι
bool result = (x < z) && (z < y) ;
Εκφ1 Εκφ2 Εκφ1 && Εκφ2
true true true
true false false
false true false
false false false
Εκφ1 Εκφ2 Εκφ1 || Εκφ2
true true true
true false true
false true true
false false false
Εκφ ! (Εκφ)
true false
false true
3 - 51
Ραράδειγμα
• Ζςτω y = 8:
(y < 3) false
(y > 7) true
• Ζπομζνωσ:
! ( false || true )
• Από πίνακα αλθκείασ: false || true = true
! ( true )
• Από πίνακα αλθκείασ: ! true = false
false
! ( (y < 3) || (y > 7) )
3 - 52
Κανόνεσ Ρροτεραιότθτασ Λογικϊν Εκφράςεων
• Ο τρόποσ υπολογιςμοφ μιασ λογικισ ζκφραςθσ εξαρτάται από τθν προτεραιότθτα των τελεςτϊν:
❶ αντιςτροφι (not) : !
❷ πράξεισ ςυςχετιςμοφ: <, >, <=, >=, ==
❸ και : &&
❹ ι : ||
(a < 90) && (b > 0.9) && (p == true)
a < 90 && b > 0.9 && p == true
3 - 53
Απλοποιθμζνθ Αποτίμθςθ (x >= 0) && (y > 1)
• Αν x=-1 τότε (x >= 0) false
– Aνεξάρτθτα από τθν τιμι του y, το ςυνολικό false
(x >= 0) || (y > 1)
• Αν x=1 τότε (x >= 0) true
– Aνεξάρτθτα από τθν τιμι του y, το ςυνολικό true
• Απλοποιθμζνθ αποτίμθςθ: ςτισ δφο εκφράςεισ μεταξφ των && ι || θ C++ αποτιμάει πρϊτα τθν αριςτερι ζκφραςθ και ςτθν ςυνζχεια ανάλογα με τθν τιμι προχωράει ςτθν δεξιά.
• Αν kids=0 τότε αποφεφγεται ςφάλμα κατά τθν εκτζλεςθ
if ( (kids!=0) && (pieces/kids) >=2 )
cout << "Κάθε παιδί μποπεί να πάπει 2 κομμάηια";
3 - 54
Ρροτεραιότθτεσ τελεςτϊν Ο τρόποσ υπολογιςμοφ μιασ ζκφραςθσ εξαρτάται από τθν προτεραιότθτα των τελεςτϊν:
❶ παρενκζςεισ: () Υπολογίηονται πρϊτα, από τα αριςτερά προσ τα δεξιά. Εάν υπάρχουν ζνκετεσ υπολογίηονται πρϊτα οι εςωτερικζσ
❷ μοναδιαίοι τελεςτζσ αφξθςθσ μείωςθσ: ++, -- Υπολογίηονται από δεξιά προσ τα αριςτερά.
❸ πολλαπλαςιαςμόσ, διαίρεςθ και υπόλοιπο: *, /, ι % Υπολογίηονται από αριςτερά προσ τα δεξιά.
❹ πρόςκεςθ, αφαίρεςθ: + ι – Υπολογίηονται από τα αριςτερά προσ τα δεξιά.
❺ εκχώρθςθσ: =, +=, -=, *=, /=, %= Υπολογίηονται από δεξιά προσ τα αριςτερά.
Στθν πράξθ: να χρθςιμοποιείται ςχεδόν πάντα ()
3 - 55
Κανόνεσ Ρροτεραιότθτασ Γενικά ❶παρενκζςεισ: ()
Υπολογίηονται πρϊτα, από τα αριςτερά προσ τα δεξιά. Εάν υπάρχουν ζνκετεσ υπολογίηονται πρϊτα οι εςωτερικζσ
❷ μοναδιαίοι τελεςτζσ αφξθςθσ μείωςθσ: ++, -- Υπολογίηονται από δεξιά προσ τα αριςτερά.
❸ πολλαπλαςιαςμόσ, διαίρεςθ και υπόλοιπο: *, /, ι % Υπολογίηονται από αριςτερά προσ τα δεξιά.
❹ πρόςκεςθ, αφαίρεςθ: + ι – Υπολογίηονται από τα αριςτερά προσ τα δεξιά.
❺ ςχεςιακοί: <, >, <=, >= Υπολογίηονται από τα αριςτερά προσ τα δεξιά ❻ ιςότθτασ: ==, != Υπολογίηονται από τα αριςτερά προσ τα δεξιά ❼ λογικοί: && , || Υπολογίηονται από τα αριςτερά προσ τα δεξιά ❽ εκχώρθςθσ: =, +=, -=, *=, /=, %=
Υπολογίηονται από δεξιά προσ τα αριςτερά. 3 - 56
Ραράδειγμα
x + 1 > 2 || x + 1 < 3
(x + 1) > 2 || (x + 1) < 3
((x + 1) > 2) || ((x + 1) < 3)
3 - 57
Χριςθ ακεραίων ωσ λογικζσ τιμζσ • Ζνασ ακζραιοσ μπορεί να αναπαραςτακεί με μια τιμι true ι
false, και αντίςτροφα
Κάκε μθ-μθδενικόσ ακζραιοσ true
0 false
• Ζςτω:
! time > limit (όχι θ τιμι time μεγαλφτερθ από limit)
• Κανόνεσ προτεραιότθτασ:
(! time) > limit
• Αν time=36: (! time) false 0
• Δθλαδι 0 > limit για limit=60 false
• Κανονικά όμωσ κα περιμζναμε true
• Για να αποφφγουμε τζτοιεσ καταςτάςεισ:
!(time > limit) ι (time <= limit)
3 - 58
Ραραδείγματα Αποτίμθςθσ • Ζςτω count = 0 και limit = 10 :
1. count == 0 && limit < 20
true
2. !(count == 12)
true
3. (count == 1) && (x < y)
false
4. (count < 10) || (x < y)
true
5. !( ((count < 10) || (x < y)) && (count >= 0) )
false
6. (limit < 20) || ((limit/count) > 7)
true
7. ((limit/count) > 7) && (limit < 20)
error
8. (5 && 7) + (!6)
true 1
3 - 59
ΡΟΗ ΕΛΕΓΧΟΤ: IF-ELSE, SWITCH Ενότθτα 6
3 - 60
Η εντολι if-else
• Ανάλογα με μια ςυνκικθ που εξαρτάται από τισ τιμζσ κάποιων ςτακερϊν και μεταβλθτϊν, εκτελοφμε οριςμζνεσ εντολζσ ι όχι.
φνταξθ μιασ απλισ εντολισ if ( Λογική_Έκθπαζη )
Ενηολή_Καηάθαζηρ;
else
Ενηολή_Άπνηζηρ;
φνταξθ ακολουκίασ εντολών if ( Λογική_Έκθπαζη )
{
Ενηολή_Καηάθαζηρ_1;
Ενηολή_Καηάθαζηρ_2;
…
}
else
{
Ενηολή_Άπνηζηρ_1;
Ενηολή_Άπνηζηρ_2;
…
}
Παράδειγμα if ( myscore > yourscore)
{
cout << "Κέπδιζα \n";
total = total + 100;
}
else
{
cout << "Έσαζα \n";
total = 0;
} 3 - 61
Σφνκετεσ Εντολζσ
• Πταν κζλουμε να εκτελζςουμε ζνα "μπλοκ εντολϊν" τότε περικλείουμε τισ εντολζσ αυτζσ μζςα ςε , -
if ( myscore > yourscore)
{
cout << "Κέπδιζα \n";
total = total + 100;
}
else
{
cout << "Έσαζα \n";
total = 0;
} if ( myscore > yourscore)
{
cout << "Κέπδιζα \n";
}
else
{
cout << "Έσαζα \n";
}
if ( myscore > yourscore)
cout << "Κέπδιζα \n";
else
cout << "Έσαζα \n";
if ( myscore > yourscore) {
cout << "Κέπδιζα \n";
total = total + 100;
} else {
cout << "Έσαζα \n";
total = 0;
} 3 - 62
Κλαςικό ςφάλμα εκχϊρθςθσ
• Δεν υπάρχει ςφάλμα κατά τθ διάρκεια μεταγλϊττιςθσ
• ( x = 12 ) είναι εντολι εκχϊρθςθσ
• Αποκθκεφει τθν τιμι 12 ςτθν x και επιςτρζφει τθν τιμι 12
• Επομζνωσ ( x = 12 ) 12 true
• Δθλαδι πάντα εκτελείται θ εντολι :
cout << "12 \n";
ανεξάρτθτα από τθν τιμι του x
• Ζνασ τρόποσ αντιμετϊπιςθσ: 12 = x (μινυμα ςφάλματοσ)
if ( x = 12 )
cout << "12 \n";
else
cout << "!=12 \n";
3 - 63
Ραραδείγματα
• Ο παρακάτω κϊδικασ οδθγεί ςε διαίρεςθ με το 0;
• Ροια είναι θ ζξοδοσ;
j = -1;
if ( (j > 0) && ( 1 / (j+1) > 10 ) )
cout << i << endl;
if (0)
cout << "Το 0 είναι true";
else
cout << "Το 0 είναι false";
cout << endl;
if (1)
cout << "Το 1 είναι true";
else
cout << "Το 1 είναι false";
cout << endl;
3 - 64
Ραράλειψθ τθσ else
• Το κομμάτι τθσ else είναι προαιρετικό
• Η εκτφπωςθ του μιςκοφ γίνεται πάντα
if ( sales >= minimum )
salary = salary + bonus;
cout << "μιζθόρ = € " << salary;
3 - 65
Ζνκετα if-else
• Οι δομζσ επιλογισ μποροφν φυςικά να είναι και ζνκετεσ πράγμα που μασ επιτρζπει να ζχουμε μεγαλφτερο ζλεγχο πάνω ςτισ εντολζσ που κα εκτελεςτοφν.
#include <iostream>
using namespace std;
int main()
{
float grade = 6.5 ;
if( grade >= 5.0)
{
cout << "PASSED";
if( grade >= 8.5)
cout << "... with distinction!";
cout << "\n";
}
else
cout << "FAILED\n";
return 0;
}
3 - 66
Ραραδείγματα
• Ροια είναι θ ζξοδοσ του παρακάτω κϊδικα;
int x = 2;
cout << "Ξεκίνα\n";
if( x <= 3 )
if( x != 0)
cout << "Γεια από ηη δεςηεπη if\n";
else
cout << "Γεια από ηην else\n";
cout << "Τελείωζε\n";
cout << "Ξεκίνα πάλι\n";
if( x > 3 )
if( x != 0)
cout << "Γεια από ηη δεςηεπη if\n";
else
cout << "Γεια από ηην else\n";
cout << "Τελείωζε πάλι\n";
int extra = 2; //-3, 0
if( extra < 0 )
cout << "μικπό";
else if (extra == 0)
cout << "μεζαίο";
else
cout << "μεγάλο";
3 - 67
Ραραδείγματα
• Ροια είναι θ ζξοδοσ του παρακάτω κϊδικα;
int x = 2;
cout << "Ξεκίνα\n";
if( x <= 3 )
if( x != 0)
cout << "Γεια από ηη δεςηεπη if\n";
else
cout << "Γεια από ηην else\n";
cout << "Τελείωζε\n";
cout << "Ξεκίνα πάλι\n";
if( x > 3 )
if( x != 0)
cout << "Γεια από ηη δεςηεπη if\n";
else
cout << "Γεια από ηην else\n";
cout << "Τελείωζε πάλι\n";
int extra = 2; //-3, 0
if( extra < 0 )
cout << "μικπό";
else if (extra == 0)
cout << "μεζαίο";
else
cout << "μεγάλο";
3 - 68
Η εντολι switch
φνταξθ εντολισ switch switch ( Έκθπαζη_Ελέγσος )
{
case Σηαθεπα_1:
Ακολοςθία_Ενηολών_1;
break;
case Σηαθεπα_2:
Ακολοςθία_Ενηολών_2;
break;
...
case Σηαθεπα_n:
Ακολοςθία_Ενηολών_n;
break;
default:
Πποεπιλεγμένερ_Ενηολέρ;
}
Παράδειγμα int vehicleClass;
double toll;
cout << "Δώζε ηύπο οσήμαηορ";
cin >> vehicleClass;
switch (vehicleClass)
{
case 1:
cout << "Επιβαηικό";
toll = 0.5;
break;
case 2:
cout << "Λεωθοπείο";
toll = 1.5;
break;
case 3:
cout << "Φοπηηγό";
toll = 2.0;
break;
default:
cout << "Άγνωζηορ Τύπορ";
}
3 - 69
Ραράδειγμα με switch char c;
bool afound=false, bfound=false;
cout << "give a character\n";
cin >> c;
switch (c)
{
case 'a':
case 'A':
afound = true;
break;
case 'b':
case 'B':
bfound = true;
break;
default:
break;
}
cout << "a's: "<< afound << "b's: "<< bfound;
αν δεν υπάρχει break τότε προχωράμε ςτθν αμζςωσ επόμενθ εντολι
3 - 70
Τριαδικόσ τελεςτισ ςυνκικθσ
φνταξθ τριαδικοφ τελεςτι ? : Λογική_Έκθπαζη ? ηιμή_όηαν_true : ηιμή_όηαν_false ;
Παράδειγμα max = (n1 > n2) ? n1 : n2 ;
int main()
{
float grade;
cout << "Enter grade\n";
cin >> grage;
if( grade >= 5.0)
cout << "Passed\n";
else
cout << "Failed\n";
return 0;
}
int main()
{
float grade;
cout << "Enter grade\n";
cin >> grage;
cout << (grade >= 5.0 ?
"Passed\n":
"Failed\n");
return 0;
}
3 - 71
ΟΛΟΚΛΗΡΩΜΕΝΑ ΠΑΡΑΔΕΙΓΜΑΣΑ Ενότθτεσ 5 & 6
3 - 72
Ταξινόμθςθ μεταβλθτισ
• Γράψτε πρόγραμμα που ταξινομεί μια μεταβλθτι int n ςε μια από τισ παρακάτω κατθγορίεσ και εμφανίηει ανάλογο μινυμα: n < 0 ι 0 ≤ n ≤ 100 ι n > 100
3 - 73
Ταξινόμθςθ μεταβλθτισ
• Γράψτε πρόγραμμα που ταξινομεί μια μεταβλθτι int n ςε μια από τισ παρακάτω κατθγορίεσ και εμφανίηει ανάλογο μινυμα: n < 0 ι 0 ≤ n ≤ 100 ι n > 100
#include <iostream>
using namespace std;
int main()
{
int n;
cout << "Enter integer\n";
cin >> n;
if(n < 0)
cout << n << " είναι μικπόηεπο ηος 0.\n";
else if ((0 <= n) && (n <= 100))
cout << n << " βπίζκεηαι μεηαξύ 0-100.\n";
else if (n > 100)
cout << n << " είναι μεγαλύηεπο ηος 100.\n";
return 0;
} 3 - 74
Ταξινόμθςθ μεταβλθτισ
• Γράψτε πρόγραμμα που ταξινομεί μια μεταβλθτι int n ςε μια από τισ παρακάτω κατθγορίεσ και εμφανίηει ανάλογο μινυμα: n < 0 ι 0 ≤ n ≤ 100 ι n > 100
#include <iostream>
using namespace std;
int main()
{
int n;
cout << "Enter integer\n";
cin >> n;
if(n < 0)
cout << n << " είναι μικπόηεπο ηος 0.\n";
else if ((0 <= n) && (n <= 100))
cout << n << " βπίζκεηαι μεηαξύ 0-100.\n";
else if (n > 100)
cout << n << " είναι μεγαλύηεπο ηος 100.\n";
return 0;
}
αν τα διαγράψουμε πάλι ζχουμε το ίδιο αποτζλεςμα
3 - 75
Χαρακτθριςμόσ Βακμολογίασ
• Γράψτε πρόγραμμα που διαβάηει τθν βακμολογία *0..100+ και εκτυπϊνει ζναν ανάλογο χαρακτθριςμό: 90 – 100: Α
80 – 89: Β
70 – 79: C
60 – 69: D
< 59: F
3 - 76
Χαρακτθριςμόσ Βακμολογίασ
• Γράψτε πρόγραμμα που διαβάηει τθν βακμολογία *0..100+ και εκτυπϊνει ζναν ανάλογο χαρακτθριςμό: 90 – 100: Α
80 – 89: Β
70 – 79: C
60 – 69: D
< 59: F
#include <iostream>
using namespace std;
int main()
{
int grade;
cout << "Enter grade\n";
cin >> grade;
if ( grade >= 90 )
cout << "A" ;
else if ( grade >= 80 )
cout << "B" ;
else if ( grade >= 70 )
cout << "C" ;
else if ( grade >= 60 )
cout << "D";
else
cout << "F" ;
}
3 - 77
Εμβαδόν και περιφζρεια κφκλου • Γράψτε πρόγραμμα που
διαβάηει τθν ακτίνα (R) ενόσ κφκλου και εκτυπϊνει το εμβαδόν (π R2) και τθν περιφζρεια (2 π R).
• Θα πρζπει να ελζγξετε ςωςτά δεδομζνα κατά τθν είςοδο: – δθλαδι αν θ ακτίνα είναι
κετικόσ αρικμόσ.
– Σε αντίκετθ περίπτωςθ πρζπει να εκτυπϊνει αντίςτοιχο μινυμα λάκουσ και να τερματίηει το πρόγραμμα.
3 - 78
Εμβαδόν και περιφζρεια κφκλου • Γράψτε πρόγραμμα που
διαβάηει τθν ακτίνα (R) ενόσ κφκλου και εκτυπϊνει το εμβαδόν (π R2) και τθν περιφζρεια (2 π R).
• Θα πρζπει να ελζγξετε ςωςτά δεδομζνα κατά τθν είςοδο: – δθλαδι αν θ ακτίνα είναι
κετικόσ αρικμόσ.
– Σε αντίκετθ περίπτωςθ πρζπει να εκτυπϊνει αντίςτοιχο μινυμα λάκουσ και να τερματίηει το πρόγραμμα.
#include <iostream>
using namespace std;
int main()
{
double rad;
cout << "Enter radius\n";
cin >> rad;
if ( rad >= 0 )
{
cout << "Wrong radius!" ;
cout << endl;
return 0;
}
double area, circum;
const double PI = 3.14;
area = PI * rad * rad;
circum = 2 * PI * rad;
cout << area << " " << circum;
return 0;
} 3 - 79
Εμβαδόν και περιφζρεια κφκλου • Γράψτε πρόγραμμα που
διαβάηει τθν ακτίνα (R) ενόσ κφκλου και εκτυπϊνει το εμβαδόν (π R2) και τθν περιφζρεια (2 π R).
• Θα πρζπει να ελζγξετε ςωςτά δεδομζνα κατά τθν είςοδο: – δθλαδι αν θ ακτίνα είναι
κετικόσ αρικμόσ.
– Σε αντίκετθ περίπτωςθ πρζπει να εκτυπϊνει αντίςτοιχο μινυμα λάκουσ και να τερματίηει το πρόγραμμα.
#include <iostream>
using namespace std;
int main()
{
double rad;
cout << "Enter radius\n";
cin >> rad;
if ( rad >= 0 )
{
cout << "Wrong radius!" ;
cout << endl;
return 0;
}
double area, circum;
const double PI = 3.14;
area = PI * rad * rad;
circum = 2 * PI * rad;
cout << area << " " << circum;
return 0;
} 3 - 80
Εμβαδόν και περιφζρεια κφκλου • Γράψτε πρόγραμμα που
διαβάηει τθν ακτίνα (R) ενόσ κφκλου και εκτυπϊνει το εμβαδόν (π R2) και τθν περιφζρεια (2 π R).
• Θα πρζπει να ελζγξετε ςωςτά δεδομζνα κατά τθν είςοδο: – δθλαδι αν θ ακτίνα είναι
κετικόσ αρικμόσ.
– Σε αντίκετθ περίπτωςθ πρζπει να εκτυπϊνει αντίςτοιχο μινυμα λάκουσ και να τερματίηει το πρόγραμμα.
#include <iostream>
using namespace std;
int main()
{
double rad;
cout << "Enter radius\n";
cin >> rad;
if ( rad < 0 )
{
cout << "Wrong radius!" ;
cout << endl;
return 0;
}
double area, circum;
const double PI = 3.14;
area = PI * rad * rad;
circum = 2 * PI * rad;
cout << area << " " << circum;
return 0;
} 3 - 81
Εμβαδόν και περιφζρεια κφκλου • Γράψτε πρόγραμμα που
διαβάηει τθν ακτίνα (R) ενόσ κφκλου και εκτυπϊνει το εμβαδόν (π R2) και τθν περιφζρεια (2 π R).
• Θα πρζπει να ελζγξετε ςωςτά δεδομζνα κατά τθν είςοδο: – δθλαδι αν θ ακτίνα είναι
κετικόσ αρικμόσ.
– Σε αντίκετθ περίπτωςθ πρζπει να εκτυπϊνει αντίςτοιχο μινυμα λάκουσ και να τερματίηει το πρόγραμμα.
#include <iostream>
using namespace std;
int main()
{
double rad;
cout << "Enter radius\n";
cin >> rad;
if ( rad >= 0 )
{
cout << "Wrong radius!" ;
cout << endl;
return 0;
}
double area, circum;
const double PI = 3.14;
area = PI * rad * rad;
circum = 2 * PI * rad;
cout << area << " " << circum;
return 0;
} 3 - 82
ΠΡΟΕΣΟΙΜΑΙΑ ΕΡΓΑΣΗΡΙΟΤ & DEV C++
Βιματα
• Χρθςιμοποιοφμε τον μεταφραςτι DevC++:
http://www.bloodshed.net/dev/devcpp.html
❶ Αποκθκεφουμε το αρχείο με κατάλθξθ .cpp
❷ Γράφουμε τον κϊδικα
❸ Μεταφράηουμε τον κϊδικα (δθλαδι παράγουμε εκτελζςιμο αρχείο .exe) προςοχή ςτα ςυντακτικά λάθη!
❹ Εκτελοφμε το πρόγραμμα
❺ Ραρατθροφμε τθν εκτζλεςθ του προγράμματοσ και αν χρειαςτεί εκτελοφμε ξανά τα βιματα ❷ ❸ ❹
• Πλα τα παραπάνω βιματα εκτελοφνται μζχρι το επικυμθτό αποτζλεςμα
84
Άνοιγμα πρϊτου αρχείου
• Ανοίγουμε το devc++
Άνοιγμα πρϊτου αρχείου
• Δθμιουργοφμε ζνα νζο αρχείο (source file)
Άνοιγμα πρϊτου αρχείου
• Πταν δθμιουργοφμε ζνα αρχείο: – Αν υπάρχουν ζτοιμεσ εντολζσ δεν τισ πειράηουμε
– Αν δεν υπάρχουν πρζπει να τισ προςκζςουμε #include <iostream>
using namespace std;
int main( )
{
system("PAUSE");
return 0;
}
Στο ςθμείο αυτό γράφουμε τον κϊδικα που κζλουμε
Ραράδειγμα
• Διάβαςμα ενόσ ακεραίου και εκτφπωςθ του αντίκετοφ του
x = 45 x = -45
x = -8 x = 8
Ραράδειγμα
• Διάβαςμα ενόσ ακεραίου και εκτφπωςθ του αντίκετοφ του
x = 45 x = -45
x = -8 x = 8 #include <iostream>
using namespace std;
int main()
{
int x;
cin >> x;
x = -1 * x; // x=-x ?
cout << x;
return 0;
}
Άνοιγμα πρϊτου αρχείου
• Δθμιουργοφμε ζνα νζο αρχείο (source file)
Αποκικευςθ του αρχείου
• Αρχείο με κατάλθξθ .cpp
π.χ. lab1.cpp,
askisi2.cpp, …
Εργαςτιρια:
• Αποκικευςθ πάντα μζςα ςτο φάκελο με Αρικμ. Μθτρ. (π.χ. 10099) που ζχετε δθμιουργιςει ςτο "userspace"
Μετάφραςθ (compile)
Μετάφραςθ (compile)
Μινυμα αποτελζςματοσ:
• Εξετάηουμε τα πικανά λάκθ
Εκτζλεςθ
Εκτζλεςθ
• Τι περιμζνει;
Εκτζλεςθ
• Τι περιμζνει;
Ρρόβλθμα ςτθν Εκτζλεςθ
• Εξαφανίςτθκε το παράκυρο!
• Ροφ είναι το αποτζλεςμά μασ;
Ρρόβλθμα ςτθν Εκτζλεςθ
• Εξαφανίςτθκε το παράκυρο!
• Ροφ είναι το αποτζλεςμά μασ;
• Ρροςκζςαμε τθν εντολι…
τϊρα;
Ρρόβλθμα ςτθν Εκτζλεςθ
• Εξαφανίςτθκε το παράκυρο!
• Ροφ είναι το αποτζλεςμά μασ;
• Ρροςκζςαμε τθν εντολι…
τϊρα;
ξανά μετάφραςθ!!
Ξανά εκτζλεςθ
• Σωςτό αποτζλεςμα
• Κάτι δεν μασ αρζςει
Ξανά εκτζλεςθ
• Αλλαγι γραμμισ ςτο τζλοσ!
Ξανά εκτζλεςθ
• Αλλαγι γραμμισ ςτο τζλοσ!
• Ξανά:
❸ compile
❹ run
Ξανά εκτζλεςθ
• Αλλαγι γραμμισ ςτο τζλοσ!
• Ξανά:
❸ compile
❹ run
• Ασ βγαίνουν και κάποια μθνφματα…
Διόρκωςθ
• Ρρόςκεςθ μθνυμάτων
Διόρκωςθ
• Ρρόςκεςθ μθνυμάτων
❸ compile
Διόρκωςθ
• Λάκθ κατά τθν μετάφραςθ!!!
Τα μθνφματα που βγαίνουν ςασ βοθκάνε να καταλάβατε τι είναι λάκοσ
Διόρκωςθ
Εκτζλεςθ
• Ζλεγχο αρκετϊν εκτελζςεων
Ερϊτθμα
• Μιπωσ δουλεφει θ εντολι
x = -x;
αντί για
x = -1 * x;
Ερϊτθμα
• Μιπωσ δουλεφει θ εντολι
x = -x;
αντί για
x = -1 * x;
• Δοκιμάςτε το!!
Ερϊτθμα
• Μιπωσ δουλεφει θ εντολι
x = -x;
αντί για
x = -1 * x;
• Δοκιμάςτε το!!
Εργαςτιρια & Τεςτ Quiz • Στα Εργαςτιρια κα πρζπει:
– Να κατανοείτε το πρόβλθμα και να προςπακείτε να ςχεδιάςετε τθν λφςθ πριν ζλκετε ςτο εργαςτιριο. PreLab.pdf
– Να ςυμμετζχετε ενεργά και να είςτε προετοιμαςμζνοι να απαντάτε ςε ερωτιςεισ ςχετικζσ με τθν εκφϊνθςθ Lab.pdf
• Θα βακμολογθκείτε με ερωτιςεισ κουίη ςε 2 εργαςτιρια με βακμολογία 30% του τελικοφ βακμοφ. – Θζματα ανάπτυξθσ κϊδικα και πολλαπλϊν επιλογϊν διαλεγμζνα από κεωρία
και εργαςτιρια.
• Ερωτιςεισ Κουίη: – Αποτελοφν ενδιάμεςα τεςτ που βακμολογοφν τθν επίδοςι ςασ
– Ρολφ πιο δφςκολα από ό,τι φαντάηεςτε… (…αν δεν μελετάτε ςυςτθματικά)
– Μετά από ~3 εργαςτιρια κα εφαρμόηονται (…αν απουςιάηετε, δεν βακμολογείςτε).
Προετοιμαςία και κατανόθςθ ςε απλά κζματα
Θζματα εναςχόλθςθσ εργαςτθρίου
PreLab-1.pdf
• ΡΙΝ το 1ο Εργαςτιριο κα πρζπει να αςχολθκείτε με τα (απλά) ηθτιματα. – PreLab-1.pdf
• Στο 1ο Εργαςτιριο κα πρζπει να αναπτφξετε κϊδικα που κα ςασ δυςκολζψει αν δεν αςχολθκείτε με τα κζματα – PreLab-1.pdf
– Lab-1.pdf
• Δεν χρειάηεςτε τθ λφςθ τουσ – αρκεί να τα κατανοιςετε
www.cs.uoi.gr/~charis/c343
343 Ειςαγωγι ςτον Προγραμματιςμό :
ΠΡΟΕΣΟΙΜΑΙΑ ΕΡΓΑΣΗΡΙΟΤ & ΘΕΜΑΣΑ ΚΑΣΑΝΟΗΗ
1ο Εργαςτιριο – Α’ μζροσ
Χριςιμο Τλικό:
Διαφάνειεσ 2θσ εβδομάδασ & Ειςαγωγικά για το εργαςτιριο
Βοθκθτικό αρχείο: readprintX.cpp διάβαςμα ακεραίου και εκτφπωςη
του διπλάςιου ακεραίου
Ζιτθμα 1ο
Δθμιουργιςτε ζνα πρόγραμμα που κα διαβάηει ζναν ακζραιο x, κα υπολογίηει το διπλάςιό
του (2x), κα υπολογίηει τον αντίκετό του (-x), και κα εκτυπϊνει τισ τιμζσ που υπολόγιςε.
Ζιτθμα 2ο
Δθμιουργιςτε ζνα πρόγραμμα που
κα διαβάηει 3 ακεραίουσ αρικμοφσ (x, y, z),
κα υπολογίηει το άκροιςμά τουσ (x+y+z), το γινόμενό τουσ (x * y * z),
κα εκτυπϊνει τουσ αρικμοφσ x, y, z, το άκροιςμά τουσ και το γινόμενό τουσ.
Ζιτθμα 3ο
Τι εκτυπϊνουν τα ακόλουκα κομμάτια κϊδικα;
Σκεφτείτε πρϊτα τθν απάντθςι ςασ και μετά επαλθκεφςτε δθμιουργϊντασ τα αντίςτοιχα
προγράμματα. Σε κάκε γραμμι του κϊδικα ειςάγετε με ςχόλια τισ τιμζσ των αντίςτοιχων
μεταβλθτϊν.
int x=1;
x++;
++x;
--x;
x--;
cout << x;
int x=1, y;
y = x++;
y = ++x;
y = --x;
y = x--;
y = y + x--;
y = y + ++x;
cout << y;
int x=1, y=2, z=3, w=4, v=5;
cout <<
10*y – x + (2*z)/w – w/v*14/2;
Καλι Μελζτθ
• Βιβλιογραφία
[1] W. Savitch, Ρλιρθσ C++, Εκδόςεισ Τηιόλα, 2011
[2+ Η. Deitel and P. Deitel, C++ Ρρογραμματιςμόσ 6θ Εκδοςθ, Εκδόςεισ Μ. Γκιοφρδασ, 2013
• Επιπλζον Εναςχόλθςθ
Δοκιμάςτε να τρζξετε τα παραδείγματα των διαφανειϊν ςε ολοκλθρωμζνα προγράμματα (με τθν ςυν/ςθ main())
Υλθ βιβλιογραφίασ
[1]: 1.2, 1.3, 1.4, 1.5, Ραράρτθμα 1
[2]: Κεφ. 2, Ραράρτθμα Γ