Αλγοριθμικές Δομές Επιλογής και Επανάληψης Συνθήκες, Λογικές Εκφράσεις και Βρόγχοι

Σχετικά έγγραφα
οµές Επιλογής Εντολές if και switch

Επανάληψη. Εντολές while, for, do-while

Δομές ελέγχου ροής προγράμματος

Στόχοι και αντικείμενο ενότητας. Βασικές κατασκευές ΓΠ. Έλεγχος ροής προγράμματος. #4.. Εντολές Επιλογής

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

Στόχοι και αντικείμενο ενότητας. Προτάσεις επανάληψης. Έλεγχος ροής προγράμματος. #5.. Εντολές Επανάληψης

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

Προγραμματισμός Η/Υ. Ενότητα 4: Εντολές Επιλογής

Προγραμματισμό για ΗΜΥ

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

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

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

Ενσωματωμένοι Τύποι Δεδομένων. ΕΠΛ131 Ενότητα III

Είδη εντολών. Απλές εντολές. Εντολές ελέγχου. Εκτελούν κάποια ενέργεια. Ορίζουν τον τρόπο με τον οποίο εκτελούνται άλλες εντολές

Υπολογισμός - Εντολές Επανάληψης

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

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

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8)

3. Εκφράσεις και έλεγχος ροής

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 8/11/07

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Προγραμματισμός Η/Υ. Ενότητα 5: Εντολές Επανάληψης

Δομές ελέγχου & επανάληψης

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

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

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

Κεφάλαιο : Επαναλήψεις (o βρόγχος While) (Διάλεξη 9) Δομές Έλεγχου Προγράμματος

Εντολές επιλογής Επαναλήψεις (if, switch, while)

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

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 29/11/07

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

ΕΠΛ131 Αρχές Προγραμματισμού

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

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

Οι εντολές ελέγχου της ροής ενός προγράμματος.

ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

ΕΝΟΤΗΤΑ 4 Λήψη Αποφάσεων και Συναρτήσεις Ελέγχου

Δοκιμή και Αποσφαλμάτωση Testing and Debugging

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

Κεφάλαιο : Επαναλήψεις (oι βρόχος While) ( ιάλεξη 9) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Δομημένος Προγραμματισμός

Ο πιο κάτω πίνακας περιγράφει σε ποιες περιπτώσεις χρησιμοποιούμε τους τρεις πιο πάνω τρόπους:

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Εντολές Ελέγχου & Επανάληψης

Εντολές ελέγχου ροής if, for, while, do-while

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 18/3/2008

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

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

Αντικειμενοστραφής Προγραμματισμός

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

Αντικειμενοστρεφής Προγραμματισμός

Βασικάχαρακτηριστικάτηςγλώσσας. Πίνακες, Έλεγχος Ροής και Βρόχοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 3 η : Επίλυση Προβληµάτων Χειµερινό Εξάµηνο 2011

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

Προγραμματισμός Ι (HY120)

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07

Υπολογισμός - Εντολές Ελέγχου

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

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

Θέματα Προγραμματισμού Η/Υ

Διάλεξη 5η: Εντολές Επανάληψης

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

9. Εντολές επανάληψηςκαι η εντολή

Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις. Επανάληψη για την ενδιάμεση εξέταση. (Διάλεξη 13)

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

Εισαγωγή στη Matlab 2 Εισαγωγή στην Αριθμητική Ανάλυση Διδάσκων: Γεώργιος Ακρίβης Βοηθός: Δημήτριος Ζαβαντής

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

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

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

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

Προγραμματισμός Ι. Θεματική ενότητα 3: Tελεστές. εκφράσεις

8. Συνθήκες ελέγχου, λογικοί τελεστές

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

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

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 2: Βασικές εντολές

CSD Univ. of Crete Φθινόπωρο Άσκηση 1 Εκφώνηση

Προγραμματισμός Ι. Θεματική ενότητα 4: Έλεγχος ροής Προτάσεις υπό συνθήκη διακλάδωσης

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

Κεφάλαιο : Επαναλήψεις (oι βρόγχοιfor, do-while) (Διάλεξη 10) Εντολές Επανάληψης που θα καλυφθούν σήμερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

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

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

Transcript:

Αλγοριθμικές Δομές Επιλογής και Επανάληψης Συνθήκες, Λογικές Εκφράσεις και Βρόγχοι IV-1

Δομή Ελέγχου Control Structure Ένας συνδυασμός ατομικών εντολών σε μία ενιαία λογική ενότητα, όπου υπάρχει ένα μοναδικό σημείο εισόδου και ένα μοναδικό σημείο εξόδου Δομή Ελέγχου για Επιλογή Selection Control Structure Μία δομή ελέγχου η οποία επιλέγει ανάμεσα σε εναλλακτικές εντολές, απλές ή σύνθετες Μία σύνθετη εντολή είναι μία ακολουθία εντολών, η οποία εκφράζεται ως { εντολή 1 ; εντολή 2 ;.... εντολή n ; } IV-2

εντολή 1 εντολή 2 εντολή 3 εντολή 4 true εντολή 1 συνθήκη 1 false συνθήκη 2 true εντολή 2 false εντολή 3 ακολουθιακή ροή ελέγχου ροή ελέγχου με συνθήκες και βρόγχους IV-3

Συνθήκη Condition Μία έκφραση η οποία είναι είτε αληθής (true) είτε ψευδής (false) Δηλαδή μία λογική έκφραση Προσοχή: Δοκιμή για ισότητα ανάμεσα σε πραγματικούς αριθμούς 1.29999 == 1.2999? false Math.abs(1.29999 1.2999) < 0.0001 true IV-4

