ΜΟΡΦΕΣ ΔΟΜΩΝ ΕΠΑΝΑΛΗΨΗΣ ΟΣΟ μια_συνθήκη_ισχύει ΕΠΑΝΑΛΑΒΕ εντολές ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ Α ΓΙΑ μεταβλητή ΑΠΟ Χ ΜΕΧΡΙ Υ [ΜΕ_ΒΗΜΑ Ζ] εντολές ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ Β ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ εντολές ΜΕΧΡΙΣ_ΟΤΟΥ μια_συνθήκη_ισχύσει Γ
ΑΝΤΙΣΤΟΙΧΙΑ ΔΟΜΩΝ ΕΠΑΝΑΛΗΨΗΣ Στις περισσότερες περιπτώσεις, μπορούν να χρησιμοποιηθούν και οι τρεις δομές επανάληψης. Π.χ. : Να γραφεί τμήμα προγράμματος που να εμφανίζει τους αριθμούς 1 - 100 i 1 ΟΣΟ i <= 100 ΕΠΑΝΑΛΑΒΕ ΓΡΑΨΕ i i i + 1 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ i 1 ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ i i i + 1 ΜΕΧΡΙΣ_ΟΤΟΥ i > 100 ΓΙΑ i ΑΠΌ 1 ΜΕΧΡΙ 100 ΓΡΑΨΕ i ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΕΝΙΚΑ Χρησιμοποιείται μόνο σε γνωστό πλήθος επαναλήψεων. ΓΕΝΙΚΑ Χρησιμοποιείται σε όλες τις περιπτώσεις ΓΕΝΙΚΑ Ισχύουν τα ίδια με την ΟΣΟ, με τη διαφορά ότι οι εντολές επανάληψης εκτελούνται σίγουρα μια φορά.
ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΔΟΜΗ ΓΙΑ ΣΕ ΟΣΟ ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΔΟΜΗ ΓΙΑ ΣΕ ΟΣΟ Σ ← 0 ΓIA i ΑΠΟ 1 ΜΕΧΡΙ 100 ΔΙΑΒΑΣΕ Χ Σ ← Σ + Χ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ Σ ← 0 i ← 1 ΟΣΟ i <=100 ΕΠΑΝΑΛΑΒΕ ΔΙΑΒΑΣΕ Χ Σ ← Σ + Χ i ← i + 1 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΔΟΜΗ ΟΣΟ ΣΕ ΓΙΑ (1) ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΔΟΜΗ ΟΣΟ ΣΕ ΓΙΑ (1) i ← 2 ΟΣΟ i <=10 ΕΠΑΝΑΛΑΒΕ ΔΙΑΒΑΣΕ Α ΓΡΑΨΕ Α i ← i + 2 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓIA i ΑΠΟ 2 ΜΕΧΡΙ 10 ΜΕ_ΒΗΜΑ 2 ΔΙΑΒΑΣΕ Α ΓΡΑΨΕ Α ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΔΟΜΗ ΟΣΟ ΣΕ ΓΙΑ (2) ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΔΟΜΗ ΟΣΟ ΣΕ ΓΙΑ (2) i ← 100 ΟΣΟ i >=10 ΕΠΑΝΑΛΑΒΕ ΓΡΑΨΕ i i ← i - 2 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓIA i ΑΠΟ 100 ΜΕΧΡΙ 10 ΜΕ_ΒΗΜΑ -2 ΓΡΑΨΕ i ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΔΟΜΗ ΟΣΟ ΣΕ ΓΙΑ (3) ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΔΟΜΗ ΟΣΟ ΣΕ ΓΙΑ (3) x ← 8 ΟΣΟ x > 0 ΕΠΑΝΑΛΑΒΕ ΓΡΑΨΕ x x ← x - 2 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓIA x ΑΠΟ 8 ΜΕΧΡΙ 2 ΜΕ_ΒΗΜΑ -2 ΓΡΑΨΕ x ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ Όταν στη συνθήκη του ΟΣΟ δεν έχουμε = θέλει προσοχή στην τελική τιμή του ΓΙΑ, ώστε και να τυπωθούν σωστά οι τιμές του x αλλά και η τελική τιμή του x να είναι ίδια και στις 2 περιπτώσεις.
ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΔΟΜΗ ΜΕΧΡΙΣ_ΟΤΟΥ ΣΕ ΟΣΟ Σ ← 0 Μ ← 1000 ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ ΔΙΑΒΑΣΕ αρ Σ ← Σ + αρ M ← M + 1 ΜΕΧΡΙΣ_ΟΤΟΥ (Σ < -100) ή ( Μ = 2008) ΓΡΑΨΕ Σ, Μ Σ ← 0 Μ ← 1000 ΟΣΟ Σ >= -100 ΚΑΙ Μ <> 2008 ΕΠΑΝΑΛΑΒΕ ΔΙΑΒΑΣΕ αρ Σ ← Σ + αρ M ← M + 1 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΔΟΜΗ ΟΣΟ ΣΕ ΜΕΧΡΙΣ_ΟΤΟΥ ΔΙΑΒΑΣΕ x ΟΣΟ x< >0 ΕΠΑΝΑΛΑΒΕ y ← x ^ 2 ΓΡΑΨΕ y ΔΙΑΒΑΣΕ x ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΔΙΑΒΑΣΕ x ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ ΑΝ x<>0 ΤΟΤΕ y ← x ^ 2 ΓΡΑΨΕ y ΔΙΑΒΑΣΕ x ΤΕΛΟΣ_ΑΝ ΜΕΧΡΙΣ_ΟΤΟΥ x = 0
ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΔΟΜΗ ΜΕΧΡΙΣ_ΟΤΟΥ ΣΕ ΟΣΟ ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ ΔΙΑΒΑΣΕ x y ← x ^ 2 ΓΡΑΨΕ y ΜΕΧΡΙΣ_ΟΤΟΥ x = 0 ΔΙΑΒΑΣΕ x y ← x ^ 2 ΓΡΑΨΕ y ΟΣΟ x <> 0 ΕΠΑΝΑΛΑΒΕ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ Επειδή η ΜΕΧΡΙΣ_ΟΤΟΥ εκτελεί τουλάχιστον μια φορά όλες τις εντολές της, γι' αυτό όταν την μετατρέπουμε στην ΟΣΟ πρέπει όλες τις εντολές της να τις γράψουμε μια φορά πριν την ΟΣΟ και άλλη μια φορά μέσα σ' αυτήν.
ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΔΟΜΗ ΓΙΑ ΣΕ ΜΕΧΡΙΣ_ΟΤΟΥ (1) ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΔΟΜΗ ΓΙΑ ΣΕ ΜΕΧΡΙΣ_ΟΤΟΥ (1) ΓΙΑ x ΑΠΟ 1 ΜΕΧΡΙ 10 ΓΡΑΨΕ x ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ x ← 1 ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ x x ← x + 1 ΜΕΧΡΙΣ_ΟΤΟΥ x > 10
ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΔΟΜΗ ΓΙΑ ΣΕ ΜΕΧΡΙΣ_ΟΤΟΥ (2) ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΔΟΜΗ ΓΙΑ ΣΕ ΜΕΧΡΙΣ_ΟΤΟΥ (2) ΓΙΑ x ΑΠΟ 1 ΜΕΧΡΙ κ ΓΡΑΨΕ x ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ x ← 1 ΑΝ x <= κ TOTE ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ x x ← x + 1 ΜΕΧΡΙΣ_ΟΤΟΥ x > κ ΤΕΛΟΣ_ΑΝ Προφανώς αν το κ είναι μικρότερο του 1, η δομή ΓΙΑ δεν θα εκτελεστεί καμία φορά , γι’ αυτό προστέθηκε η δομή επιλογής για να αποφύγουμε την εκτέλεση της ΜΕΧΡΙΣ_ΟΤΟΥ.
ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΔΟΜΗ ΜΕΧΡΙΣ_ΟΤΟΥ ΣΕ ΓΙΑ (1) ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΔΟΜΗ ΜΕΧΡΙΣ_ΟΤΟΥ ΣΕ ΓΙΑ (1) X A ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ X X + 2 ΓΡΑΨΕ X ΜΕΧΡΙΣ_ΟΤΟΥ X >= M ΓIA Χ ΑΠΟ Α ΜΕΧΡΙ Μ-1 ΜΕ_ΒΗΜΑ 2 ΓΡΑΨΕ X + 2 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΔΟΜΗ ΜΕΧΡΙΣ_ΟΤΟΥ ΣΕ ΓΙΑ (2) ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΔΟΜΗ ΜΕΧΡΙΣ_ΟΤΟΥ ΣΕ ΓΙΑ (2) AN x > 1 TOTE y x ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ y y - 2 ΓΡΑΨΕ y ΜΕΧΡΙΣ_ΟΤΟΥ y <= 0 ΤΕΛΟΣ_ΑΝ AN x > 1 TOTE ΓIA y ΑΠΟ x ΜΕΧΡΙ 1 ΜΕ_ΒΗΜΑ -2 ΓΡΑΨΕ y-2 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΑΝ