Η μετατροπή μιας δομής επανάληψης σε άλλη δεν είναι μηχανική αντικατάσταση λέξεων. Στόχος είναι ο νέος βρόχος να εκτελεί ακριβώς τις ίδιες εντολές, με την ίδια σειρά και το ίδιο πλήθος φορών. Στο άρθρο αυτό θα μάθουμε πώς μετατρέπουμε σωστά τις δομές ΓΙΑ, ΟΣΟ και ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ…ΜΕΧΡΙΣ_ΟΤΟΥ και θα εφαρμόσουμε τη μεθοδολογία σε 20 πρωτότυπες λυμένες ασκήσεις.

1. Η βασική ιδέα της μετατροπής

Πριν αλλάξουμε έναν βρόχο, εντοπίζουμε τέσσερα στοιχεία:

  1. Αρχικοποίηση: ποια τιμή έχει η μεταβλητή ελέγχου πριν αρχίσει η επανάληψη;
  2. Συνθήκη: πότε συνεχίζεται και πότε σταματά ο βρόχος;
  3. Σώμα: ποιες εντολές επαναλαμβάνονται;
  4. Μεταβολή: πώς αλλάζει η μεταβλητή που ελέγχει την επανάληψη;
Ο κανόνας των τεσσάρων ερωτήσεων
  • Από πού ξεκινώ;
  • Όσο ισχύει τι συνεχίζω;
  • Τι εκτελώ σε κάθε επανάληψη;
  • Πώς πλησιάζω προς τον τερματισμό;

Αν οι τέσσερις απαντήσεις παραμείνουν ίδιες, η μετατροπή είναι ισοδύναμη. Αν χαθεί έστω μία – συνήθως η αρχικοποίηση ή η μεταβολή – ο νέος βρόχος μπορεί να εκτελεστεί λάθος αριθμό φορών ή να μη σταματήσει ποτέ.

2. Συνοπτικός πίνακας μετατροπών

Μετατροπή Τι προσέχουμε Κρίσιμο σημείο
ΓΙΑ → ΟΣΟ Γράφουμε αρχικοποίηση, συνθήκη και μεταβολή μετρητή. Με θετικό βήμα χρησιμοποιούμε συνήθως ≤, με αρνητικό ≥.
ΟΣΟ → ΓΙΑ Πρέπει να υπάρχει μετρητής με σταθερό βήμα και γνωστό όριο. Δεν μετατρέπεται κάθε ΟΣΟ σε ΓΙΑ.
ΟΣΟ → ΜΕΧΡΙΣ_ΟΤΟΥ Αντιστρέφουμε τη συνθήκη. Χρειάζεται ΑΝ, επειδή η ΟΣΟ μπορεί να εκτελεστεί μηδέν φορές.
ΜΕΧΡΙΣ_ΟΤΟΥ → ΟΣΟ Εκτελούμε μία φορά το σώμα πριν από την ΟΣΟ. Η ΜΕΧΡΙΣ_ΟΤΟΥ εκτελείται υποχρεωτικά τουλάχιστον μία φορά.
ΓΙΑ → ΜΕΧΡΙΣ_ΟΤΟΥ Μεταφέρουμε αρχικοποίηση και μεταβολή και ελέγχουμε το κενό εύρος. Με μεταβλητά όρια μπορεί να χρειάζεται προστατευτικό ΑΝ.
ΜΕΧΡΙΣ_ΟΤΟΥ → ΓΙΑ Επιτρέπεται μόνο όταν αποδεικνύεται σταθερό πλήθος επαναλήψεων. Βρόχος με τιμή φρουρό δεν μετατρέπεται σε ΓΙΑ.

3. Μεθοδολογία βήμα προς βήμα

3.1 Μετατροπή ΓΙΑ σε ΟΣΟ

Για θετικό βήμα:

ΓΙΑ i ΑΠΟ αρχική_τιμή ΜΕΧΡΙ τελική_τιμή ΜΕ_ΒΗΜΑ β
  εντολές
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