Λογικές Εκφράσεις Logical Expressions Εκφράσεις αποτελούμενες από λογικές τιμές και λογικούς τελεστές Αποτιμούνται σε λογικές τιμές <λογική_τιμή> ::= true false <λογική_έκφραση> ::= <λογική_τιμή> <σχεσιακή_έκφραση> (<λογική_έκφραση>)!<λογική_έκφραση> <λογική_έκφραση> && <λογική_έκφραση> <λογική_έκφραση> <λογική_έκφραση> IV-5

Αποτίμηση Λογικών Εκφράσεων Η αποτίμηση αρχίζει από τα αριστερά και προχωρεί μέχρι το σημείο που χρειάζεται να προχωρήσει (short-circuit evaluation), π.χ. false && Ε false η αποτίμηση της έκφρασης Ε δεν χρειάζεται true Ε true η αποτίμηση της έκφρασης Ε δεν χρειάζεται IV-6

Σειρά Συνθηκών σε μία Λογική Έκφραση Ο κανόνας αποτίμησης είναι κυρίως για λόγους αποδοτικότητας Έχει όμως και μεγάλη χρησιμότητα αναφορικά με τη σειρά των συνθηκών σε μία λογική έκφραση, π.χ. (y % x) > 2 && x!= 0 Εάν το x ισούται με 0, η αποτίμηση της πιο πάνω έκφρασης οδηγεί σε λάθος. Όμως η ακόλουθη διατύπωση x!= 0 && (y % x) > 2 δεν έχει πρόβλημα λόγω του κανόνα αποτίμησης: Εάν το x ισούται με 0 η συνθήκη (y % x) > 2 δεν αποτιμάται Εάν το x δεν ισούται με 0, η αποτίμηση της έκφρασης (y % x) > 2 δεν δημιουργεί πρόβλημα IV-7

Σειρά Συνθηκών σε μία Λογική Έκφραση Γενικά σε μία σύζευξη, Ε 1 && Ε 2, η συνθήκη Ε 1 πρέπει να αποτελεί τον αριστερό τελεστέο, εάν στην περίπτωση που αποτιμάται σε false, τυχόν αποτίμηση της Ε 2 θα οδηγήσει σε πρόβλημα. Με αυτή την σειρά αποτρέπεται η αποτίμηση της Ε 2. Παρομοίως σε μία διάζευξη, Ε 1 Ε 2, η συνθήκη Ε 1 πρέπει να αποτελεί τον αριστερό τελεστέο, εάν στην περίπτωση που αποτιμάται σε true, τυχόν αποτίμηση της Ε 2 θα οδηγήσει σε πρόβλημα. Με αυτή τη σειρά αποτρέπεται η αποτίμηση της Ε 2. IV-8

Εκμετάλλευση Κανόνα Αποτίμησης Συνθηκών για σκοπούς Αποδοτικότητας Ακόμη και σε περιπτώσεις όπου η σειρά των συνθηκών σε μία σύζευξη/διάζευξη θα μπορούσε να είναι οποιαδήποτε, ενδείκνυται να γίνεται εκμετάλλευση του κανόνα αποτίμησης προς μείωση του υπολογιστικού κόστους. Π.χ. έστω η σύζευξη (Ε 1 && Ε 2 ) όπου το κόστος υπολογισμού (αποτίμησης) της Ε 1 είναι πολύ μεγάλο, ενώ της Ε 2 είναι σχετικά πολύ μικρό. Έστω ότι η Ε 1 αποτιμάται σε true και η Ε 2 σε false. Η πιο πάνω σειρά των συνθηκών δεν αποφεύγει το μεγάλο κόστος αποτίμησης της Ε 1. Όμως η σειρά Ε 2 && Ε 1 το αποφεύγει. Επομένως η ορθή πρακτική είναι να μπαίνει στα αριστερά η συνθήκη, της οποίας η αποτίμηση συνεπάγεται το λιγότερο κόστος IV-9

Προτεραιότητες κλήσεις μεθόδων υψηλότερη προτεραιότητα! + & * (μοναδιαίοι τελεστές) * / % + < <= >= > ==!= && = χαμηλότερη προτεραιότητα IV-10

Σύγκριση Χαρακτήρων Οι σχεσιακοί τελεστές μπορούν να εφαρμοστούν σε χαρακτήρες έκφραση 9 >= 0 a < e B <= A Z == z a <= A τιμή true true false false false IV-11

boolean even, odd; even = (n % 2 == 0); ή even = n % 2 == 0; odd =!even; Ανάθεση Λογικών Τιμών boolean is_lower, is_upper, is_letter, white_space; char ch =! ; is_lower = a <= ch && ch <= z ; is_upper = A <= ch && ch <= Z ; is_letter = is_lower is_upper; white_space = ch == \n ch == ch == \t ; IV-12

Συμπλήρωμα Συνθηκών Complementing Conditions Το συμπλήρωμα μίας συνθήκης είναι η άρνησή της, π.χ. Συνθήκη Συμπλήρωμα true false false true item == SENT!(item == SENT) ή item!= SENT item > SENT item <= SENT (n % 2) == 0 (n % 2)!= 0 IV-13

Κανόνες DeMorgan!(E 1 && E 2 )!E 1!E 2!(E 1 E 2 )!E 1 &&!E 2 Απόδειξη Ε 1 Ε 2 &&!!Ε 1!Ε 2 T T T F F F F T F F T F T T F T F T T F T F F F T T T T Ε 1 Ε 2!!Ε 1!Ε 2 && T T T F F F F T F T F F T F F T T F T F F F F F T T T T IV-14

