Βασικοί κανόνες Αρχή και Τέλος Η ψευδογλώσσα ξεκινάει με την εντολή Αλγόριθμος <όνομα>, το διάγραμμα ροής με το οβάλ Η ψευδογλώσσα καταλήγει με την εντολή Τέλος <όνομα>, το διάγραμμα ροής με το οβάλ Εντολές Εκχώρησης Κάθε ομάδα εντολών εκχώρησης (μία ή περισσότερες) στην ψευδογλώσσα, αντιστοιχεί με ένα παραλληλόγραμμο σε διάγραμμα ροής. Εντολές Εισόδου - Εξόδου Κάθε εντολή εισόδου ή εξόδου στην ψευδογλώσσα, αντιστοιχεί με ένα πλάγιο παραλληλόγραμμο σε διάγραμμα ροής. Δομές Επιλογής ή Η δομή επιλογής (Αν <συνθήκη> τότε ) αντιστοιχεί με ρόμβο, όπου μέσα σε αυτόν αναγράφεται η συνθήκη. Από το ρόμβο ξεκινούν δύο βέλη, το ένα για τις εντολές που θα εκτελεστούν σε περίπτωση που ισχύει η συνθήκη (με την ένδειξη Αληθής) και το άλλο για την περίπτωση που δεν ισχύει (με την ένδειξη Ψευδής). Αν η εντολή Αν δεν έχει εντολές στην περίπτωση του τότε το βέλος με την ένδειξη Ψευδής συναντά το άλλο, χωρίς να σε αυτό έχει κάποια εντολή. Αν v mod 2 = 1 τότε x -1 x 1 Σχήμα 1: Παράδειγμα εντολής Αν με Αν v mod 2 = 1 τότε x -1 Σχήμα 2: Παράδειγμα εντολής Αν χωρίς Τα δύο βέλη θα πρέπει να συναντώνται πιο κάτω στο σχήμα. Αν δε συμβαίνει αυτό τότε η συνθήκη ανήκει σε κάποια δομή επανάληψης (βλ. παρακάτω). Στην περίπτωση όμως που η συνθήκη όντως ανήκει σε δομή επιλογής (Αν) θα πρέπει να υπάρχουν κάποιες εντολές τουλάχιστον στο βέλος με την ένδειξη Αληθής. Μπιλάλης Νίκος - ΠΕ19 Σελ. 1 από 7
ΣΗΜΕΙΩΣΗ: Αν σε άσκηση μετατροπής από διάγραμμα ροής σε ψευδογλώσσα, υπάρχει κάποια συνθήκη που αντιστοιχεί σε δομή επιλογή, και έχει εντολές μόνο στην περίπτωση του Ψευδής, τότε, αφού σιγουρευτούμε ότι δεν πρόκειται για δομή επανάληψης, θα πρέπει να την μετατρέψουμε σε εντολή Αν της ψευδογλώσσας, έχοντας αντιστρέψει την συνθήκη, π.χ. το χ > 0 θα γίνει χ 0. Τέλος, στην περίπτωση του _αν θα πρέπει το διάγραμμα να υλοποιηθεί με εμφωλευμένες εντολές επιλογής. Αλγόριθμος Παράδειγμα_Αλλιώς_Αν Διάβασε α Αν α = 1 τότε Εκτύπωσε 'Α' _αν α = 2 τότε Εκτύπωσε 'Β' _αν α = 3 τότε Εκτύπωσε 'Γ' Εκτύπωσε 'Άγνωστος' Τέλος Παράδειγμα_Αλλιώς_Αν Δομή Επανάληψης Σχήμα 3: Παράδειγμα εντολής επιλογής με _αν Οι εντολές επανάληψης Όσο και Μέχρις_ότου υλοποιούνται στα διαγράμματα ροής με τη χρήση του ρόμβου, όπως η εντολή Αν, γεγονός που καθιστά κάποιες φορές δύσκολη την μετατροπή σε ψευδογλώσσα. Σε αντίθεση όμως με την περίπτωση της Αν εδώ κάποιο από τα δύο βέλη επιστρέφει σε προηγούμενο σημείο του διαγράμματος. Η αντιστοιχία των εντολών αυτών με αντίστοιχα τμήματα διαγράμματος ροής είναι η ακόλουθη: Όσο <συνθήκη> επανάλαβε <εντολές> Τέλος_Επανάληψης Σχήμα 4:Η εντολή Όσο σε διάγραμμα ροής. <εντολές> Μέχρις_ότου <συνθήκη> Σχήμα 5: Η εντολή Μέχρις_ότου σε διάγραμμα ροής. Στα παραπάνω σχήματα παρατηρούμε τις εξής δύο διαφορές. Στην εντολή Όσο, το σύνολο των εντολών που ανήκουν μέσα στην επανάληψη βρίσκονται μετά την συνθήκη (θυμίζουμε ότι στη ψευδογλώσσα η συνθήκη μιας εντολής Όσο βρίσκεται στην αρχή και ακολουθούν οι εντολές), ενώ στην εντολή Μέχρις_ότου βρίσκονται πριν (στη ψευδογλώσσα η συνθήκη μιας εντολής Μέχρις_ότου βρίσκεται στο τέλος και προηγούνται οι εντολές). Για αυτό άλλωστε, στην περίπτωση της Μέχρις_ότου οι εντολές θα εκτελεστούν τουλάχιστον μία φορά. Μπιλάλης Νίκος - ΠΕ19 Σελ. 2 από 7
Η άλλη μεγάλη διαφορά είναι πως στην εντολή Όσο, όσο ισχύει η συνθήκη, η επανάληψη συνεχίζεται, ενώ στην περίπτωση της εντολής Μέχρις_ότου, όταν ικανοποιηθεί η συνθήκη, η επανάληψη τερματίζει. Για αυτό το λόγο ακριβώς, στην περίπτωση της Όσο, το βέλος που επιστρέφει σε προηγούμενο σημείο είναι αυτό με την ένδειξη Αληθής, ενώ στην περίπτωση της Μέχρις_ότου είναι το βέλος με την ένδειξη Ψευδής. ΣΗΜΕΙΩΣΗ: Δεν είναι πάντα ασφαλές να αποφασίσουμε ποια από τις δύο εντολές πρέπει να χρησιμοποιούμε κατά τη μετατροπή διαγράμματος ροής σε ψευδογλώσσα, βασιζόμενοι στο αν το βέλος που επιστρέφει έχει την ένδειξη Αληθής ή Ψευδής (βλ. παρακάτω, Θέμα Β2, Πανελλαδικές 2014). Για την περίπτωση της εντολής Για δεν υπάρχει κάποια αποκλειστική αντιστοιχία, δεδομένου όμως ότι η εντολή Για μπορεί εύκολα να μετατραπεί σε εντολή Όσο, έχουμε την εξής μετατροπή (βλ. και θέμα Β1, Επαναληπτικές Πανελλαδικές 2013): Αλγόριθμος Παράδειγμα_Για sum 0 Για i από 1 μέχρι 100 sum sum + i Τέλος Παράδειγμα_Για Αλγόριθμος Παράδειγμα_Όσο i 1 sum 0 Όσο i 100 επανάλαβε sum sum + i i i + 1 Τέλος Παράδειγμα_Όσο Σχήμα 6: Παράδειγμα αντιστοιχίας εντολής Για και διαγράμματος ροής. Μετατροπή από Ψευδογλώσσα σε Διάγραμμα Ροής Μεθοδολογία Η μετατροπή ψευδογλώσσας σε διάγραμμα ροής είναι συνήθως απλή υπόθεση, αν ακολουθήσουμε τους κανόνες της προηγούμενης ενότητας. Η μόνη σημαντική δυσκολία είναι η μετατροπή μιας εντολής Για στο αντίστοιχο τμήμα στο διάγραμμα, καθώς η εντολή Για θα πρέπει πρώτα να μετατραπεί σε εντολή Όσο, για να μας διευκολύνει στη συνέχεια. Ένα σημείο που θέλει επίσης προσοχή είναι το εξής. Όταν μετατρέπουμε τμήμα αλγόριθμου που περιέχει την εντολή Όσο, οι εντολές πρέπει να τοποθετηθούν στο βέλος που επιστρέφει σε προηγούμενο σημείο του διαγράμματος, άρα ένα τμήμα του έχει φορά προς τα επάνω. Το γεγονός αυτό μπορεί να δημιουργήσει κάποια σύγχυση, καθώς οι εντολές στο διάγραμμα θα πρέπει να τοποθετηθούν και αυτές με σειρά από κάτω προς τα πάνω (αν είναι περισσότερες από μία και δεν μπορούν να ομαδοποιηθούν δεν είναι όλες εντολές εκχώρησης). Σε τέτοιες περιπτώσεις μπορούμε να βάλουμε τις εντολές που ανήκουν μέσα στην Όσο, κάτω από τη συνθήκη/ρόμβο και η περίπτωση του Ψευδής να ξεκινά από δεξιά ή αριστερά (βλ. Θέμα Β1, Πανελλαδικές 2013). Τέλος, αν μας δίνεται τμήμα αλγόριθμου και όχι ολοκληρωμένος αλγόριθμος (όταν δεν υπάρχουν δηλαδή στην εκφώνηση οι εντολές Αλγόριθμος <όνομα> και Τέλος <όνομα>), δεν θα συμπεριλάβουμε στη λύση Αρχή και Τέλος. Μπιλάλης Νίκος - ΠΕ19 Σελ. 3 από 7
Παραδείγματα ΙΑΒΑΣΕ x, y ΑΝ x < y ΤΟΤΕ z x ΑΛΛΙΩΣ z y ΤΕΛΟΣ_ΑΝ ΟΣΟ z <> 0 ΕΠΑΝΑΛΑΒΕ z x MOD y x y y z ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ Σχήμα 7: Θέμα Β1, Πανελλαδικές 2010. Αλγόριθμος Παράγοντες Διάβασε α k 2 Όσο α > 1 επανάλαβε Αν α mod k = 0 τότε Εμφάνισε k α a div k Αλλιώς k k + 1 Τέλος Παράγοντες Σχήμα 8: Θέμα Β1 Πανελλαδικών 2013. Μπιλάλης Νίκος - ΠΕ19 Σελ. 4 από 7
Αλγόριθμος ιοφαντική Για x από 0 μέχρι 100 Για y από 0 μέχρι 100 Για z από 0 μέχρι 100 Αν 3*x+2*y-7*z=5 τότε Εκτύπωσε x,y,z Τέλος Διοφαντική Αλγόριθμος ιοφαντική x 0 Όσο x 100 επανάλαβε y 0 Όσο y 100 επανάλαβε z 0 Όσο z 100 επανάλαβε Αν 3*x+2*y-7*z=5 τότε Εκτύπωσε x,y,z z z + 1 y y + 1 x x + 1 Τέλος Διοφαντική Σχήμα 9: Θέμα Β1, Επαναληπτικές Πανελλαδικές 2012. Μετατροπή από Διάγραμμα Ροής σε Ψευδογλώσσα Μεθοδολογία Οι ασκήσεις αυτού του τύπου είναι συνήθως δυσκολότερες, καθώς για κάθε ρόμβο/συνθήκη θα πρέπει να αποφασίσουμε αν πρόκειται για εντολή επιλογής (Αν) ή κάποια εντολή επανάληψης (Όσο ή Μέχρις_ότου). Η μεθοδολογία είναι η εξής: 1. Εντοπίζουμε όλες τις συνθήκες/ρόμβους του διαγράμματος. Αυτά θα αντιστοιχούν σε μία από τις εξής τρεις εντολές: Αν, Όσο, Μέχρις_ότου. 2. Εντοπίζουμε όλα τα σημεία όπου βέλη/διαδρομές του διαγράμματος επιστρέφουν σε προηγούμενο σημείο του. Αυτά αντιστοιχούν στην αρχή κάποιας εντολής επανάληψης: Όσο <συνθήκη> επανάλαβε ή (Μέχρις_ότου). 3. Για κάθε συνθήκη ρόμβο, ελέγχουμε τα εξής: a. Αν οι διαδρομές που ξεκινούν από τη συνθήκη/ρόμβο συναντώνται σε κάποιο σημείο στην πορεία τους (χωρίς κάποια από τις δύο να επιστρέφει σε προηγούμενο σημείο του διαγράμματος), τότε πρόκειται για εντολή επιλογής (Αν). Αν η διαδρομή με την ένδειξη Ψευδής έχει κάποια εντολή, πριν συναντήσει την άλλη διαδρομή, τότε η εντολή Αν έχει και τμήμα. b. Αν όχι, τότε υποχρεωτικά κάποια από τις δύο διαδρομές επιστρέφει σε προηγούμενο σημείο του διαγράμματος, οπότε πρόκειται για κάποια εντολή επανάληψης και μένει να δούμε ποια από τις δύο. i. Αν υπάρχουν εντολές μετά τη συνθήκη/ρόμβο, στη διαδρομή που επιστρέφει σε προηγούμενο σημείο, τότε πρόκειται για εντολή Όσο. ii. Αν υπάρχουν εντολές ανάμεσα στο σημείο «επιστροφής» της διαδρομής και της συνθήκης/ρόμβου τότε πρόκειται για την εντολή Μέχρις_ότου, αφού οι εντολές αυτές θα εκτελεστούν τουλάχιστον μία φορά. iii. Ελέγχουμε τη συνθήκη της επανάληψης αν έχει τη σωστή μορφή, διαφορετικά την αντιστρέφουμε. Αν, π.χ. έχουμε εντοπίσει στο διάγραμμα μια εντολή Όσο και η διαδρομή που επιστρέφει προς τα πίσω έχει την ένδειξη Ψευδής αντί για Αληθής, τότε η ερώτηση είναι ανεστραμμένη (βλ. Θέμα Β2, Πανελλαδικές 2014). iv. Δεν υπάρχει περίπτωση να ισχύουν και οι δύο παραπάνω περιπτώσεις ταυτόχρονα (για μία συνθήκη/ρόμβο). Αφού ξεκαθαρίσουμε τι ισχύει για τις συνθήκες/ρόμβους του σχήματος, οι μετατροπή των υπόλοιπων εντολών είναι σχετικά απλή, αν βασιστούμε στους κανόνες τις πρώτης ενότητας. Μπιλάλης Νίκος - ΠΕ19 Σελ. 5 από 7
Παραδείγματα Σ 0 Κ 1 Όσο Κ 100 επανάλαβε Διάβασε Χ Σ Σ + Χ Κ Κ + 1 Μέχρις_ότου Σ > 1000 Σ 0 Για Κ από 1 μέχρι 100 Διάβασε Χ Σ Σ + Χ Μέχρις_ότου Σ > 1000 Σχήμα 10: Θέμα Β1, Πανελλαδικές 2011. Αλγόριθμος Β1 j 1 Όσο j 3 επανάλαβε i 1 Όσο i 3 επανάλαβε Αν i < j τότε Π[i,j] i + j Π[i,j] 0 i i + 1 j j + 1 Τέλος Β1 Αλγόριθμος Β1 Για j από 1 μέχρι 3 Για i από 1 μέχρι 3 Αν i < j τότε Π[i,j] i + j Π[i,j] 0 Τέλος Β1 Σχήμα 11: Θέμα Β1, Επαναληπτικές Πανελλαδικές 2013. Μπιλάλης Νίκος - ΠΕ19 Σελ. 6 από 7
ν 0 s 0 Αν ν mod 2 = 1 τότε x -1 x 1 s s + x/(2*v + 1) v v + 1 Μέχρις_ότου v = 99 π 4*s Εκτύπωσε π Πίνακας 12: Θέμα Β2, Πανελλαδικές 2012. Αλγόριθμος Β2 i 1 s 0 Όσο i 200 επανάλαβε Διάβασε m Αν m > 10 τότε s m + s i i + 1 Εκτύπωσε s Τέλος Β2 Σχήμα 13: Θέμα Β2, Πανελλαδικές 2014. Μπιλάλης Νίκος - ΠΕ19 Σελ. 7 από 7