Δομή επιλογής
Συχνά σε ένα πρόγραμμα το τι εντολές θα εκτελεστούν εξαρτάται από τα δεδομένα που θα προκύψουν κατά την διάρκεια εκτέλεσης του. Έστω π.χ. ότι ζητείται ένα τμήμα προγράμματος που διαβάζει έναν βαθμό και εάν αυτός είναι μεγαλύτερος από 9.5 να εμφανίζει το μήνυμα «Μπράβο, περάσατε τις εξετάσεις» διαφορετικά να εμφανίζει «Λυπάμαι, θα πρέπει να προσπαθήσετε ξανά!». Σε αυτή την περίπτωση απαιτείται η χρήση της εντολής ΑΝ (σύνθετη) της οποίας η σύνταξη είναι :
Η εντολή ΑΝ έχει τέσσερεις παραλλαγές (μορφές) ανάλογα με το ένα οι περιπτώσεις είναι μία, δύο ή περισσότερες. Όταν σε ένα πρόγραμμα γίνεται χρήση της εντολής ΑΝ τότε λέμε ότι ακολουθεί την δομή της επιλογής.
Δομή Απλής Επιλογής
Η δομή αυτή χρησιμοποιείται όταν υπάρχουν δύο ενδεχόμενα και για το ένα από αυτά θέλουμε να εκτελεστούν κάποιες εντολές.
Η σύνταξη (γενική μορφή) και το αντίστοιχο λογικό διάγραμμα της απλής Επιλογής είναι:
Παράδειγμα
Να γραφτεί τμήμα προγράμματος που διαβάζει έναν αριθμό και να εμφανίζει την απόλυτη τιμή του.
Απάντηση
Αν ο αριθμός είναι αρνητικός τότε μόνο θα πρέπει να τον μετατρέψουμε σε θετικό. Άρα το πρόγραμμα θα είναι ως εξής:
ΔΙΑΒΣΑΣΕ x
ΑΝ x >=0 ΤΟΤΕ
x ← x*(-1)
ΤΕΛΟΣ_ΑΝ
ΓΡΑΨΕ x
Δομή Σύνθετης Επιλογής
Η δομή αυτή χρησιμοποιείται όταν υπάρχουν δύο ενδεχόμενα και για κάθε ένα από αυτά θέλουμε να εκτελεστούν διαφορετικές εντολές.
Η σύνταξη (γενική μορφή) και το αντίστοιχο λογικό διάγραμμα της Σύνθετης Επιλογής είναι:
Παράδειγμα
Να γραφτεί τμήμα προγράμματος που διαβάζει έναν βαθμό και εάν αυτός είναι μεγαλύτερος από 9.5 να εμφανίζει το μήνυμα «Μπράβο, περάσατε τις εξετάσεις» διαφορετικά να εμφανίζει «Λυπάμαι, θα πρέπει να προσπαθήσετε ξανά!».
Απάντηση
ΔΙΑΒΑΣΕ βαθ
ΑΝ βαθ>9.5 ΤΟΤΕ
ΓΡΑΨΕ ‘Μπράβο, περάσατε τις εξετάσεις’
ΑΛΛΙΩΣ
ΓΡΑΨΕ ‘Λυπάμαι, θα πρέπει να προσπαθήσετε ξανά!’
ΤΕΛΟΣ_ΑΝ
Δομή Πολλαπλής Επιλογής
Η δομή αυτή χρησιμοποιείται όταν υπάρχουν περισσότερα από 2 ενδεχόμενα και για κάθε ενα από αυτά θέλουμε να εκτελεστούν διαφορετικές εντολές.
Η σύνταξη (γενική μορφή) και το αντίστοιχο λογικό διάγραμμα της Πολλαπλής Επιλογής είναι:
Προσοχή, το τελευταίος μέρος της εντολής
ΑΛΛΙΩΣ
Εντολές
είναι προαιρετικό. Αν δεν το χρειάζεται τότε μπορεί να παραληφθεί.
Παράδειγμα
Να γραφτεί τμήμα προγράμματος που διαβάζει τον βαθμό ενός μαθητή και εμφανίζει το αντίστοιχο μήνυμα σύμφωνα με τον παρακάτω πίνακα. Θεωρήστε ότι ο βαθμός που θα δοθεί θα είναι σίγουρα μεταξύ 0 και 20.
Βαθμός | Μήνυμα |
[0 , 9.5) | Κρίμα |
(9.5 , 15] | Καλά |
(15 , 18] | Πολύ καλά |
[18 , 20] | Άριστα |
Απάντηση
ΔΙΑΒΑΣΕ βαθ
ΑΝ βαθ<9.5 ΤΟΤΕ
ΓΡΑΨΕ ‘Κρίμα’
ΑΛΛΙΩΣ_ΑΝ βαθ<=15 ΤΟΤΕ
ΓΡΑΨΕ ‘Καλά’
ΑΛΛΙΩΣ_ΑΝ βαθ<=18 ΤΟΤΕ
ΓΡΑΨΕ ‘Πολύ καλά’
ΑΛΛΙΩΣ
ΓΡΑΨΕ ‘Άριστα’
ΤΕΛΟΣ_ΑΝ
Δομή Εμφωλευμένης Επιλογής
ΑΘΗΝΑ | ΥΠΟΛΟΙΠΗ ΕΛΛΑΔΑ | |
(0,5] Kgr | 2 | 4 |
(5,10] Kgr | 5 | 8 |
(10,20] | 7 | 11 |
Κλιμακωτές χρεώσεις
Έστω ότι η χρέωση σε ένα χώρο στάθμευσης αυτοκινήτων είναι η ακόλουθη:
ΩΡΕΣ | ΧΡΕΩΣΗ ΑΝΑ ΩΡΑ |
Μέχρι και 3 ώρες | 3 |
Από 3 έως και 5 ώρες | 2 |
Πάνω από 5 ώρες | 1 |
Αν η χρέωση είναι κλιμακωτή τότε οι 3 πρώτες ώρες χρεώνονται με 3 ευρώ την ώρα, οι υπόλοιπες 2 ώρες με 2 ευρώ την ώρα και από εκεί και πάνω με 1 ευρώ την ώρα.
Άσκηση1
Να γραφεί τμήμα προγράμματος που διαβάζει τον χρόνο παραμονής του αυτοκινήτου και υπολογίζει την χρέωση που αντιστοιχεί.
Απάντηση
ΔΙΑΒΑΣΕ χρόνος ΑΝ χρόνος<=3 ΤΟΤΕ Χρέωση ← χρόνος*3 ΑΛΛΙΩΣ_ΑΝ χρόνος<=5 ΤΟΤΕ Χρέωση ← χρόνος*2 ΑΛΛΙΩΣ Χρέωση ← χρόνος*1 ΤΕΛΟΣ_ΑΝ
Άσκηση2
Να ξανακάνετε την προηγούμενη άσκηση με τον προϋπόθεση ότι χρέωση θα είναι αυτή την φορά κλιμακωτή.
Απάντηση
ΔΙΑΒΑΣΕ χρόνος ΑΝ χρόνος<=3 ΤΟΤΕ Χρέωση ← χρόνος*3 ΑΛΛΙΩΣ_ΑΝ χρόνος<=5 ΤΟΤΕ Χρέωση ← 3*3+(χρόνος-3)*2 ΑΛΛΙΩΣ Χρέωση ← 3*3+2*2+(χρόνος-5)*1 ΤΕΛΟΣ_ΑΝ
Πολλαπλασιασμός αλά ρωσικά
Πως κάνει τους πολλαπλασιασμούς ο υπολογιστής; Όσο και αν φαίνεται περίεργο δεν χρησιμοποιεί τον παραδοσιακό τρόπο που μάθαμε στις πρώτες τάξεις του δημοτικού. Αντίθετα χρησιμοποιεί μια τεχνική που φαίνεται εξαιρετικά πολύπλοκη και χρονοβόρα. Η τεχνική αυτή ονομάζεται Πολλαπλασιασμός αλά ρωσικά.
Ο πολλαπλασιασμός αλά ρωσικά είναι μια ενδιαφέρουσα μέθοδος για τον υπολογισμό του γινομένου δύο αριθμών, η οποία χρησιμοποιεί προσθέσεις, διπλασιασμούς και υποδιπλασιασμούς αντί για τον παραδοσιακό πολλαπλασιασμό. Ας δούμε πώς λειτουργεί:
- Γράφουμε τους δύο αριθμούς που θέλεις να πολλαπλασιάσεις, τον έναν δίπλα στον άλλον (δεν έχει σημασία ποιός θα είναι πρώτος ή δεύτερος).
- Διπλασίαζουμε τον πρώτο αριθμό και υποδιπλασιάζουμε τον δεύτερο (αγνοώντας το δεκαδικό μέρος) μέχρι ο δεύτερος αριθμός να γίνει 1. Πάντα γίνεται ένα.
- Σημείωσε τα αποτελέσματα σε δύο στήλες. Κάθε ζευγαράκι τιμών που προκύπτει μπαίνει σε ξεχωριστεί γραμμή.
- Διαγράφουμε τις γραμμές που έχουν άρτιο αριθμό στην δεύτερη στήλη.
- Πρόσθεσε όλους τους αριθμούς που έχουν απομείνει στην πρώτη στήλης
¨Έστω οτι θέλουμε να πολλαπλασιάσουμε το 45 με το 19. Οι δύο στήλες θα έχουν την ακόλουθη μορφή :
Πρώτος Αριθμός | Δεύτερος Αριθμός |
---|---|
45 | 19 |
90 | 9 |
720 | 1 |
Στη συνέχεια, προσθέτουμε τους αριθμούς που έχουν απομείνει στην πρώτη στήλη (45, 90, 720): 45+90+720=855
Άρα, το γινόμενο 45 x 19 μας κάνει 855.
Ακολουθεί μια διαδραστική εφαρμογή στην οποία μπορείτε να πληκτρολογήστε δύο τυχαίους θετικούς αριθμούς και να σας δείξει τα βήματα για τον υπολογισμό του γινομένου με την μέθοδο του πολλαπλασιασμού αλά Ρωσικά.
Πολλαπλασιασμός αλά Ρωσικά. |
|
---|---|
Ακολουθεί ο αλγόριθμος του πολλαπλασιασμού αλά ρωσικά σε ψευδοκώδικα.
Αλγόριθμος Πολλαπλασιασμός_αλά_ρωσικά
Διάβασε M1,M2
Ρ ← 0
Όσο M2 > 0 επανάλαβε
Αν M2 mod 2 = 1 τότε
Ρ ← Ρ+Μ1
ΤΕΛΟΣ_ΑΝ
M1 ← Μ1*2
M2 ← M2 div 2
Τέλος_επανάληψης
Γράψε Ρ
Τέλος Πολλαπλασιασμός_αλά_ρωσικά
Μα γιατί οι υπολογιστές χρησιμοποιούν τον πολλαπλασιασμός αλά Ρωσικά;
Για τους ανθρώπους ο πολλαπλασιασμός αλά Ρωσικά είναι κοπιαστικός και χρονοβόρος όμως για τον υπολογιστή είναι απλός και γρήγορος! Πριν προχωρήσουμε θα πρέπει να θυμίσουμε οτι όλοι οι αριθμοί στον υπολογιστή αποθηκεύονται σε δυαδική μορφή (0 και 1). Για παράδειγμα ο αριθμός 141 αναπαρίσταται με την μορφή 0010001101.
Ολίσθηση αριστερά ονομάζουμε την μετακίνηση κάθε ψηφίου μία θέση προς τα αριστερά. Με άλλα λόγια το πρώτο ψηφίο θα πάρει την τιμή του δεύτερου, το δεύτερο θα πάρει την τιμή του τρίτου κοκ. Το τελευταίο ψηφίο γίνεται 0. Τι παθαίνει ένας δυαδικός αριθμός όταν του κάνουμε ολίσθηση προς τα αριστερά; ΔΙΠΛΑΣΙΑΖΕΤΑΙ!!
Αν αντί για μετακίνηση των ψηφίων προς τα αριστερά κάνουμε μετακίνηση προς τα δεξιά τότε αυτό λέγεται ολίσθηση προς τα δεξιά. Το τελευταίο ψηφίο θα πάρει την τιμή του προτελευταίου, του προτελευταίου θα πάρει την τιμή του προ-προ τελευταίου κοκ. Το πρώτο ψηφίο παίρνει την τιμή 0. Τι παθαίνει ένας δυαδικός αριθμός όταν του κάνουμε ολίσθηση προς τα δεξιά; ΥΠΟΔΙΠΛΑΣΙΑΖΕΤΑΙ!! Η ολίσθηση είναι μία από τις βασικές πράξεις που γίνεται ταχύτατα.
Στον πολλαπλασιασμός αλά Ρωσικά, το πρώτο στάδιο δηλ ο διπλασιασμός και υποδιπλασιασμός γίνεται με ολισθήσεις. Σε δεύτερο στάδιο πως καταφέρνει ο υπολογιστής να δει ποιοί αριθμοί της δεύτερης στήλης είναι άρτιοι για να διαγράψει τις αντίστοιχες γραμμές; Δεν χρειάζεται να διαιρέσει με το δύο και να βρεί το υπόλοιπο. Υπάρχει πιο γρήγορος τρόπος. Παρατηρεί το τελευταίο ψηφίο του αριθμού και αν είναι 0 σημαίνει οτι είναι άρτιος αλλιώς περιττός. Οπότε οι μόνες πράξεις που πρέπει να κάνει ακόμα είναι οι προσθέσεις. Άρα, για να κάνει έναν πολλαπλασιασμό ο υπολογοστής χρειάζεται να κάνει ολισθήσεις, παρατήρηση του τελευταίου ψηφίου και προσθέσεις.
Ακολουθεί μια διαδραστική εφαρμογή στην οποία μπορείτε να πληκτρολογήστε εναν τυχαίο θετικούς αριθμούς (1-511) και να σας δείτε πώς γράφεται στο δυαδικό σύστημα και στην συνέχεια να του κάνετε όσες ολισθήσεις θέλετε βλέποντας ταυτόχρονα τις νέες τιμές που θα πάρει.
Ολίσθηση Αριστερά και Δεξιά
Η γενική μορφή της ΕΠΙΛΕΞΕ
ΕΠΙΛΕΞΕ <έκφραση>
ΠΕΡΙΠΤΩΣΗ <λίστα_τιμών_1 ή συνθήκη1>
<εντολές_1>
ΠΕΡΙΠΤΩΣΗ <λίστα_τιμών_2 ή συνθήκ2>
<εντολές_2>
......
ΠΕΡΙΠΤΩΣΗ ΑΛΛΙΩΣ
<εντολές_αλλιώς>
ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ
Παρατηρήσεις:
- Η έκφραση πρέπει να είναι μία με οποιοδήποτε πλήθος μεταβλητών π.χ. β^2-4*α*γ.
- Η λίστα τιμών μπορεί να περιέχει μία ή περισσότερες τιμές αρκεί να παρεμβάλλεται μεταξύ τον τιμών το κόμμα (,). Η τιμές αυτές είναι διαδοχικοί ακέραιοι αριθμοί παραδείγματος χάρη από το 5 μέχρι και το 10 τότε εναλλακτικά μπορούμε να γράψουμε 5..10.
- Όλες οι συνθήκες αφορούν την έκφραση που έχουμε γράψει αμέσως μετά την ΕΠΙΛΕΞΕ γι αυτό και δεν χρειάζεται οι συνθήκες να περιέχουν αυτή την έκφραση.
ΑΝ β^2-4*α*γ>0 ΤΟΤΕ
ΓΡΑΨΕ "Έχει 2 λύσεις"
ΑΛλΙΩΣ_ΑΝ β^2-4*α*γ=0 ΤΟΤΕ
ΓΡΑΨΕ "Έχει 1 διπλή λύση"
ΑΛΛΙΩΣ
ΓΡΑΨΕ "Δεν έχει λύσεις"
ΤΕΛΟΣ_ΑΝ
Η εντολή ΑΝ
ΕΠΙΛΕΞΕ β^2-4*α*γ
ΠΕΡΙΠΤΩΣΗ >0
ΓΡΑΨΕ "Έχει 2 λύσεις"
ΠΕΡΙΠΤΩΣΗ 0 ! Προσοχή δεν θέλει =
ΓΡΑΨΕ "Έχει 1 διπλή λύση"
ΠΕΡΙΠΤΩΣΗ ΑΛΛΙΩΣ
ΓΡΑΨΕ "Δεν έχει λύσεις"
ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ
Η αντίστοιχη ΕΠΙΛΕΞΕ
ΑΝ χ>=0 και χ<=9 ΤΟΤΕ
ΓΡΑΨΕ "Δυστυχώς κόπηκες στις εξετάσεις"
ΑΛλΙΩΣ_ΑΝ χ>=10 και χ<=18 ΤΟΤΕ
ΓΡΑΨΕ "Πήγες καλά"
ΑΛΛΙΩΣ
ΓΡΑΨΕ "Έγραψες Άριστα!"
ΤΕΛΟΣ_ΑΝ
Η εντολή ΑΝ
ΕΠΙΛΕΞΕ χ
ΠΕΡΙΠΤΩΣΗ 0..9
ΓΡΑΨΕ "Δυστυχώς κόπηκες στις εξετάσεις"
ΠΕΡΙΠΤΩΣΗ 10..18
ΓΡΑΨΕ "Πήγες καλά"
ΠΕΡΙΠΤΩΣΗ ΑΛΛΙΩΣ
ΓΡΑΨΕ "Έγραψες Άριστα!"
ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ
Η αντίστοιχη ΕΠΙΛΕΞΕ
Μια ΑΝ μπορεί πάντοτε να μετατραπεί σε ΕΠΙΛΕΞΕ;
Η απάντηση είναι ΟΧΙ. Δείτε το παράδειγμα που ακολουθεί. Η Αν περιέχει διαφορετικές εκφράσεις σε κάθε περίπτωση άρα δεν μπορεί να γραφτεί ως ΕΠΙΛΕΞΕ
ΑΝ χ>=0 και y<=100 ΤΟΤΕ
ΓΡΑΨΕ "κάποιο μήνυμα"
ΑΛλΙΩΣ_ΑΝ χ>=10 και y<=20 ΤΟΤΕ
ΓΡΑΨΕ "Κάποιο άλλο μήνυμα"
ΑΛΛΙΩΣ
ΓΡΑΨΕ "Άλλο μήνυμα"
ΤΕΛΟΣ_ΑΝ
Η ΑΝ που ακολουθεί είναι ειδική περίπτωση και μπορούμε εναλλακτικά να χρησιμοποιήσουμε την ΕΠΙΛΕΞΕ.
ΑΝ (χ>0 και y>0) ή (χ<0 και y<0) ΤΟΤΕ
ΓΡΑΨΕ "Ομόσημοι αριθμοί"
ΑΛλΙΩΣ_ΑΝ (χ>0 και y<0) ή (χ<0 και y>0) ΤΟΤΕ
ΓΡΑΨΕ "Ετερόσημοι αριθμοί"
ΑΛΛΙΩΣ
ΓΡΑΨΕ "Ένας τουλάχιστον είναι μηδέν"
ΤΕΛΟΣ_ΑΝ
ΕΠΙΛΕΞΕ χ*y
ΠΕΡΙΠΤΩΣΗ >0
ΓΡΑΨΕ "Ομόσημοι αριθμοί"
ΠΕΡΙΠΤΩΣΗ <0
ΓΡΑΨΕ "Ετερόσημοι αριθμοί"
ΠΕΡΙΠΤΩΣΗ ΑΛΛΙΩΣ
ΓΡΑΨΕ "Ένας τουλάχιστον είναι μηδέν"
ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ
Σε ποιές περιπτώσεις θα ήταν προτιμότερη η χρήση της ΕΠΙΛΕΞΕ;
Όταν έχουμε μεγάλο πλήθος τιμών για έλεγχο τότε η ΕΠΙΛΕΞΕ καθιστά τον κώδικα πιο ευανάγνωστο.
ΑΝ χ=1 ή χ=3 ή χ=7 ή χ=10 ΤΟΤΕ
ΓΡΑΨΕ "Μήνυμα 1"
ΑΛλΙΩΣ_ΑΝ χ=2 ή χ=4 ή χ=5 ή χ=6 ή χ=9 ΤΟΤΕ
ΓΡΑΨΕ "Μήνυμα 2"
ΑΛΛΙΩΣ
ΓΡΑΨΕ "Μήνυμα 3"
ΤΕΛΟΣ_ΑΝ
ΕΠΙΛΕΞΕ χ
ΠΕΡΙΠΤΩΣΗ 1,3,7,10
ΓΡΑΨΕ "Μήνυμα 1"
ΠΕΡΙΠΤΩΣΗ 2,4,5,6,9
ΓΡΑΨΕ "Μήνυμα 2"
ΠΕΡΙΠΤΩΣΗ ΑΛΛΙΩΣ
ΓΡΑΨΕ "Μήνυμα 3"
ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