Παραδείγματα!(year % 4 == 0 && (year % 100!= 0 year % 400 == 0))!(year % 4 == 0)!(year % 100!=0 year % 400 == 0) year % 4!= 0 &&!(year % 100!= 0) &&!(year % 400 == 0) year % 4!= 0 && year % 100 == 0 && year % 400!= 0!(age > 25 && (status == S status == D ))!(age > 25)!(status == S status == D ) age <= 25 (status!= S && status!= D ) IV-15

Εντολή if if (συνθήκη) εντολή if (C) S C? όχι ναι S if ( i == 1) N = N/10; if ( i == 1) { D = N % 10; N = N / 10; } IV-16

if (συνθήκη) εντολή 1 else εντολή 2 if (C) S 1 else S 2 όχι C? ναι S 2 S 1 IV-17

if (x == 0) D = 0; else D = D / x; if (x > 0.0) {y = Math.sqrt(x); z = Math.sqrt(y);} else { y = 0.0; z = 0.0; } if (x == 0); /* do nothing */ else y = 1/x; if (x!= 0) y = 1/x; if (x > 5) y = x * 2; else ; /* do nothing */ if (x > 5) y = x * 2; Γενικά if (C); /* do nothing */ else S if (!C) S Χρησιμοποιείται εάν είναι πιο φυσικό να εκφραστεί η συνθήκη C παρά η άρνησή της if (C) S else; /* do nothing */ if (C) S Δεν έχει νόημα να υπάρχει κενό else IV-18

Φώλιασμα Επιλογών - Nesting IV-19

Φώλιασμα Επιλογών if (x > y) if (x > z) res = x; else res = z; else if (y > z) res = y; else res = z; Τί σημαίνει το πιο πάνω φώλιασμα επιλογών; IV-20

όχι x > y ναι όχι y > z ναι όχι x > z ναι res = z res = y res = z res = x IV-21

Γενικά ναι C 4 ναι S 1 ναι C 2 όχι ναι S 2 S 3 όχι C 5 C 1 ναι C 6 όχι ναι S 4 S 5 όχι S 6 όχι C 3 ναι S 7 όχι C 7 όχι S 8 ΕΠΛ131 Ενότητα V Περίπλοκη λογική που κάνει τον κώδικα δυσανάγνωστο IV-22

if (C 1 ) if (C 2 ) if (C 4 ) S 1 else S 2 else if (C 5 ) S 3 else S 4 else if (C 3 ) if (C 6 ) S 5 else S 6 else if (C 7 ) S 7 else S 8 if (C 1 && C 2 && C 4 ) S 1 else if (C 1 && C 2 &&!C 4 ) S 2 else if (C 1 &&!C 2 && C 5 ) S 3 else if (C 1 &&!C 2 &&!C 5 ) S 4 else if (!C 1 && C 3 && C 6 ) S 5 else if (!C 1 && C 3 &&!C 6 ) S 6 else if (!C 1 &&!C 3 && C 7 ) S 7 else if (!C 1 &&!C 3 &&!C 7 ) S 8 Πιο διαφανής λογική Όμως η κάθε συνθήκη αποτιμάται πολλαπλάσιο αριθμό φορών IV-23

Επαναφορά στο Παράδειγμα Κατά πόσο δεδομένος χρόνος είναι δίσεχτος ή όχι if (year % 4 == 0) if (year % 100 == 0) if (year % 400 == 0) isleapyear = true; else isleapyear = false; else isleapyear = true; else isleapyear = false; IV-24

Επαναφορά στο Παράδειγμα Κατά πόσο δεδομένος χρόνος είναι δίσεχτος ή όχι if (year % 4 == 0) if (year % 100 == 0) if (year % 400 == 0) isleapyear = true; else isleapyear = false; else isleapyear = true; else isleapyear = false; IV-25

Επαναφορά στο Παράδειγμα Κατά πόσο δεδομένος χρόνος είναι δίσεχτος ή όχι if (year % 4 == 0) if (year % 100 == 0) if (year % 400 == 0) isleapyear = true; else isleapyear = false; else isleapyear = true; else isleapyear = false; IV-26

όχι year % 4 == 0 ναι isleapyear = false όχι year % 100 == 0 ναι isleapyear = true όχι year % 400 == 0 ναι isleapyear = false isleapyear = true IV-27

if (year % 4 == 0 && year % 100 == 0 && year % 400 == 0) isleapyear = true; else if (year % 4 == 0 && year % 100 == 0 && year % 400!= 0) isleapyear = false; else if (year % 4 == 0 && year % 100!= 0) isleapyear = true; else if( year % 4!= 0) isleapyear = false; Διακλάδωση μόνο στη κατεύθυνση του όχι Ο πιο συνηθισμένος τρόπος φωλιάσματος επιλογών, απλά επειδή αποτελεί τον πιο φυσικό τρόπο έκφρασης, είναι όταν η διακλάδωση γίνεται μόνο στην κατεύθυνση του όχι. Έτσι υπάρχει μία αλυσίδα επιλογών. IV-28

C 1 ναι S 1 όχι C 2 ναι S 2 όχι όχι C n- 1 όχι S n ναι S n-1 if (C 1 ) S 1 else if (C 2 ) S 2 else if (C 3 ) S 3...... else if (C n-1 ) S n-1 else S n IV-29