μετατρέπεται σε:

i ← αρχική_τιμή
ΟΣΟ i <= τελική_τιμή ΕΠΑΝΑΛΑΒΕ
  εντολές
  i ← i + β
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Αν το βήμα είναι αρνητικό, η σύγκριση γίνεται συνήθως i >= τελική_τιμή. Η μεταβολή γράφεται πάντοτε στο τέλος του σώματος, εκτός αν η αρχική άσκηση επιβάλλει διαφορετική σειρά.

3.2 Μετατροπή ΟΣΟ σε ΓΙΑ

Η μετατροπή είναι δυνατή μόνο όταν αναγνωρίζουμε το μοτίβο:

i ← α
ΟΣΟ i <= β ΕΠΑΝΑΛΑΒΕ
  εντολές
  i ← i + γ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Τότε γράφουμε:

ΓΙΑ i ΑΠΟ α ΜΕΧΡΙ β ΜΕ_ΒΗΜΑ γ
  εντολές
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Δεν χρησιμοποιούμε ΓΙΑ όταν ο τερματισμός εξαρτάται από τιμή που πληκτρολογεί ο χρήστης, από τιμή φρουρό ή από άθροισμα που δεν γνωρίζουμε πότε θα ξεπεράσει ένα όριο.

3.3 Μετατροπή ΟΣΟ σε ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ…ΜΕΧΡΙΣ_ΟΤΟΥ

ΟΣΟ συνθήκη ΕΠΑΝΑΛΑΒΕ
  εντολές
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Η ασφαλής γενική μετατροπή είναι:

ΑΝ συνθήκη ΤΟΤΕ
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    εντολές
  ΜΕΧΡΙΣ_ΟΤΟΥ ΟΧΙ συνθήκη
ΤΕΛΟΣ_ΑΝ

Το ΑΝ προστατεύει την ισοδυναμία όταν η αρχική συνθήκη είναι εξαρχής ψευδής. Χωρίς αυτό, η ΜΕΧΡΙΣ_ΟΤΟΥ θα εκτελούσε λανθασμένα το σώμα μία φορά.

3.4 Μετατροπή ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ…ΜΕΧΡΙΣ_ΟΤΟΥ σε ΟΣΟ

ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
  εντολές
ΜΕΧΡΙΣ_ΟΤΟΥ συνθήκη_τερματισμού

μετατρέπεται σε:

εντολές
ΟΣΟ ΟΧΙ συνθήκη_τερματισμού ΕΠΑΝΑΛΑΒΕ
  εντολές
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Το πρώτο αντίγραφο του σώματος εξασφαλίζει την υποχρεωτική πρώτη εκτέλεση. Στη συνέχεια η ΟΣΟ συνεχίζει όσο δεν έχει επιτευχθεί η συνθήκη τερματισμού.

3.5 Μετατροπή ΓΙΑ σε ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ…ΜΕΧΡΙΣ_ΟΤΟΥ

Για θετικό βήμα και πιθανώς μεταβλητά όρια:

i ← αρχική_τιμή
ΑΝ i <= τελική_τιμή ΤΟΤΕ
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    εντολές
    i ← i + βήμα
  ΜΕΧΡΙΣ_ΟΤΟΥ i > τελική_τιμή
ΤΕΛΟΣ_ΑΝ

Για αρνητικό βήμα, ο αρχικός έλεγχος γίνεται με i >= όριο και ο τερματισμός με i < όριο.

