ΕΠΑΛ ΧΡΥΣΟΥΠΟΛΗΣ Γ Πληροφορική- 2015-2016 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 10 : Εντολές επιλογής και αποφάσεων 1 Εισαγωγή Η εντολή Στο 4 ο κεφάλαιο γνωρίσαµε την δοµή πολλαπλής επιλογής στην οποία ελέγχεται µια µεταβλητή και ανάλογα µε την τιµή της µπορεί να επιλεγεί µία από πολλές ενέργειες Πολλαπλή επιλογή Αν µεταβλητή = Τ1 Τότε Εντολές 1 = Τ2 Τότε Εντολές 2 =Τν Τότε Εντολές Παράδειγµα Να αναπτύξετε έναν αλγόριθµο που θα διαβάζει τη θέση ενός αθλητή σε ένα αγώνισµα και θα εµφανίζει το µήνυµα ΧΡΥΣΟ ΜΕΤΑΛΛΙΟ ή ΑΡΓΥΡΟ ΜΕΤΑΛΛΙΟ ή ΧΑΛΚΙΝΟ ΜΕΤΑΛΛΙΟ Ψευδοκώδικας Αρχή Τέλος ιάβασε Θέση Αν Θέση = 1 Τότε = 2 Τότε = 3 Τότε Εµφάνισε ΧΡΥΣΟ ΜΕΤΑΛΛΙΟ Εµφάνισε ΑΡΓΥΡΟ ΜΕΤΑΛΛΙΟ Εµφάνισε ΧΑΛΚΙΝΟ ΜΕΤΑΛΛΙΟ Στο παραπάνω παράδειγµα ελέγχεται η µεταβλητή Θέση και ανάλογα µε την τιµή της (1, 2 ή 3) τυπώνεται αντίστοιχο µήνυµα 1
ΕΠΑΛ ΧΡΥΣΟΥΠΟΛΗΣ Γ Πληροφορική- 2015-2016 2 Πολλαπλή επιλογή στην Pascal η εντολή case Μορφή case έκφραση of case label 11, case label 12, case label 1n : Εντολή 1; case label 21, case label 22, case labe l2n : Εντολή 2; case label m1, case label m2, case label mn : Εντολή m; εντολή k Λειτουργία Η έκφραση (που ονοµάζεται και επιλογέας) έχει µια τιµή διατεταγµένου τύπου (integer ή char ή boolean) Κάθε ένα από τα case label (ετικέτα) είναι µια σταθερά (τιµή ή όνοµα) του ίδιου τύπου µε την έκφραση Μετά το : µπορεί να ακολουθεί οποιαδήποτε εντολή της Pascal (απλή ή σύνθετη compound) Αν πρέπει να εκτελεστούν περισσότερες από µία εντολές αυτές πρέπει να περικλείονται από και end Κάθε κοµµάτι case label, case label, case label: Εντολή το ονοµάζουµε περίπτωση Υπολογίζεται η τιµή του επιλογέα Στη συνέχεια ελέγχονται οι περιπτώσεις και εκτελείται η εντολή εκείνης της περίπτωσης στην οποία αριστερά από την : υπάρχει µια τιµή ίση µε αυτή του επιλογέα Αν δεν βρεθεί περίπτωση που να ταιριάζει µε την τιµή του επιλογέα τότε εκτελείται η εντολή του Το κοµµάτι µπορεί να παραλείπεται οπότε σ αυτή την περίπτωση αν δεν επιλεγεί κάποια περίπτωση δεν θα εκτελεστεί καµιά εντολή και η εκτέλεση θα συνεχιστεί µετά το end της case ΠΡΟΣΟΧΗ Η ίδια ετικέτα δεν µπορεί να εµφανίζεται σε δύο διαφορετικές περιπτώσεις ούτε δύο φορές στην ίδια περίπτωση ηλαδή οι παρακάτω εντολές δεν είναι συντακτικά σωστές: 1: writeln('χρυσο ΜΕΤΑΛΛΙΟ'); 3,1: writeln('χαλκινο ΜΕΤΑΛΛΙΟ'); 1,1: writeln('χρυσο ΜΕΤΑΛΛΙΟ'); 2
ΕΠΑΛ ΧΡΥΣΟΥΠΟΛΗΣ Γ Πληροφορική- 2015-2016 21 Παραδείγµατα Παράδειγµα 1: (ακέραιος επιλογέας) Να γράψετε πρόγραµµα που θα διαβάζει τη θέση ενός αθλητή σε ένα αγώνισµα και θα εµφανίζει το µήνυµα ΧΡΥΣΟ ΜΕΤΑΛΛΙΟ ή ΑΡΓΥΡΟ ΜΕΤΑΛΛΙΟ ή ΧΑΛΚΙΝΟ ΜΕΤΑΛΛΙΟ program metalio; var thesh:integer; write(' ώσε τη θέση του αθλητή:'); readln(thesh); 1: writeln('χρυσο ΜΕΤΑΛΛΙΟ'); 3: writeln('χαλκινο ΜΕΤΑΛΛΙΟ'); end Παράδειγµα 2: (επιλογέας χαρακτήρας) Να γράψετε πρόγραµµα που να διαβάζει έναν χαρακτήρα από τους Ε ή ε, Μ ή µ, ή δ, Τ ή τ και να τυπώνει αντίστοιχα µηνύµατα : Εισαγωγή, Μεταβολή, ιαγραφή, Τέλος Σε περίπτωση που δοθεί άλλος χαρακτήρας να τυπώνει µήνυµα λάθους program epilogh; var arxiko:char; write('επιλογή:'); readln(arxiko); case arxiko of 'Ε', 'ε' : writeln('εισαγωγή'); 'Μ', 'µ' : writeln('μεταβολή'); ' ', 'δ' : writeln(' ιαγραφή'); 'Τ', 'τ' : writeln('τέλος'); writeln('λάθος επιλογή'); end 3
ΕΠΑΛ ΧΡΥΣΟΥΠΟΛΗΣ Γ Πληροφορική- 2015-2016 Παράδειγµα 3: Να γράψετε πρόγραµµα που να διαβάζει το έτος και έναν αριθµό από 1 12 και να τυπώνει την τελευταία µέρα (30 ή 31 ή 28 ή 29) του µήνα στον οποίο αντιστοιχεί program mhnes; var mon, etos:integer; write(' ώσε τον αριθµό του µήνα:'); readln(mon); write(' ώσε to ετος:'); readln(etos); case mon of 1,3,5,7,12 : writeln('τελευταία µέρα:',31); 4,6,9,11 : writeln('τελευταία µέρα:', 30); 2 : if ((etos MOD 4) = 0) AND ((etos MOD 100)<>0) OR ((etos MOD 400) = 0) then write(' ίσεκτο - Τελευταία µέρα:',29) writeln('τελευταία µέρα:',28); writeln('λάθος µήνας'); end 22 Ειδική περίπτωση Οι εντολές if then και if then µπορούν να θεωρηθούν ειδικές περιπτώσεις της case if then If λογική έκφραση Then εντολή; case λογική έκφραση of True: εντολή; False:; Στη case που αντιστοιχεί σε if then ο επιλογέας είναι µια λογική έκφραση που µπορεί να έχει µόνο δύο τιµές (True ή False) Έτσι στην περίπτωση του True εκτελείται η εντολή του then και στην περίπτωση του False τίποτα Η ετικέτα False Μπορεί να παραλείπεται 4
ΕΠΑΛ ΧΡΥΣΟΥΠΟΛΗΣ Γ Πληροφορική- 2015-2016 if then If λογική έκφραση Then Εντολή 1 Else Εντολή 2; case λογική έκφραση of True: εντολή 1; False:εντολή 2; Στη case που αντιστοιχεί σε if then ο επιλογέας είναι µια λογική έκφραση που µπορεί να έχει µόνο δύο τιµές (True ή False) Έτσι στην περίπτωση του True εκτελείται η εντολή του then και στην περίπτωση του False εκτελείται η εντολή του Παράδειγµα 4: If A>B Then Writeln( Μεγαλύτερος ); case Α>Β of True: writeln( Μεγαλύτερος ); False:; End; Παράδειγµα 5: If A>B Then Writeln( Μεγαλύτερος ); Else Writeln( Μικρότερος ); case Α>Β of True:writeln( Μεγαλύτερος ); False:Writeln( Μικρότερος ); End; ΠΡΟΣΟΧΗ Σε µια εντολή case όπου ο επιλογέας είναι τύπου Boolean δεν έχει νόηµα το τµήµα επειδή ο επιλογές έχει οπωσδήποτε µία από δύο συγκεκριµένες τιµές (true false) 5