Παραδείγματα if (x > z && x > y) res = x; else if (y > x && y > z) res = y; else res = z; if (year % 4 == 0 && year % 100!= 0) isleapyear = true; else if (year % 4 == 0 && year % 100 == 0 && year % 400 == 0) isleapyear = true; else isleapyear = false; if (weighted_aver >= 8.5) System.out.printnl( Excellent ); else if (weighted_aver < 8.5 && weighted_aver >= 6.5) System.out.printnl( Very Good ); else if (weighted_aver < 6.5 && weighted_aver > 5.0) System.out.printnl( Good ); else System.out.println( Failure ); IV-30

Επιλογές με πλήρη κάλυψη ενδεχομένων και ασαφείς επιλογές ναι C 1 P 1 όχι If (C 1 ) P 1 else if (C 2 ) P 2. else if (C n ) P n όχι ναι C 2 P 2 όχι C n ναι P n όχι IV-31

Επιλογές με πλήρη κάλυψη ενδεχομένων Εάν C 1 ή C 2 ή ή C n true τότε η εντολή επιλογής καλύπτει πλήρως όλα τα ενδεχόμενα διότι σε κάθε περίπτωση τουλάχιστο μία από τις συνθήκες πρέπει να είναι αληθής Εάν C 1 ή C 2 ή ή C n Φ τότε σε κάθε περίπτωση που η φόρμουλα Φ είναι αληθής, το ίδιο ισχύει και για μία από τις συνθήκες της εντολής με άλλα λόγια η εντολή καλύπτει όλα τα ενδεχόμενα για τα οποία η Φ είναι αληθής IV-32

Ασαφείς επιλογές Προκύπτουν σε μία δομή επιλογής εάν κάποια ενδεχόμενα μπορεί να ενταχθούν, με τυχαίο τρόπο, κάτω από διαφορετικές συνθήκες Το κλασσικό παράδειγμα είναι η εκτύπωση του μικρότερου ανάμεσα σε δύο αριθμούς, όπου η ένταξη (στη δυαδική επιλογή) του ενδεχόμενου οι δύο αριθμοί να είναι ίσοι μπορεί να γίνει με τυχαίο τρόπο if (a b) System.out.println(a); else if (b < a) System.out.printnl(b); if (a < b) System.out.println(a); else if (b a) System.out.printnl(b); IV-33

Αμοιβαία αποκλειόμενες συνθήκες Εάν για κάθε δυάδα ξεχωριστών συνθηκών, C i και C j, C i && C j false τότε κάθε κλαδί της εντολής θα επιλέγεται χωρίς ασάφεια, διότι σε κάθε περίπτωση μόνο μία συνθήκη θα είναι αληθής και οι υπόλοιπες θα είναι ψευδείς Συνεπώς, οι συνθήκες μπορούν να διατυπωθούν σε οποιαδήποτε σειρά (σε περίπτωση εντολών επιλογής όπου μπορούν να ισχύουν ταυτόχρονα πέραν της μίας συνθήκης, τότε η σειρά είναι καθοριστική ως προς την επιλογή του κλαδιού που θα ακολουθηθεί) IV-34

Παράδειγμα If (a < 25) System.out.printnl( Smaller than 25 ); else if (a == 25) System.out.printnl( Equals 25 ); else if (a > 25) System.out.printnl( Larger than 25 ); (a < 25) ή (a == 25) ή (a > 25) true Επομένως η εντολή επιλογής έχει πλήρη κάλυψη όλων των ενδεχομένων (a < 25) && (a == 25) false (a < 25) && (a > 25) false (a == 25) && (a > 25) false Επομένως οι συνθήκες είναι αμοιβαία αποκλειόμενες και η διακλάδωση είναι σαφής IV-35

Παράδειγμα If (a == b) System.out.printnl( Branch b ); else if (a == c) System.out.printnl( Branch c ); (a == b) ή (a == c) (a == b) ή (a == c) δεν υπάρχει απλοποίηση Επομένως η εντολή επιλογής έχει κάλυψη μόνο των ενδεχομένων που καλύπτει η φόρμουλα (a == b) ή (a == c), δηλαδή των ενδεχομένων όπου το a ισούται με το b ή το a ισούται με το c: (a == b) ή (a == c) true, όταν a == b (a == b) ή (a == c) true, όταν a == c (a == b) && (a == c) true, όταν b == c Επομένως οι συνθήκες δεν είναι αμοιβαία αποκλειόμενες και η διακλάδωση είναι ασαφής συνεπώς η σειρά έχει σημασία IV-36

Παράδειγμα if (a < 0) P 1 else if (a >= 0) if (b!= 0) P 2 else if (b == 0) if (a == b) P 3 else if (a!= b) if (a == 0) P 4 else if (a!= 0); /* do nothing */ IV-37

a < 0 y P 1 a 0 n b 0 y P 2 b = 0 n a = b a 0 n a = 0 n y a = 0 y P 3 P 4 do nothing IV-38

a < 0 y P 1 a 0 n b 0 y P 2 b = 0 n a 0 a = b n y a = 0 P 3 P 4 do nothing IV-39

if (a < 0) P 1 else if (b!= 0) P 2 else if (a == b) P 3 else if (a == 0) P 4 else ; /* do nothing */ if (a < 0) P 1 else if (a >= 0 && b!= 0) P 2 else if (a >= 0 && b == 0 && a == b) P 3 else if (a>= 0 && b == 0 && a!= b && a == 0) P 4 else if (a>= 0 && b == 0 && a!= b && a!= 0) ; /* do nothing */ IV-40

(b == 0 && a == 0) if (a < 0) P 1 else if (a >= 0 && b!= 0) P 2 else if (a >= 0 && b == 0 && a == b) P 3 else if (a >= 0 && b == 0 && a!= b && a == 0) P 4 else if (a >= 0 && b == 0 && a!= b && a!= 0) ; /* do nothing */ (a > 0 && a == 0) false (a > 0 && b == 0) if (a < 0) P 1 else if (a >= 0 && b!= 0) P 2 else if (b == 0 && a == 0) P 3 else if (a > 0 && b == 0) ; /* do nothing */ IV-41

Παράδειγμα: Υπολογισμός φορολογικού συντελεστή βάσει εισοδήματος Εισόδημα Φορολογικός συντελεστής 0-47,450 22% 47,450 114,650 25% 114,650 174,700 28% 174,700 311,950 33% 5 αμοιβαία αποκλειόμενες επιλογές 311,950-35% double rate; if (income < 47450) rate = 0.22; else if (income < 114650) rate = 0.25; else if (income < 174700) rate = 0.28; else if (income < 311950) rate = 0.33; else rate = 0.35; IV-42

Η πιο κάτω διατύπωση είναι ορθή ή λάθος; double rate = 0.35; if (income < 47450) rate = 0.22; if (income < 114650) rate = 0.25; if (income < 174700) rate = 0.28; if (income < 311950) rate = 0.33; IV-43

Εντολή switch switch (έκφραση_ελέγχου) { σύνολο_ετικεττών_1 εντολές_1 break; σύνολο_ετικεττών_2 εντολές_2 break;.. σύνολο_ετικεττών_n εντολές_n break; default: εντολές_d } Η έκφραση_ελέγχου πρέπει να είναι βαθμωτού τύπου, π.χ. char ή int, αλλά όχι double IV-44

Παραδείγματα char choice = args[0].charat(0); switch(choice) { case B : case b : case W : case w : case K : case k : case R : case r : Figures.draw_butterfly(size, fill); break; Figures.draw_windmill(size, fill); break; Figures.draw_kite(size, fill); break; Figures.draw_rombus(size, fill); break; } default: System.out.prinln( Wrong choice ); IV-45

switch (year % 4 == 0) { case false: isleapyear = false; break; case true: switch (year % 100 == 0) { case false: isleapyear = true; break; case true: switch (year % 400 == 0) { case false: isleapyear = false; break; } } } case true: isleapyear = true; IV-46

Σύνοψη: Αλγοριθμική Δομή Επιλογής Η δομή της επιλογής επιτρέπει την ανταπόκριση σε διαφορετικές καταστάσεις με ευέλικτο τρόπο Κανονικά μία συγκεκριμένη εντολή επιλογής πρέπει να περιλαμβάνει δράσεις για κάθε πιθανό ενδεχόμενο που μπορεί να προκύψει, έστω και αν κάποια από αυτές τις δράσεις είναι η «απραξία» ( do nothing ) όπως συχνά συμβαίνει IV-47

Αλγοριθμική Δομή Επανάληψης Μορφές Επανάληψης Απροσδιόριστη Επανάληψη ή Επανάληψη υπό συνθήκη εντολές while και do-while Απαριθμητή Επανάληψη εντολή for IV-48

Εντολή while while (συνθήκη) εντολή C? ναι S όχι Σημασιολογία Εάν από την αρχή δεν ευσταθεί η συνθήκη C, η εντολή S δεν θα εκτελεστεί καθόλου. Διαφορετικά η S εκτελείται και αυτό επαναλαμβάνεται μέχρις ότου η συνθήκη C να μην ευσταθεί. Επομένως για να μην δημιουργηθεί βρόχος άπειρης διάρκειας (infinite loop), η διεργασία της S πρέπει να είναι τέτοια, ούτως ώστε να επέλθει μία κατάσταση στην οποία η C να μην ευσταθεί πλέον, οδηγώντας έτσι σε έξοδο από το βρόχο. IV-49

/* infinite loop */ while (true) System.out.println( I cannot stop! ); /* null statement */ while (false) System.out.println(???? ); while (false); IV-50

Παράδειγμα: Υπολογισμός του αθροίσματος 1 + 2 + + n public class ComputeSum{ public static void main(string[] args){ int n = Integer.parseInt(args[0]); int count = 1, sum = 0; while (count <= n){ sum = sum + count; count = count + 1; } } System.out.println( The sum is + sum); } IV-51

Παράδειγμα: Πρόγραμμα το οποίο να παράγει τα ακόλουθα: 0 1 1 2 2 4 3 8 4 16 5 32 6 64 x 2 x public class PowersOfTwo { } public static void main (String[] args){ int count = 0, res = 1; while (count <= 6) { System.out.println(count + + res); count = count + 1; res = res * 2; } } IV-52

Υπάρχει κάτι λάθος στον πιο κάτω κώδικα; public class PowersOfTwo { } public static void main (String[] args){ int count = 0, res = 1; while (count <= 6) System.out.println(count + + res); count = count + 1; res = res * 2; } IV-53

Σύνθετοι Τελεστές Ανάθεσης count = count + 1; res = res * 2; sum = sum + count; x = x 3; n = n * (x+1); μεταβλητή τελεστής= έκφραση; Σημασιολογία: μεταβλητή = μεταβλητή τελεστής (έκφραση); Σύνθετοι τελεστές: +=, =, *=, /=, %= count += 1; res *= 2; sum += count; x -= 3; n *= (x+1); IV-54