4. Τα συνηθέστερα λάθη

  1. Ξεχνάμε την αρχική τιμή του μετρητή πριν από την ΟΣΟ.
  2. Ξεχνάμε τη μεταβολή του μετρητή και δημιουργούμε ατέρμονα βρόχο.
  3. Χρησιμοποιούμε ≤ αντί για ≥ σε βρόχο με αρνητικό βήμα.
  4. Δεν αντιστρέφουμε τη συνθήκη μεταξύ ΟΣΟ και ΜΕΧΡΙΣ_ΟΤΟΥ.
  5. Μετατρέπουμε ΟΣΟ σε ΜΕΧΡΙΣ_ΟΤΟΥ χωρίς προστατευτικό ΑΝ.
  6. Μετατρέπουμε βρόχο αγνώστου πλήθους σε ΓΙΑ.
  7. Αλλάζουμε τη σειρά ανάγνωσης, επεξεργασίας και νέας ανάγνωσης.
  8. Μεταφέρουμε τη μεταβολή του μετρητή πριν από τις εντολές και χάνουμε την πρώτη τιμή.
Γρήγορος έλεγχος λύσης: δοκίμασε μία κανονική περίπτωση, μία περίπτωση μηδενικών επαναλήψεων και μία οριακή τιμή. Αν οι δύο βρόχοι εμφανίζουν τα ίδια αποτελέσματα και κάνουν το ίδιο πλήθος επαναλήψεων, η μετατροπή είναι πολύ πιθανό να είναι σωστή.

5. Μετατροπή επαναλήψεων: 20 λυμένες ασκήσεις

Άσκηση 1 – Από ΓΙΑ σε ΟΣΟ με βήμα 1

Εκφώνηση: Να μετατραπεί ο παρακάτω βρόχος σε ισοδύναμο βρόχο ΟΣΟ.

ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 6
  ΓΡΑΨΕ i^2
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Λύση
i ← 1
ΟΣΟ i <= 6 ΕΠΑΝΑΛΑΒΕ
  ΓΡΑΨΕ i^2
  i ← i + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Ο μετρητής αρχίζει από 1, αυξάνεται κατά 1 και οι δύο βρόχοι χρησιμοποιούν τις τιμές 1 έως 6.

Άσκηση 2 – Από ΓΙΑ σε ΟΣΟ με θετικό βήμα

Εκφώνηση: Να μετατραπεί σε ΟΣΟ ο υπολογισμός του αθροίσματος.

ΑΘΡ ← 0
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 20 ΜΕ_ΒΗΜΑ 3
  ΑΘΡ ← ΑΘΡ + i
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ ΑΘΡ
Λύση
ΑΘΡ ← 0
i ← 2
ΟΣΟ i <= 20 ΕΠΑΝΑΛΑΒΕ
  ΑΘΡ ← ΑΘΡ + i
  i ← i + 3
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ ΑΘΡ

Οι τιμές του i είναι 2, 5, 8, 11, 14, 17 και 20. Το άθροισμα είναι 77 και στις δύο εκδοχές.

Άσκηση 3 – Από ΓΙΑ σε ΟΣΟ με αρνητικό βήμα

Εκφώνηση: Να μετατραπεί ο κατιών βρόχος σε ΟΣΟ.

ΓΙΑ k ΑΠΟ 30 ΜΕΧΡΙ 6 ΜΕ_ΒΗΜΑ -4
  ΓΡΑΨΕ k
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Λύση
k ← 30
ΟΣΟ k >= 6 ΕΠΑΝΑΛΑΒΕ
  ΓΡΑΨΕ k
  k ← k - 4
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Με αρνητικό βήμα χρησιμοποιούμε ≥. Οι εμφανιζόμενες τιμές είναι 30, 26, 22, 18, 14, 10 και 6.

Άσκηση 4 – Από ΟΣΟ σε ΓΙΑ με θετικό σταθερό βήμα

Εκφώνηση: Να αντικατασταθεί η ΟΣΟ από ισοδύναμη ΓΙΑ.

i ← 5
ΟΣΟ i <= 50 ΕΠΑΝΑΛΑΒΕ
  ΓΡΑΨΕ i
  i ← i + 5
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Λύση
ΓΙΑ i ΑΠΟ 5 ΜΕΧΡΙ 50 ΜΕ_ΒΗΜΑ 5
  ΓΡΑΨΕ i
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Υπάρχουν σαφής αρχική τιμή, σταθερό βήμα και γνωστό τελικό όριο, άρα επιτρέπεται η ΓΙΑ.

