Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Δομή Επιλογής Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD
Δομή Επιλογής (Απόφασης) Εκτέλεση υπό συνθήκη IF THEN IF THEN ELSE IF THEN ELSE IF ELSE Εκτέλεση κατά περίπτωση SELECT CASE
Δομές Επιλογής/Απόφασης Χρησιμοποιούνται για να παρακάμψουμε την διαδοχική εκτέλεση του κώδικα Απαρτίζονται από Κάποια έκφραση ελέγχου (έκφραση λογικού τύπου δεδομένων) για την λήψη κάποιας απόφασης Αλληλουχίες εκφράσεων που εκτελούνται αναλόγως της περίπτωσης Όταν κατά την εκτέλεση του πηγαίου κώδικα βρεθεί μια τέτοια δομή ο κώδικας συνεχίζει να εκτελείται κάνοντας προκαθορισμένα (προγραμματισμένα) λογικά άλματα. Μετά την ολοκλήρωση της εκτέλεσης της δομής, ο κώδικας συνεχίζει να εκτελείται διαδοχικά
Εκτέλεση υπό συνθήκη Χρησιμοποιείται για Λήψη Αποφάσεων Η βασική μορφή [ΟΝΟΜΑ ΔΟΜΗΣ:] IF (έκφραση ελέγχου) THEN εντολές_1 [ELSE [ΟΝΟΜΑ ΔΟΜΗΣ] εντολές_2] END IF [ΟΝΟΜΑ ΔΟΜΗΣ] Προσοχή: Οι παρενθέσεις είναι υποχρεωτικές! Η έκφραση ελέγχου είναι μία έκφραση λογικού τύπου Αν η έκφραση ελέγχου είναι.true. (αληθής) εκτελούνται οι statements #1.false. (ψευδής) εκτελούνται οι statements #2 Η δομή τερματίζεται στην εντολή END IF (ή ENDIF) To «όνομα δομής» είναι προαιρετικό
Εκτέλεση υπό συνθήκη Η απλή μορφή Μόνο μία εντολή: read, print, write, = IF (έκφραση ελέγχου) εντολή Η σύνθετη μορφή Χωρίς THEN Χωρίς END IF [ΟΝΟΜΑ ΔΟΜΗΣ:] IF (έκφραση ελέγχου_1) ΤΗΕΝ εντολές _1 ELSEIF (έκφραση ελέγχου_2) ΤΗΕΝ εντολές _2 ELSEIF (έκφραση ελέγχου_3) ΤΗΕΝ εντολές_3 [ELSE [ΟΝΟΜΑ ΔΟΜΗΣ] εντολές ] ENDIF [ΟΝΟΜΑ ΔΟΜΗΣ]
Παρατηρήσεις Η αποτίμηση μιας σύνθετης συνθήκης ελέγχου τερματίζει ακριβώς τη στιγμή, που μπορεί να εξαχθεί ασφαλές συμπέρασμα για το αποτέλεσμά της π.χ. Αν x=10 τότε στη συνθήκη (x>5.or. y<x+2) μόλις γίνει η απoτίμηση της x>5 μπορεί να εξαχθεί ασφαλές συμπέρασμα για το ότι το αποτέλεσμα θα είναι.true., επομένως ο compiler δεν ελέγχει καθόλου αν y<x+2 Τρόποι ελέγχου αν μία μεταβλητή λογικού τύπου έχει τιμή.true. ΣΩΣΤΗ ΣΥΝΤΑΞΗ IF (f) THEN IF (f.eqv..true.) THEN IF (f ==.true.) THEN IF (f /=.false.) THEN ΛΑΘΟΣ ΣΥΝΤΑΞΗ Τρόποι ελέγχου αν μία μεταβλητή λογικού τύπου έχει τιμή.false. IF (.not. f) THEN IF (f.eqv..false.) THEN IF (f ==.false.) THEN IF (f /=.true.) THEN
Ένθεση δομών εκτέλεσης υπό συνθήκη Αν θέλουμε να πάρουμε διαδοχικά δύο ή περισσότερες αποφάσεις τότε ενθέτουμε δομές τύπου IF-THEN-ELSE την μία μέσα στην άλλη (εμφωλευμένες δομές) Κάθε μια δομή πρέπει να τερματίζεται με την δική της εντολή END IF
Προσοχή ΛΑΘΟΣ ΣΥΝΤΑΞΗ IF (...) THEN... ELSE IF (...) THEN... END IF Στη δομή IF ELSEIF το IF πρέπει να γράφετε στην ίδια γραμμή με το ELSE διαφορετικά θεωρείται εμφωλευμένο IF με συνέπεια να θέλει δικό του END IF ΣΩΣΤΗ ΣΥΝΤΑΞΗ IF (...) THEN... ELSE IF (...) THEN... END IF??? IF (...) THEN... ELSE IF (...) THEN... END IF END IF
Εκτέλεση κατά περίπτωση [ΟΝΟΜΑ ΔΟΜΗΣ:]SELECT CASE (selector) CASE (value-list 1) statements #1 CASE (value-list 2) statements #2 CASE DEFAULT statements #Ν END SELECT [ΟΝΟΜΑ ΔΟΜΗΣ] Οι λίστες τιμών πρέπει να είναι αμοιβαία αποκλειόμενες μεταξύ τους. (Η FTN95 βγάζει συντακτικό σφάλμα διαφορετικά) SELECTOR: έκφραση τύπου integer, logical, character VALUE-LIST: τιμή τύπου integer, logical, character STATEMENTS: ακολουθία εκφράσεων υπολογισμού
Σύνταξη Λίστας Τιμών Η λίστα τιμών στις δομές επιλογής έχει τους ακόλουθους τρόπους σύνταξης Σύνταξη Εκτέλεση αντίστοιχης επιλογής όταν ο επιλογέας λάβει τιμή Πεδίο ορισμού λίστας τιμών value1 Μόνο τη τιμή value1 [value1] value1: Μεγαλύτερη ή ίση της value1 [value1, + ) value1: value2 Οποιαδήποτε τιμή μεταξύ των value1, value2 συμπεριλαμβανομένων και των τιμών αυτών (σημ.: value1<value2) [value1, value2] :value2 Μικρότερη ή ίση της value2 (-, value2] Συνδυασμοί π.χ. (1, 2, 7, 10:17, 23) Οποιαδήποτε τιμή περιλαμβάνεται στη λίστα Απαγορεύονται οι επικαλύψεις
Παρατηρήσεις Η απλή δομή επιλογής IF-ENDIF είναι η πιο γενική από όλες. Όλα τα προβλήματα που απαιτούν κάποια δομή επιλογής μπορούν να επιλυθούν αποκλειστικά και μόνο με αυτή, όσο σύνθετα και αν είναι. (Ο κώδικας, όμως, γίνεται πολύπλοκος) Στις δομές ΙF-ELSEIF και SELECT CASE, όλες οι συνθήκες πρέπει να είναι αμοιβαία αποκλειόμενες (σε αυτό παίζει ρόλο και η σειρά εκτέλεσής τους) Όταν σε ένα πρόγραμμα υπάρχουν πολλές δομές επιλογής και ιδιαιτέρως αν αυτές είναι εμφωλευμένες, καλό είναι να τις ονοματίζουμε
Μερικές Χρήσεις της Δομής Επιλογής Απλός έλεγχος εγκυρότητας δεδομένων (εύρους αποδεκτών τιμών) Αποφυγή σφαλμάτων χρόνου εκτέλεσης, όπως π.χ. διαίρεση με το 0 Κλιμακωτές χρεώσεις Υπολογισμών τιμών συναρτήσεων με κλάδους Εύρεση Μεγίστου Ελαχίστου Απλό Μενού Επιλογών Πίνακες περιπτώσεων π.χ Περίπτωση 1 Τιμή 1 Περίπτωση 2 Τιμή 2 Περίπτωση 3 Τιμή 3 Κατηγορία Α Κατηγορία Β Περίπτωση 1 Τιμή Α1 Τιμή Β1 Περίπτωση 2 Τιμή Α2 Τιμή Β2 Περίπτωση 3 Τιμή Α3 Τιμή Β3