int count = 1, sum = 0; while (count <= n) { sum += count; count += 1; } int count = 0, res = 1; while (count <= 6) { System.out.println(count + + res); count += 1; res *= 2; } IV-55

Εντολή for for (έκφραση-αρχικοποίησης ; συνθήκη ; έκφραση-ενημέρωσης) εντολή Γενική Σημασιολογία Καταρχήν αποτιμείται η έκφρασηαρχικοποίησης, και στη συνέχεια δοκιμάζεται η συνθήκη. Εάν δεν ευσταθεί, ο έλεγχος μεταφέρεται εκτός της for. Διαφορετικά εκτελείται η εντολή, αποτιμείται η έκφραση-ενημέρωσης και ο έλεγχος επιστρέφει στη δοκιμή της συνθήκης. Η εκτέλεση της εντολής και η αποτίμηση της έκφρασηςενημέρωσης επαναλαμβάνεται ενόσω η συνθήκη ευσταθεί. Διαφορετικά τερματίζεται ο βρόγχος. IV-56

Τυπική Εφαρμογή της Εντολής for αρχικοποίηση μεταβλητής ελέγχου συνθήκη? όχι ναι εντολή ενημέρωση μεταβλητής ελέγχου IV-57

Παρατηρήσεις 1. Η επανάληψη ελέγχεται από μία μεταβλητή η οποία ονομάζεται μεταβλητή ελέγχου (control variable) ή μεταβλητή απαρίθμησης (counting variable) 2. Η έκφραση-αρχικοποίησης αποτελεί την εντολή βάσει της οποίας καταχωρείται αρχική τιμή στη μεταβλητή ελέγχου 3. H αποτίμηση της έκφρασης-ενημέρωσης έχει ως αποτέλεσμα την ενημέρωση της τιμής της μεταβλητής ελέγχου 4. Η συνθήκη (επανάληψης) εμπλέκει τη μεταβλητή ελέγχου 5. Επομένως προς αποφυγή βρόγχου άπειρης διάρκειας, η έκφρασηενημέρωσης πρέπει τελικά να οδηγεί σε μία κατάσταση, όπου η συνθήκη παύει να υφίσταται 6. Για να είναι η λογική πιο διαφανής, η τιμή της μεταβλητής ελέγχου πρέπει να ενημερώνεται αποκλειστικά από την έκφρασηενημέρωσης 7. Τέλος η μεταβλητή ελέγχου τείνει να είναι απαριθμητού τύπου - σε περίπτωση που μεταβλητή τύπου double χρησιμοποιείται ως μεταβλητή ελέγχου, η κοινή πρακτική είναι να έχει μόνο ακέραιο μέρος ΕΠΛ131 Ενότητα V V-58

/* Examples of infinite loops */ for (int n=1; true; n += 1) System.out.printnl( I cannot stop! ); for (1; true; 1) System.out.println( I cannot stop! ); for (; true; ) System.out.println( I cannot stop! ); /* Examples of null statements */ for (n = 1; n == 10; n += 1) System.out.println(??? ); for (0; false; 0) System.out.println(??? ); IV-59

Παράδειγμα: Υπολογισμός του αθροίσματος 1 + 2 + + n public class ComputeSum{ public static void main(string[] args){ int n = Integer.parseInt(args[0]); int sum = 0; for (int count = 1; count <= n; count += 1) sum = sum + count; } System.out.println( The sum is + sum); } IV-60

Παράδειγμα: Πρόγραμμα το οποίο εκτυπώνει 2 x για x από το 1 μέχρι το 6 public class PowersOfTwo { } public static void main (String[] args){ int res = 1; for (int count = 1; count <= 6; count += 1) { System.out.println(count + + res); res = res * 2; } } IV-61

Τελεστές για Αύξηση και Μείωση Τιμών (++, ) Increment and Decrement Operators count = count + 1; count += 1; ++count Ο τελεστής αύξησης, ++, λαμβάνει μία μοναδική μεταβλητή ως τον τελεστέο του Το πλευρικό φαινόμενο της εφαρμογής του, είναι ότι η τιμή του τελεστέου του αυξάνεται κατά ένα Συνήθως ο τελεστής χρησιμοποιείται απλά για αυτή την παρενέργεια, όπως στο παρακάτω παράδειγμα: for (count = 1; count <= n; ++count) sum += count; IV-62

Παρατηρήσεις Η τιμή μίας έκφρασης στην οποία χρησιμοποιείται ο τελεστής ++, εξαρτάται από τη θέση του τελεστή: Προ-σημειογραφική αύξηση (prefix increment) ο τελεστής προηγείται του τελεστέου, π.χ. ++count η τιμή της έκφρασης είναι η τιμή του τελεστέου μετά την αύξηση Μετα-σημειογραφική αύξηση (postfix increment) ο τελεστής ακολουθεί τον τελεστέο, π.χ. count++ η τιμή της έκφρασης είναι η τιμή του τελεστέου πριν την αύξηση Παρομοίως, ο τελεστής μείωσης, --, λαμβάνει μία μοναδική μεταβλητή ως τελεστέο, η παρενέργεια της εφαρμογής του είναι η μείωση της τιμής του τελεστέου κατά ένα, ενώ παράλληλα επιστρέφεται η τιμή του τελεστέου μετά ή πριν τη μείωση, σύμφωνα με το εάν χρησιμοποιείται προ- ή μετασημειογραφική μείωση αντιστοίχως IV-63

