ΚΕΦΑΛΑΙΟ 10 ΕΝΤΟΛΕΣ ΕΠΙΛΟΓΗΣ (ή εντολές Ελέγχου και Επιλογής ή εντολές Επιλογής και Απόφασης) Τι είναι οι εντολές Ελέγχου και Επιλογής στην Pascal; Ποιες είναι οι εντολές Ελέγχου και Επιλογής στην Pascal; Οι εντολές ενός προγράμματος εκτελούνται με τη σειρά, η μία μετά την άλλη. Αν όμως δε θέλουμε να συμβεί αυτό, πρέπει να χρησιμοποιήσουμε μία εντολή Ελέγχου και Επιλογής, έτσι ώστε κάποιες εντολές να εκτελεστούν μόνο όταν ισχύει κάποια συνθήκη. Οι εντολές Ελέγχου και Επιλογής στην Pascal είναι: 1. Η εντολή if και 2. Η εντολή case 10.1. IF Ποιες είναι οι δύο μορφές και ποιες είναι οι αντίστοιχες ενέργειες της εντολής if; Η εντολή if έχει 2 μορφές: Μορφή-1: if Λογική Έκφραση then εντολή-1 Ενέργεια: Υπολογίζεται η τιμή της λογικής έκφρασης. Αν η τιμή της είναι true (δηλαδή σωστό αληθής), τότε εκτελείται η εντολή-1 που ακολουθεί το then. Μορφή-2: if Λογική Έκφραση then εντολή-1 else εντολή-2 Ενέργεια: Υπολογίζεται η τιμή της λογικής έκφρασης. Αν η τιμή της είναι true (δηλαδή σωστό αληθής), τότε εκτελείται η εντολή-1 που ακολουθεί το then, αλλιώς εκτελείται η εντολή-2 που ακολουθεί το else. Μετά το then ή το else μπορούν να ακολουθούν περισσότερες από μία εντολές; Αν ναι, τι συμβαίνει τότε; Μετά το then ή το else μπορούν να ακολουθούν περισσότερες από μία εντολές. Αν συμβαίνει αυτό, τότε: Τις θεωρούμε σαν μία ακολουθία από εντολές Τις βάζουμε ανάμεσα σε begin και end 1 Γεωργιλά Χιονία, Καθ. Πληροφορικής
Το μεταφραστικό πρόγραμμα τις θεωρεί μία σύνθετη εντολή (compound statement) Τι είναι η φωλιά επιλογών ή φωλιά από if (nested if); Όταν σε μία εντολή if η εντολή που ακολουθεί το then ή το else είναι μια άλλη εντολή if, τότε λέμε ότι έχουμε nested if. Παραδείγματα 1. Γράψτε εντολές Pascal, έτσι ώστε: αν μία μεταβλητή με το όνομα diaireths είναι διαφορετική από το 0, η μεταβλητή piliko να παίρνει το αποτέλεσμα της ακέραιας διαίρεσης της μεταβλητής diaireteos με τη μεταβλητή diaireths. Διαφορετικά να εμφανίζεται στην οθόνη το μήνυμα: «ΛΑΘΟΣ! Διαίρεση με μηδέν δε γίνεται». if diaireths <> 0 then piliko := diaireteos div diaireths else writeln( ΛΑΘΟΣ! Διαίρεση με μηδέν δε γίνεται ); Προσοχή: Ερωτηματικό ; χρειάζεται μόνο στο τέλος της εντολής if. 2. Γράψτε εντολές Pascal, έτσι ώστε: αν μία μεταβλητή με το όνομα diaireths είναι διαφορετική από το 0, η μεταβλητή piliko να παίρνει το αποτέλεσμα της ακέραιας διαίρεσης της μεταβλητής diaireteos με τη μεταβλητή diaireths και να εμφανίζεται στην οθόνη το μήνυμα «διαίρεση δυνατή». Διαφορετικά να εμφανίζεται στην οθόνη το μήνυμα: «ΛΑΘΟΣ! Διαίρεση με μηδέν δε γίνεται» και η μεταβλητή piliko να παίρνει την τιμή maxint. if diaireths <> 0 then begin piliko := diaireteos div diaireths; writeln( διαίρεση δυνατή ); end else begin writeln( ΛΑΘΟΣ! Διαίρεση με μηδέν δε γίνεται ); piliko := maxint; Προσοχή: Ερωτηματικό ; χρειάζεται μόνο μετά από κάθε εντολή της σύνθετης εντολής και στο τέλος της εντολής if. 3. Γράψτε εντολές Pascal, οι οποίες να ελέγχουν 2 μεταβλητές a και b και: a. αν είναι ίσες να εμφανίζουν το μήνυμα a=b b. αν η a είναι μεγαλύτερη από την b να εμφανίζουν το μήνυμα a>b c. αν η b είναι μεγαλύτερη από την a να εμφανίζουν το μήνυμα a<b 2 Γεωργιλά Χιονία, Καθ. Πληροφορικής
if a=b then write( a=b ) else if a>b then writeln( a>b ) else writeln( a<b); Προσοχή: Ερωτηματικό ; χρειάζεται μόνο στο τέλος της εντολής if. 4. Γράψτε εντολές Pascal, οι οποίες αν οι ώρες εργασίας δεν είναι περισσότερες από 40, τότε να υπολογίζουν το πληρωτέο ποσό πολλαπλασιάζοντας την ωριαία αποζημίωση επί τις ώρες. Διαφορετικά, οι επιπλέον των 40 ωρών θεωρούνται υπερωριακές και πολλαπλασιάζονται με 1.5 if wres <= 40 then pliroteo := wr_apoz * wres else pliroteo := (wr_apoz * 40) + ((wres-40) * 1.5 * wr_apoz); 10.2. CASE Ποιες είναι η μορφή και ποια είναι η ενέργεια της εντολής case; Μορφή: case έκφραση of ετικέτα-1α, ετικέτα-1β,, ετικέτα-1ν: ετικέτα-2α, ετικέτα-2β,, ετικέτα-2ν:. else εντολή-λ εντολή-1; εντολή-2; Ενέργεια: Η εντολή case χρησιμοποιείται για πολλαπλή επιλογή. Πρώτα υπολογίζεται η τιμή της έκφρασης, που ονομάζεται και επιλογέας της case. Αν η τιμή της έκφρασης είναι ίδια με κάποια ετικέτα, τότε εκτελείται η εντολή που αντιστοιχεί στην ετικέτα αυτή. Διαφορετικά, αν η τιμή της έκφρασης δεν είναι ίδια με καμία ετικέτα, τότε αν υπάρχει else εκτελείται η εντολή που ακολουθεί το else. (Το else δεν είναι απαραίτητο να υπάρχει.) Η έκφραση μπορεί να είναι τύπου ακέραιου, χαρακτήρα ή λογικού (integer, char, boolean) Αν σε μία επιλογή πρέπει να εκτελεστούν περισσότερες από μία εντολές, τότε χρησιμοποιούμε τη σύνθετη εντολή, μέσα σε begin-end. Τα ετικέτα-1α, ετικέτα-1β,, ετικέτα-1ν λέγονται και λίστα ετικετών. 3 Γεωργιλά Χιονία, Καθ. Πληροφορικής
Παραδείγματα: Α... letter:char; case letter of x : εντολή-1; l, m : εντολή-2; s : εντολή-3; εντολή-4 Αν η μεταβλητή letter έχει τιμή l τότε εκτελείται η εντολή-2 και στη συνέχεια η εντολή-4. Αν η μεταβλητή letter έχει τιμή διαφορετική από x, l, m, s τότε B. Παραδείγματα: Α... vathmologia:char; case vathmologia of A, B : writeln( Πολύ Καλά ); C, D : writeln( Καλά ); E, F, G : begin writeln( Μέτρια ); test:= test+1; else writeln( Βαθμολογία εκτός ορίων ); εντολή-4 4 Γεωργιλά Χιονία, Καθ. Πληροφορικής
Γ. i:integer; case i of 1 : a:=a+1; 2 : b:=b+1; 3 : c:=c+1; 5 Γεωργιλά Χιονία, Καθ. Πληροφορικής