Άσκηση 5 – Από ΟΣΟ σε ΓΙΑ με αρνητικό βήμα

Εκφώνηση: Να μετατραπεί ο βρόχος σε ΓΙΑ.

j ← 21
ΟΣΟ j >= 3 ΕΠΑΝΑΛΑΒΕ
  ΓΡΑΨΕ j
  j ← j - 3
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Λύση
ΓΙΑ j ΑΠΟ 21 ΜΕΧΡΙ 3 ΜΕ_ΒΗΜΑ -3
  ΓΡΑΨΕ j
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Το βήμα της ΓΙΑ είναι -3, ακριβώς όπως η μεταβολή j ← j - 3.

Άσκηση 6 – Από ΟΣΟ σε ΓΙΑ με μεταβλητό όριο

Εκφώνηση: Η τιμή Ν διαβάζεται πριν από το τμήμα και δεν αλλάζει μέσα στον βρόχο. Να γίνει μετατροπή σε ΓΙΑ.

ΑΘΡ ← 0
i ← 1
ΟΣΟ i <= Ν ΕΠΑΝΑΛΑΒΕ
  ΑΘΡ ← ΑΘΡ + i
  i ← i + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Λύση
ΑΘΡ ← 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
  ΑΘΡ ← ΑΘΡ + i
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Το όριο μπορεί να είναι μεταβλητή, αρκεί να είναι γνωστό πριν αρχίσει ο βρόχος και να μη μεταβάλλεται μέσα σε αυτόν.

Άσκηση 7 – Από ΓΙΑ σε ΜΕΧΡΙΣ_ΟΤΟΥ με βέβαιη πρώτη εκτέλεση

Εκφώνηση: Να μετατραπεί η ΓΙΑ σε ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ…ΜΕΧΡΙΣ_ΟΤΟΥ.

ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 5
  ΓΡΑΨΕ 2*i
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Λύση
i ← 1
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΡΑΨΕ 2*i
  i ← i + 1
ΜΕΧΡΙΣ_ΟΤΟΥ i > 5

Επειδή τα όρια 1 και 5 εγγυώνται τουλάχιστον μία επανάληψη, δεν χρειάζεται προστατευτικό ΑΝ.

Άσκηση 8 – Από ΓΙΑ σε ΜΕΧΡΙΣ_ΟΤΟΥ με μεταβλητά όρια

Εκφώνηση: Οι Α και Β είναι ακέραιες μεταβλητές. Να μετατραπεί η ΓΙΑ χωρίς να αλλάξει η συμπεριφορά όταν Α > Β.

ΓΙΑ i ΑΠΟ Α ΜΕΧΡΙ Β ΜΕ_ΒΗΜΑ 2
  ΓΡΑΨΕ i
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Λύση
i ← Α
ΑΝ i <= Β ΤΟΤΕ
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    ΓΡΑΨΕ i
    i ← i + 2
  ΜΕΧΡΙΣ_ΟΤΟΥ i > Β
ΤΕΛΟΣ_ΑΝ

Αν Α > Β, η αρχική ΓΙΑ εκτελείται μηδέν φορές. Το ΑΝ εξασφαλίζει ακριβώς την ίδια συμπεριφορά.

Άσκηση 9 – Από κατιούσα ΓΙΑ σε ΜΕΧΡΙΣ_ΟΤΟΥ

Εκφώνηση: Να μετατραπεί η παρακάτω ΓΙΑ.

ΓΙΑ k ΑΠΟ 40 ΜΕΧΡΙ 10 ΜΕ_ΒΗΜΑ -5
  ΓΡΑΨΕ k
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Λύση
k ← 40
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΡΑΨΕ k
  k ← k - 5
ΜΕΧΡΙΣ_ΟΤΟΥ k < 10

Η τελευταία τιμή που εμφανίζεται είναι το 10. Μετά γίνεται k=5 και τότε ικανοποιείται η συνθήκη τερματισμού.

Άσκηση 10 – Από ΟΣΟ σε ΜΕΧΡΙΣ_ΟΤΟΥ

Εκφώνηση: Να μετατραπεί σε ΜΕΧΡΙΣ_ΟΤΟΥ.

x ← 0
ΟΣΟ x < 100 ΕΠΑΝΑΛΑΒΕ
  x ← x + 10
  ΓΡΑΨΕ x
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Λύση
x ← 0
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
  x ← x + 10
  ΓΡΑΨΕ x
ΜΕΧΡΙΣ_ΟΤΟΥ x >= 100

Η αρχική συνθήκη είναι σίγουρα αληθής, αφού x=0. Γι’ αυτό εδώ δεν απαιτείται ΑΝ.

Άσκηση 11 – ΟΣΟ με τιμή φρουρό σε ΜΕΧΡΙΣ_ΟΤΟΥ

Εκφώνηση: Το -1 τερματίζει την εισαγωγή και δεν υπολογίζεται. Να γίνει μετατροπή σε ΜΕΧΡΙΣ_ΟΤΟΥ.

ΠΛΗΘΟΣ ← 0
ΔΙΑΒΑΣΕ Θ
ΟΣΟ Θ <> -1 ΕΠΑΝΑΛΑΒΕ
  ΑΝ Θ > 30 ΤΟΤΕ
    ΠΛΗΘΟΣ ← ΠΛΗΘΟΣ + 1
  ΤΕΛΟΣ_ΑΝ
  ΔΙΑΒΑΣΕ Θ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Λύση
ΠΛΗΘΟΣ ← 0
ΔΙΑΒΑΣΕ Θ
ΑΝ Θ <> -1 ΤΟΤΕ
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    ΑΝ Θ > 30 ΤΟΤΕ
      ΠΛΗΘΟΣ ← ΠΛΗΘΟΣ + 1
    ΤΕΛΟΣ_ΑΝ
    ΔΙΑΒΑΣΕ Θ
  ΜΕΧΡΙΣ_ΟΤΟΥ Θ = -1
ΤΕΛΟΣ_ΑΝ

Το ΑΝ είναι απαραίτητο: αν η πρώτη τιμή είναι -1, δεν πρέπει να εκτελεστεί καμία επεξεργασία.

Άσκηση 12 – Έλεγχος εγκυρότητας από ΟΣΟ σε ΜΕΧΡΙΣ_ΟΤΟΥ

Εκφώνηση: Να μετατραπεί ο έλεγχος βαθμού σε ΜΕΧΡΙΣ_ΟΤΟΥ.

ΔΙΑΒΑΣΕ ΒΑΘΜΟΣ
ΟΣΟ ΒΑΘΜΟΣ < 0 Ή ΒΑΘΜΟΣ > 20 ΕΠΑΝΑΛΑΒΕ
  ΓΡΑΨΕ 'Λάθος βαθμός'
  ΔΙΑΒΑΣΕ ΒΑΘΜΟΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Λύση
ΔΙΑΒΑΣΕ ΒΑΘΜΟΣ
ΑΝ ΒΑΘΜΟΣ < 0 Ή ΒΑΘΜΟΣ > 20 ΤΟΤΕ
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    ΓΡΑΨΕ 'Λάθος βαθμός'
    ΔΙΑΒΑΣΕ ΒΑΘΜΟΣ
  ΜΕΧΡΙΣ_ΟΤΟΥ ΒΑΘΜΟΣ >= 0 ΚΑΙ ΒΑΘΜΟΣ <= 20
ΤΕΛΟΣ_ΑΝ

Η συνθήκη τερματισμού είναι η αποδοχή του βαθμού, δηλαδή η άρνηση της αρχικής συνθήκης λάθους.

Άσκηση 13 – Έλεγχος εγκυρότητας από ΜΕΧΡΙΣ_ΟΤΟΥ σε ΟΣΟ

Εκφώνηση: Να μετατραπεί σε ΟΣΟ.

ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
  ΔΙΑΒΑΣΕ ΗΛΙΚΙΑ
ΜΕΧΡΙΣ_ΟΤΟΥ ΗΛΙΚΙΑ >= 1 ΚΑΙ ΗΛΙΚΙΑ <= 100
Λύση
ΔΙΑΒΑΣΕ ΗΛΙΚΙΑ
ΟΣΟ ΗΛΙΚΙΑ < 1 Ή ΗΛΙΚΙΑ > 100 ΕΠΑΝΑΛΑΒΕ
  ΔΙΑΒΑΣΕ ΗΛΙΚΙΑ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Η πρώτη ανάγνωση τοποθετείται πριν από την ΟΣΟ, επειδή η αρχική ΜΕΧΡΙΣ_ΟΤΟΥ διαβάζει υποχρεωτικά τουλάχιστον μία τιμή.

Άσκηση 14 – Άθροισμα μέχρι όριο: από ΜΕΧΡΙΣ_ΟΤΟΥ σε ΟΣΟ

Εκφώνηση: Να μετατραπεί το τμήμα σε ΟΣΟ.

ΑΘΡ ← 0
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
  ΔΙΑΒΑΣΕ x
  ΑΘΡ ← ΑΘΡ + x
ΜΕΧΡΙΣ_ΟΤΟΥ ΑΘΡ >= 100
Λύση
ΑΘΡ ← 0
ΔΙΑΒΑΣΕ x
ΑΘΡ ← ΑΘΡ + x
ΟΣΟ ΑΘΡ < 100 ΕΠΑΝΑΛΑΒΕ
  ΔΙΑΒΑΣΕ x
  ΑΘΡ ← ΑΘΡ + x
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Το σώμα εκτελείται μία φορά πριν από την ΟΣΟ και κατόπιν επαναλαμβάνεται όσο το άθροισμα παραμένει μικρότερο από 100.

Άσκηση 15 – Τιμή φρουρός από ΜΕΧΡΙΣ_ΟΤΟΥ σε ΟΣΟ

Εκφώνηση: Η τιμή 0 ολοκληρώνει την εισαγωγή. Να γίνει μετατροπή σε ΟΣΟ.

ΑΘΡ ← 0
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
  ΔΙΑΒΑΣΕ x
  ΑΘΡ ← ΑΘΡ + x
ΜΕΧΡΙΣ_ΟΤΟΥ x = 0
Λύση
ΑΘΡ ← 0
ΔΙΑΒΑΣΕ x
ΑΘΡ ← ΑΘΡ + x
ΟΣΟ x <> 0 ΕΠΑΝΑΛΑΒΕ
  ΔΙΑΒΑΣΕ x
  ΑΘΡ ← ΑΘΡ + x
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Η πρόσθεση του 0 δεν αλλάζει το άθροισμα. Η σειρά ανάγνωσης και πρόσθεσης διατηρείται ακριβώς.

Άσκηση 16 – Μετατροπή εμφωλευμένων ΓΙΑ σε ΟΣΟ

Εκφώνηση: Να μετατραπούν και οι δύο βρόχοι σε ΟΣΟ.

ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 3
  ΓΙΑ j ΑΠΟ 2 ΜΕΧΡΙ 6 ΜΕ_ΒΗΜΑ 2
    ΓΡΑΨΕ i, j
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Λύση
i ← 1
ΟΣΟ i <= 3 ΕΠΑΝΑΛΑΒΕ
  j ← 2
  ΟΣΟ j <= 6 ΕΠΑΝΑΛΑΒΕ
    ΓΡΑΨΕ i, j
    j ← j + 2
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  i ← i + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Η αρχικοποίηση του j βρίσκεται μέσα στον εξωτερικό βρόχο, ώστε για κάθε νέα τιμή του i ο εσωτερικός βρόχος να ξεκινά ξανά από το 2.

Άσκηση 17 – Διάσχιση πίνακα από ΓΙΑ σε ΟΣΟ

Εκφώνηση: Να μετατραπεί η επεξεργασία του πίνακα σε ΟΣΟ.

ΠΛΗΘΟΣ ← 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
  ΔΙΑΒΑΣΕ Α[i]
  ΑΝ Α[i] MOD 2 = 0 ΤΟΤΕ
    ΠΛΗΘΟΣ ← ΠΛΗΘΟΣ + 1
  ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Λύση
ΠΛΗΘΟΣ ← 0
i ← 1
ΟΣΟ i <= Ν ΕΠΑΝΑΛΑΒΕ
  ΔΙΑΒΑΣΕ Α[i]
  ΑΝ Α[i] MOD 2 = 0 ΤΟΤΕ
    ΠΛΗΘΟΣ ← ΠΛΗΘΟΣ + 1
  ΤΕΛΟΣ_ΑΝ
  i ← i + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Η μεταβολή του δείκτη γίνεται μετά την επεξεργασία του Α[i], ώστε να μη χαθεί η πρώτη θέση.

Άσκηση 18 – Διάσχιση πίνακα από ΟΣΟ σε ΓΙΑ

Εκφώνηση: Να μετατραπεί η ΟΣΟ σε ΓΙΑ.

ΠΛΗΘΟΣ ← 0
i ← 1
ΟΣΟ i <= 50 ΕΠΑΝΑΛΑΒΕ
  ΑΝ Β[i] > 0 ΤΟΤΕ
    ΠΛΗΘΟΣ ← ΠΛΗΘΟΣ + 1
  ΤΕΛΟΣ_ΑΝ
  i ← i + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Λύση
ΠΛΗΘΟΣ ← 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 50
  ΑΝ Β[i] > 0 ΤΟΤΕ
    ΠΛΗΘΟΣ ← ΠΛΗΘΟΣ + 1
  ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Η ΟΣΟ έχει ακριβώς 50 επαναλήψεις και σταθερό βήμα 1, επομένως η ΓΙΑ είναι η φυσική ισοδύναμη μορφή.

Άσκηση 19 – Πότε η μετατροπή σε ΓΙΑ είναι αδύνατη;

Εκφώνηση: Μπορεί ο παρακάτω βρόχος να μετατραπεί σε ΓΙΑ; Αν όχι, να μετατραπεί σε ΜΕΧΡΙΣ_ΟΤΟΥ.

ΑΘΡ ← 0
ΔΙΑΒΑΣΕ x
ΟΣΟ x <> 0 ΕΠΑΝΑΛΑΒΕ
  ΑΘΡ ← ΑΘΡ + x
  ΔΙΑΒΑΣΕ x
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Λύση

Δεν μπορεί να μετατραπεί σε ΓΙΑ, επειδή δεν γνωρίζουμε εκ των προτέρων πόσους αριθμούς θα πληκτρολογήσει ο χρήστης. Μπορεί όμως να μετατραπεί σε ΜΕΧΡΙΣ_ΟΤΟΥ:

ΑΘΡ ← 0
ΔΙΑΒΑΣΕ x
ΑΝ x <> 0 ΤΟΤΕ
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    ΑΘΡ ← ΑΘΡ + x
    ΔΙΑΒΑΣΕ x
  ΜΕΧΡΙΣ_ΟΤΟΥ x = 0
ΤΕΛΟΣ_ΑΝ

Η τιμή φρουρός καθορίζει δυναμικά το τέλος, άρα ταιριάζουν ΟΣΟ ή ΜΕΧΡΙΣ_ΟΤΟΥ και όχι ΓΙΑ.

Άσκηση 20 – Μετατροπή ΓΙΑ και στα δύο άλλα είδη επανάληψης

Εκφώνηση: Να μετατραπεί η ΓΙΑ πρώτα σε ΟΣΟ και έπειτα σε ΜΕΧΡΙΣ_ΟΤΟΥ.

ΑΘΡ ← 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 15 ΜΕ_ΒΗΜΑ 2
  ΑΘΡ ← ΑΘΡ + i^2
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ ΑΘΡ
Λύση με ΟΣΟ
ΑΘΡ ← 0
i ← 1
ΟΣΟ i <= 15 ΕΠΑΝΑΛΑΒΕ
  ΑΘΡ ← ΑΘΡ + i^2
  i ← i + 2
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ ΑΘΡ
Λύση με ΜΕΧΡΙΣ_ΟΤΟΥ
ΑΘΡ ← 0
i ← 1
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
  ΑΘΡ ← ΑΘΡ + i^2
  i ← i + 2
ΜΕΧΡΙΣ_ΟΤΟΥ i > 15
ΓΡΑΨΕ ΑΘΡ

Και οι τρεις μορφές επεξεργάζονται τους περιττούς αριθμούς 1, 3, 5, 7, 9, 11, 13 και 15.

6. Συχνές ερωτήσεις

Γιατί αντιστρέφεται η συνθήκη μεταξύ ΟΣΟ και ΜΕΧΡΙΣ_ΟΤΟΥ;

Η ΟΣΟ χρησιμοποιεί συνθήκη συνέχισης: επαναλαμβάνει όσο η συνθήκη είναι αληθής. Η ΜΕΧΡΙΣ_ΟΤΟΥ χρησιμοποιεί συνθήκη τερματισμού: σταματά όταν η συνθήκη γίνει αληθής. Επομένως οι δύο συνθήκες πρέπει να είναι αντίθετες.

Χρειάζεται πάντα ΑΝ στη μετατροπή ΟΣΟ σε ΜΕΧΡΙΣ_ΟΤΟΥ;

Χρειάζεται όταν υπάρχει πιθανότητα η ΟΣΟ να μην εκτελεστεί καθόλου. Αν από τις αρχικές τιμές αποδεικνύεται ότι η συνθήκη είναι οπωσδήποτε αληθής, το ΑΝ μπορεί να παραλειφθεί.

Μπορεί κάθε ΟΣΟ να μετατραπεί σε ΓΙΑ;

Όχι. Απαιτούνται μετρητής, γνωστή αρχική τιμή, γνωστό τελικό όριο και σταθερό μη μηδενικό βήμα. Επαναλήψεις με τιμή φρουρό ή άγνωστο πλήθος εισόδων δεν μετατρέπονται σε ΓΙΑ.

Τι αλλάζει όταν το βήμα είναι αρνητικό;

Η μεταβλητή μειώνεται και η συνθήκη συνέχισης είναι συνήθως της μορφής i >= τελικό_όριο. Στη ΜΕΧΡΙΣ_ΟΤΟΥ η αντίστοιχη συνθήκη τερματισμού γίνεται i < τελικό_όριο.

Πώς ελέγχω ότι η μετατροπή μου είναι σωστή;

Καταγράφω τις τιμές της μεταβλητής ελέγχου και συγκρίνω την έξοδο των δύο βρόχων. Ελέγχω επίσης την περίπτωση μηδενικών επαναλήψεων και την τελευταία οριακή τιμή.

7. Συμπέρασμα

Η ασφαλής μετατροπή δομών επανάληψης βασίζεται στη διατήρηση της αρχικοποίησης, της συνθήκης, του σώματος και της μεταβολής. Η ΓΙΑ είναι κατάλληλη για γνωστό πλήθος επαναλήψεων, η ΟΣΟ ελέγχει πριν από κάθε εκτέλεση και η ΜΕΧΡΙΣ_ΟΤΟΥ ελέγχει μετά, άρα εκτελείται τουλάχιστον μία φορά. Όταν αυτές οι διαφορές γίνουν κατανοητές, οι μετατροπές παύουν να είναι αποστήθιση και γίνονται μια σταθερή, ελεγχόμενη διαδικασία.


0 Comments

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *

You cannot copy content of this page

Ασκήσεις ΑΕΠΠ με Λύσεις – Θέματα Α,Β,Γ & Δ για Πανελλήνιες | infoclass.gr