Παράδειγμα i 2 j? j = ++i; Προ-σημειογραφική αύξηση: Πρώτα αυξάνεται η i και μετά χρησιμοποιείται η τιμή της j = i++; Μετά-σημειογραφική αύξηση: Πρώτα χρησιμοποιείται η τιμή της i και μετά γίνεται η αύξηση i j i j 3 3 3 2 IV-64

Επιστροφή στο Παράδειγμα των Υποδιαιρέσεων μιας Ρήγας public class Ruler { public static void main(string[] args) { int N = Integer.parseInt(args[0]); String ruler = " "; for (int i = 1; i <= N; i++) { ruler = ruler + i + ruler; } System.out.println(ruler); } } i ruler " " 1 " 1 " 2 " 1 2 1 " 3 " 1 2 1 3 1 2 1 " IV-65

% java Ruler 1 1 % java Ruler 2 1 2 1 % java Ruler 3 1 2 1 3 1 2 1 % java Ruler 4 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 % java Ruler 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 % java Ruler 100 Exception in thread "main" java.lang.outofmemoryerror IV-66

Παράδειγμα: Παρουσίαση των εκτυπώσιμων χαρακτήρων με τους κωδικούς τους public class PrintChars { public static void newline (){ System.out.println(); } public static void main(string[] args){ char START_CHAR = ' '; char END_CHAR = '~'; int per_line = 5; newline(); System.out.println("Displaying Print Characters with their Codes"); for (char c = START_CHAR; c <= END_CHAR; c++){ if ((c - START_CHAR)% per_line == 0) newline(); System.out.print(" " + c + " " + (int)c); } } } ΕΠΛ131 Ενότητα ΙV ΙV-67

$ java PrintChars Displaying Print Characters with their Codes 32! 33 " 34 # 35 $ 36 % 37 & 38 ' 39 ( 40 ) 41 * 42 + 43, 44-45. 46 / 47 0 48 1 49 2 50 3 51 4 52 5 53 6 54 7 55 8 56 9 57 : 58 ; 59 < 60 = 61 > 62? 63 @ 64 A 65 B 66 C 67 D 68 E 69 F 70 G 71 H 72 I 73 J 74 K 75 L 76 M 77 N 78 O 79 P 80 Q 81 R 82 S 83 T 84 U 85 V 86 W 87 X 88 Y 89 Z 90 [ 91 \ 92 ] 93 ^ 94 _ 95 ` 96 a 97 b 98 c 99 d 100 e 101 f 102 g 103 h 104 i 105 j 106 k 107 l 108 m 109 n 110 o 111 p 112 q 113 r 114 s 115 t 116 u 117 v 118 w 119 x 120 y 121 z 122 { 123 124 } 125 ~ 126 ΕΠΛ131 Ενότητα ΙV ΙV-68

public class PrintChars { public static void newline (){ System.out.println(); } // Enter characters from command line public static void main(string[] args){ String s1 = args[0]; String s2 = args[1]; char START_CHAR = s1.charat(0); // args[0].charat(0); char END_CHAR = s2.charat(0); // args[1].charat(0); int per_line = 5; newline(); System.out.println("Displaying Print Characters with their Codes"); for (char c = START_CHAR; c <= END_CHAR; c++){ if ((c - START_CHAR)% per_line == 0) newline(); System.out.print(" " + c + " " + (int)c); } } } $ java PrintChars a A ΕΠΛ131 Ενότητα ΙV Displaying Print Characters with their Codes ΙV-69

public class PrintChars { public static void newline (){ System.out.println(); } // Enter characters from command line public static void main(string[] args){ String s1 = args[0]; String s2 = args[1]; char START_CHAR = s1.charat(0); // args[0].charat(0); char END_CHAR = s2.charat(0); // args[1].charat(0); if (START_CHAR > END_CHAR) {char temp = START_CHAR; START_CHAR = END_CHAR; END_CHAR = temp;} int per_line = 5; newline(); $ java PrintChars a A System.out.println("Displaying Print Characters with their Codes"); for (char c = START_CHAR; c Displaying <= END_CHAR; Print Characters c++){ with their Codes if ((c - START_CHAR)% per_line == 0) newline(); } } } ΕΠΛ131 Ενότητα ΙV System.out.print(" A 65 " + B c 66 + C " 67 " D + 68 (int)c); E 69 F 70 G 71 H 72 I 73 J 74 K 75 L 76 M 77 N 78 O 79 P 80 Q 81 R 82 S 83 T 84 U 85 V 86 W 87 X 88 Y 89 Z 90 [ 91 \ 92 ] 93 ^ 94 _ 95 ` 96 a 97 ΙV-70

Εντολή do-while do εντολή while (συνθήκη) ; S do S while (C); C? ναι όχι Σημασιολογία Καταρχήν εκτελείται η εντολή S και μετά δοκιμάζεται η συνθήκη C Ενόσω αυτή επαληθεύεται η εκτέλεση της εντολής S επαναλαμβάνεται Επομένως η S εκτελείται τουλάχιστο μία φορά Προς αποφυγή βρόγχου άπειρης διάρκειας, η διεργασία της S πρέπει να είναι τέτοια ούτως ώστε να επέλθει κάποια κατάσταση στην οποία η C να μην υφίσταται πλέον IV-71

do System.out.println( I cannot stop! ); while (true); do System.out.println( I will stop immediately! ); while (false); System.out.println( I will stop immediately! ); IV-72

Έλεγχος εγκυρότητας δεδομένων: Η εντολή do-while είναι συνήθως η πιο κατάλληλη δομή για τον έλεγχο εγκυρότητας δεδομένων int A, B; do { StdOut.print( Enter values for A and B where A < B ); A = StdIn.readInt(); B = StdIn.readInt(); } while (A >= B); IV-73

Παράδειγμα: Εισδοχή 10 αριθμών από το πεδίο [0.0, 10.0] και υπολογισμός του μέσου όρου αυτών των αριθμών double sum = 0.0, num; for (int i=1; i <= 10; ++i){ do num = StdIn.readDouble(); while (num < 0.0 num > 10.0); sum += num; } StdOut.println( The average is + sum/10); IV-74

Σύνοψη Παραδειγμάτων Επανάληψης IV-75

Προσομοίωση Monte Carlo IV-76

Παράδειγμα: Η Καταστροφή του Τζογαδόρου Ο τζογαδόρος αρχίζει με ένα ποσό stake και βάζει στοιχήματα του 1 μέχρις ότου είτε να εξαντλήσει το ποσό των stake ή να φτάσει το στόχο του των goal. Τι πιθανότητες έχει να κερδίσει; Πόσα στοιχήματα πρέπει να παίξει; Μια προσέγγιση: Προσομοίωση Monte Carlo Στρίψτε ψηφιακά κέρματα και παρατηρείστε τι συμβαίνει Επαναλάβετε και υπολογίστε τις στατιστικές IV-77

Η Καταστροφή του Τζογαδόρου public class Gambler { public static void main(string[] args) { int stake = Integer.parseInt(args[0]); int goal = Integer.parseInt(args[1]); int trials = Integer.parseInt(args[2]); int wins = 0; // repeat experiment N times for (int i = 0; i < trials; i++) { } // do one gambler's ruin experiment int t = stake; while (t > 0 && t < goal) { // flip coin and update if (Math.random() < 0.5) t++; else t--; } if (t == goal) wins++; System.out.println(wins + " wins of " + trials); } } ΕΠΛ131 Ενότητα V V-78

stake goal trials % java Gambler 5 25 1000 191 wins of 1000 % java Gambler 5 25 1000 203 wins of 1000 % java Gambler 500 2500 1000 197 wins of 1000 Μετά από αρκετή ώρα. Γεγονός: Πιθανότητα νίκης = stake goal. Γεγονός: Αναμενόμενος αριθμός στοιχημάτων = stake desired gain. Παράδειγμα: 20% πιθανότητα να μετατρέψεις τα 500 σε 2500, αλλά να αναμένεις να κάνεις ένα εκατομμύρια στοιχήματα του 1. 500/2500 = 20% 500 * (2500-500) = 1 εκατομμύριο IV-79

Κοινά Λάθη Σύγχυση ανάμεσα στις εντολές if και while: if (συνθήκη) εντολή while (συνθήκη) εντολή Παράλειψη των παρενθέσεων γύρω από τις συνθήκες, στις εντολές while και do-while Σχετικά με την εντολή for, παράλειψη του χαρακτήρα ; μετά την έκφραση αρχικοποίησης και μετά την συνθήκη επανάληψης Σε κάθε περίπτωση, το σώμα της επανάληψης θεωρείται ότι είναι μία και μοναδική εντολή Κοινό λάθος είναι η παράλειψη των παρενθέσεων {} όταν το τι επαναλαμβάνεται είναι μία ακολουθία εντολών όπως φαίνεται στην ακόλουθη διαφάνεια IV-80

while (x > x_big) x = z; ++x_big; Σε αυτή την εντολή το σώμα της επανάληψης θεωρείται μόνο η εντολή x = z; while (x > x_big) { x = z; ++x_big;} Εδώ, η ακολουθία των δύο εντολών αποτελεί το σώμα της επανάληψης IV-81

if (συνθήκη 1 ) do {.... } while (συνθήκη 1 ); θα πρέπει να απλοποιηθεί σε while (συνθήκη 1 ) {..... } Κοινά Λάθη IV-82

Κοινά Λάθη H χρήση του τελεστή για μη ισότητα αναφορικά με μεταβλητές τύπου double πρέπει να αποφεύγεται, π.χ. while (balance!= 0.0)..... Αυτή η συνθήκη πολύ πιθανώς ενδέχεται να οδηγήσει σε βρόγχο άπειρης διάρκειας, απλά επειδή η τιμή 0.0 μπορεί να μην καταχωρηθεί επακριβώς στη μεταβλητή balance while (balance > 0.0)..... Εδώ αποφεύγεται ο βρόγχος, νοουμένου ότι η τιμή της balance δεν παραμένει συνεχώς κάποιος θετικός αριθμός IV-83

Κοινά Λάθη Παρερμήνευση των σύνθετων τελεστών ανάθεσης Μ τ= Ε σημαίνει Μ = Μ τ (Ε) και όχι Μ = Μ τ Ε Συνεπώς, οι παρενθέσεις γύρω από την έκφραση Ε που αποτελεί τον δεξιό τελεστέο αποτελούν αναγκαίο στοιχείο π.χ. a *= b + c; σημαίνει a = a * (b + c); και όχι a = a * b + c; a = (a * b) + c; Δεν υπάρχει συντομογραφία για αυτή την πρόταση a *= b; a += c; IV-84

Έλεγχος ροής: Σύνοψη Ακολουθία προτάσεων/εντολών που εκτελούνται σε ένα πρόγραμμα Συνθήκες και βρόγχοι: ρυθμίζουν τον έλεγχο ροής Επιλογή if, if-else, switch Επανάληψη while, for, do-while IV-85