Όσο <συνθήκη> Επανάλαβε
Εντολές
Τέλος_Επανάληψης
Συνήθως γίνεται
Αν <συνθήκη> τότε
Αρχή_Επανάληψης
Εντολές
Μέχρις_ότου ΟΧΙ <συνθήκη>
Τέλος_αν
Αν ωστόσο είμαστε σίγουροι ότι η Όσο..επανέλαβε
εκτελείται τουλάχιστον μία φορά η εντολή αν..τότε μπορεί να παραληφθεί.
Παράδειγμα
|
Όσο Χ > 50 επανάλαβε Γράψε Χ ^ 2 Διάβασε Χ Τέλος_επανάληψης |
Αν Χ> 50 τότε Αρχή_επανάληψης Γράψε Χ^2 Διάβασε Χ Μέχρις_ότου Χ<=50 Τέλος_αν |
Αρχή_επανάληψης
Εντολές
Μέχρις_ότου < συνθήκη >
Συνήθως γίνεται:
Εντολές
Όσο ΟΧΙ < συνθήκη > Επανάλαβε
Εντολές
Τέλος_επανάληψης
Αν ωστόσο είμαστε σίγουροι ότι η όσο..επανέλαβε εκτελείται τουλάχιστον μία φορά δε χρειάζεται να γράψουμε τις Εντολές πριν την όσο..επανέλαβε
Παράδειγμα
|
Αρχή_επανάληψης Γράψε ’Δώσε αριθμό’ Διάβασε Χ Μέχρις_ότου Χ>0 |
Γράψε ’Δώσε αριθμό’ Διάβασε Χ Όσο Χ<=0 Επανάλαβε Γράψε ’Δώσε αριθμό’ Διάβασε Χ Τέλος_επανάληψης |
Για μεταβλητή Από τιμή1 Μέχρι τιμή2 Με_βήμα β
Εντολές
Τέλος_επανάληψης
Συνήθως γίνεται:
Μεταβλητή τιμη1
Όσο <συνθήκη> Επανάλαβε
Εντολές
Μεταβλητή Μεταβλητή + β
Τέλος_επανάληψης
Όπου συνθήκη είναι:
· Μεταβλητή <= τιμή2, αν τιμή1<=τιμή2 και β>0
· Μεταβλητή >= τιμή2, αν τιμή1>=τιμή2 και β<0
Παράδειγμα
|
Για Κ από 15 μέχρι 2 με_βήμα -3 Διάβασε Χ Γράψε Κ*Χ Τέλος_επανάληψης |
Κ15 Όσο Κ >= 2 επανάλαβε Διάβασε Χ Γράψε Κ*Χ ΚΚ-3 Τέλος_επανάληψης |
Για να είναι δυνατή η μετατροπή αυτή θα πρέπει να γνωρίζουμε τον ακριβή αριθμό των επαναλήψεων της όσο..επανέλαβε πράγμα που σημαίνει ότι δεν μετατρέπεται κάθε όσο..επανέλαβε σε για..από..μέχρι.
Έτσι αν τιμή1 <= τιμή2 και β >0 η ακόλουθη σειρά εντολών
Μεταβλητή τιμή1
Όσο μεταβλητή <= τιμή2 Επανάλαβε
Εντολές
Μεταβλητή Μεταβλητή + β
Τέλος_επανάληψης
Μπορεί να αντικατασταθεί από
Για μεταβλητή από τιμή1 μέχρι τιμή2 με_βήμα β
Εντολές
Τέλος_επανάληψης
Επίσης αν τιμή1 >= τιμή2 και β <0 η ακόλουθη σειρά εντολών
Μεταβλητή τιμή1
Όσο μεταβλητή <= τιμή2 Επανάλαβε
Εντολές
Μεταβλητή Μεταβλητή + β
Τέλος_επανάληψης
Μπορεί να αντικατασταθεί από
Για μεταβλητή από τιμή1 μέχρι τιμή2 με_βήμα β
Εντολές
Τέλος_επανάληψης
|
Κ5 Όσο Κ<=55 επανάλαβε Γράψε Κ ΚΚ +2 Τέλος_επανάληψης |
Για Κ από 5 μέχρι 55 με_βήμα 2 Γράψε Κ Τέλος_επανάληψης |
Πρέπει να προσέξουμε ιδιαίτερα όταν η μεταβολή του μετρητή δεν βρίσκεται πριν από το Τέλος_επανάληψης.
Για παράδειγμα
|
Κ5 Όσο Κ<=15 επανάλαβε Κ Κ +2 Γράψε κ Τέλος_επανάληψης Οι τιμές που θα εμφανιστούν είναι οι: 7,9,11,13,15,17 |
Για Κ από 5 μέχρι 15 με_βήμα 2 Γράψε Κ Τέλος_επανάληψης Αν το μετατρέψω κανονικά οι τιμές που θα πάρω είναι οι: 5,7,9,11,13,15 Αν θέλω να πάρω τις σωστές πρέπει να αυξήσω κατά το βήμα 2 το 5 και το 15 άρα: Για Κ από 5+2=7 μέχρι 15+2=17 με_βήμα 2 Γράψε Κ Τέλος_επανάληψης 7,9,11,13,15,17 |
Η μετατροπή πραγματοποιείται σε δύο φάσεις:
· Μετατρέπουμε την για..από..μέχρι σε όσο..επανέλαβε
· Μετατρέπουμε την όσο..επανέλαβε σε μέχρις..ότου
|
Διάβασε Μ Για Κ από 4 μέχρι Μ με_βήμα 3 Γράψε Κ Τέλος_επανάληψης |
Διάβασε Μ Κ4 Όσο Κ<=Μ επανάλαβε Γράψε Κ ΚΚ +3 Τέλος_επανάληψης |
Διάβασε Μ Αν Μ>=4 τότε Κ4 Αρχή_επανάληψης Γράψε Κ ΚΚ+3 Μέχρις_ότου Κ>Μ Τέλος_αν |
Για να είναι δυνατή η μετατροπή αυτή θα πρέπει να γνωρίζουμε τον ακριβή αριθμό των επαναλήψεων της Μέχρις_ότου πράγμα που σημαίνει ότι δεν μετατρέπεται κάθε Μέχρις_ότου σε Για..από..μέχρι. Αν είναι εφικτή η μετατροπή τότε κι αυτή πραγματοποιείται σε δύο φάσεις:
· Μετατρέπουμε την Μέχρις_ότου σε Όσο..επανέλαβε
· Μετατρέπουμε την Όσο..επανέλαβε σε Για..από..μέχρι
|
Κ1 Αρχή_επανάληψης ΑΑ + Κ ΚΚ +7 Μέχρις_ότου Κ >120 |
Κ1 Όσο Κ<=120 επανάλαβε ΑΑ+Κ ΚΚ +7 Τέλος_επανάληψης |
Για Κ από 1 μέχρι 120 με_βήμα 7 ΑΑ+Κ Τέλος_επανάληψης |
|
Για Κ από 1 μέχρι 10 Για Λ από 1 μέχρι 5 Γράψε Κ,Λ Τέλος_επανάληψης Τέλος_επανάληψης |
Κ1 Όσο Κ<=10 επανάλαβε Λ1 Όσο Λ<=5 επανάλαβε Γράψε Κ,Λ ΛΛ+1 Τέλος_επανάληψης ΚΚ+1 Τέλος_επανάληψης |
Κ1 Αρχή_επανάληψης Λ1 Αρχή_επανάληψης Γράψε Κ,Λ ΛΛ+1 Μέχρις_ότου Λ>5 ΚΚ+1 Μέχρις_ότου Κ>10 |