Δομή επανάληψης (2.2.7.4)

2.2.7.4 Δομή επανάληψης

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

Αριστερά: Βρόχος επανάληψης με συνθήκη εξόδου στην αρχή
Δεξιά: Βρόχος επανάληψης με συνθήκη εξόδου στο τέλος

Παράδειγμα 2.14. Εμφάνιση των ακεραίων από 1 έως Ν.
Να εκπονηθεί αλγόριθμος ο οποίος με δεδομένο ένα θετικό ακέραιο αριθμό θα εμφανίζει τους ακέραιους αριθμούς από το 1 μέχρι και τον δεδομένο αριθμό Ν.

Αλγόριθμος Σειρά_αριθμών
Δεδομένα // Ν //
i  1
Όσο i  Ν επανάλαβε
    Εμφάνισε i
    i  i + 1
Τέλος_επανάληψης
Τέλος Σειρά_αριθμών
Εκτέλεση αλγόριθμου για Ν=3

Στο παράδειγμα οι εντολές εκτελούνται όσο διάστημα η μεταβλητή i είναι μικρότερη ή ίση της μεταβλητής Ν. Συχνά η μεταβλητή i αποκαλείται μετρητής, επειδή αυξάνεται κατά 1. Σε άλλες περιπτώσεις όμως το βήμα αύξησης μπορεί να είναι οποιοδήποτε.
Η εντολή i ← i + 1 δεν είναι εξίσωση, αλλά δρα ως εξής:
κάθε φορά που εκτελείται, το περιεχόμενο της μεταβλητής i αυξάνεται κατά 1.
Όλες οι εντολές επανάληψης μπορούν να πραγματοποιούν την εκτέλεση ενός συνόλου εντολών πάνω από μια φορά.
Στην εντολή Όσο… επανάλαβε οι εμπεριεχόμενες εντολές μπορεί να μην εκτελεστούν ποτέ, αφού η συνθήκη τερματισμού ελέγχεται στην αρχή.
Οι εντολές που συγκροτούν μια εντολή επανάληψης αποκαλούνται βρόχος (αγγλ. loop, γαλ. boucle). Προσοχή: βρόχος, όχι βρόγχος. Βρόχος = θηλιά, βρόγχος = πνευμόνι.

Άσκηση 1(2.14). Εύρεση πολλαπλασίων του 10 μέχρι δοσμένο αριθμό Ν
Να εκπονηθεί αλγόριθμος ο οποίος με δεδομένο ένα θετικό ακέραιο αριθμό θα εμφανίζει τα πολλαπλάσια του 10 μέχρι και τον δεδομένο αριθμό Ν.

Παράδειγμα 2.15. Υπολογισμός μέσου όρου 3 βαθμών για αδιευκρίνιστο αριθμό μαθητών.
Να γραφεί αλγόριθμος ο οποίος διαβάζει το όνομα ενός μαθητή, τους βαθμούς του σε τρία μαθήματα και υπολογίζει και τυπώνει το μέσο όρο του. Ο αλγόριθμος να σταματάει, όταν για όνομα μαθητή δοθεί το κενό εμφανίζοντας το πλήθος των μαθητών για τους οποίους υπολογίστηκε ο μέσος όρος.

Αλγόριθμος Μέσος_όρος
  π  0
  Διάβασε όνομα
  Όσο όνομα  "" επανάλαβε
    Διάβασε α, β, γ
    ΜΟ  (α + β + γ) / 3
    Εμφάνισε ΜΟ
    π  π + 1
    Διάβασε όνομα
  Τέλος_επανάληψης
  Εμφάνισε π
Τέλος Μέσος_όρος
Εκτέλεση του αλγόριθμου για 2 μαθητές

Άσκηση 1(2.15). Συμπλήρωση του παραδείγματος 2.15: Βαθμολογία κάτω από την βάση
Να συμπληρωθεί ο αλγόριθμος του παραδείγματος 2.15 ώστε να εμφανίζεται μήνυμα για κάθε μαθητή αν ο υπολογιζόμενος μέσος όρος είναι κάτω από την βάση. Στο τέλος θα εμφανίζονται ο συνολικός αριθμός των μαθητών που εισήχθηκαν και ο αριθμός των μαθητών με μέσο όρο κάτω από την βάση.

Παράδειγμα 2.16. Υπολογισμός πόντων σε σουπερμάρκετ.
Σε ένα σουπερμάρκετ κάθε πελάτης δικαιούται μια δωροεπιταγή 6 € αν συμπληρώσει 200 πόντους. Να αναπτυχθεί αλγόριθμος ο οποίος θα διαβάζει τους πόντους που κερδίζει ένας συγκεκριμένος πελάτης σε κάθε επίσκεψη στο σουπερμάρκετ και θα εμφανίζει μετά από πόσες επισκέψεις παίρνει τη δωροεπιταγή και ποιος είναι ο μέσος όρος πόντων σε κάθε επίσκεψη.

Αλγόριθμος Σουπερμάρκετ
  Σ  0
  π  0
  Όσο Σ < 200 επανάλαβε
     Διάβασε πόντοι
     Σ  Σ + πόντοι
     π  π + 1
  Τέλος_επανάληψης
  ΜΟ  Σ / π
  Εμφάνισε π, ΜΟ
Τέλος Σουπερμάρκετ
Παράδειγμα εκτέλεσης του αλγόριθμου:

Άσκηση 1(2.16). Εύρεση κρυφού αριθμού από 1 έως 100
Να γραφεί αλγόριθμος ο οποίος θα δέχεται αριθμούς από το χρήστη που θα προσπαθεί να μαντέψει έναν κρυφό αριθμό από το 1 έως το 100. Όταν ο χρήστης βρει τον αριθμό θα εμφανίζεται μήνυμα επιτυχίας και ο αριθμός των προσπαθειών που έκανε για να τον βρει. Σε κάθε προσπάθεια θα τυπώνεται μήνυμα εάν ο κρυφός αριθμός είναι μεγαλύτερος ή μικρότερος από τον αριθμό που εισάγεται.
Υπόδειξη: Για να δημιουργηθεί ο κρυφός αριθμός θα χρησιμοποιηθεί το τμήμα του αλγόριθμου που φαίνεται παρακάτω που δημιουργεί έναν ψευδοτυχαίο αριθμό από το 1 έως το 100.

Αλγόριθμος κρυφός_1_100
Αρχή_επανάληψης
  Εμφάνισε "δώσε αριθμό από 1 έως 100: "
  Διάβασε α
  κρυφός  1 + Α_Μ(ΛΟΓ(0.5*α)*10000 + 99) mod 100
Μέχρις_ότου α  1 και α  100
Τέλος κρυφός_1_100
Παράδειγμα εκτέλεσης του αλγόριθμου:

Παράδειγμα 2.17. Μενού επιλογών.
Να γραφεί ένας αλγόριθμος όπου θα προβάλλεται στην οθόνη ένας κατάλογος από δυνατές επιλογές (menu) και στη συνέχεια ζητείται από το χρήστη να διαλέξει μία μόνο από αυτές. Η επιλογές θα είναι:
(1) Ενημέρωση
(2) Εκτύπωση
(3) Έξοδος

Αλγόριθμος Μενού_επιλογών
 Αρχή_επανάληψης
   Εμφάνισε "(1) Ενημέρωση"
   Εμφάνισε "(2) Εκτύπωση"
   Εμφάνισε "(3) Έξοδος"
   Εμφάνισε "Δώσε την επιλογή σου (1,2 ή 3):"
   Διάβασε επ
 Μέχρις_ότου επ = 1 ή επ = 2 ή επ = 3
 Εμφάνισε "Η επιλογή σου είναι η ", επ
Τέλος Μενού_επιλογών
Εκτέλεση του αλγόριθμου για επιλογή=2

Στον παραπάνω αλγόριθμο, ο βρόχος επαναλαμβάνεται μέχρι να δοθεί 1, 2 ή 3. Με τον τρόπο αυτό προστατεύεται το πρόγραμμα εφαρμογής από τυχόν λανθασμένη εισαγωγή τιμών από τον χρήστη. Ας σημειωθεί, ότι τα προγράμματα εισαγωγής δεδομένων είναι συνήθως τα πιο λεπτομερή και απαιτητικά ως προς τις εντολές εισόδου/εξόδου λόγω της απαίτησης να είναι φιλικά προς το χρήστη αλλά και της ανάγκης για πρόληψη λανθασμένων επιλογών του κατά την είσοδο. Υποτίθεται ότι ανάλογα με την επιλογή, ο πιο πάνω αλγόριθμος διακλαδίζεται σε άλλα σημεία, όπου υπάρχουν οι εντολές υλοποίησης κάθε λειτουργίας.

Άσκηση 1(2.17). Επέκταση του παραδείγματος 2.17
Να συμπληρωθεί ο αλγόριθμος του παραδείγματος 2.17 ώστε να εμφανίζεται κατάλληλο μύνημα λάθους όταν ο χρήστης κάνει λάθος επιλογή και στο τέλος να εμφανίζεται κατάλληλο μύνημα ανάλογα με την σωστή επιλογή που έχει κάνει.

Παράδειγμα 2.18. Άθροισμα εισαγομένων αριθμών συγκεκριμένου πλήθους.
Να γραφεί αλγόριθμος ο οποίος θα διαβάζει 5 αριθμούς και θα υπολογίζει και θα εμφανίζει το άθροισμά τους.

Αλγόριθμος Άθροισμα_Αριθμών
  Σ  0
  Για i από 1 μέχρι 5
    Διάβασε α
    Σ  Σ + α
  Τέλος_επανάληψης
  Εμφάνισε "Άθροισμα:", Σ
Τέλος Άθροισμα_Αριθμών
Εκτέλεση του αλγόριθμου

Σε αυτό το παράδειγμα η εντολή Για…από…μέχρι περιλαμβάνει όλα τα απαραίτητα δεδομένα για την επανάληψη, δηλαδή αρχική τιμή της μεταβλητής i, τελική τιμή και το βήμα μεταβολής που είναι 1 και παραλείπεται. Ο βρόχος εκτελείται για όλες τις τιμές της μεταβλητής i.
Η εντολή εκχώρησης Σ ← Σ + α δεν είναι εξίσωση και καλύτερα να διαβάζεται ως «η νέα τιμή της μεταβλητής Σ είναι η παλιά συν α».
Συχνά η μεταβλητή Σ αποκαλείται αθροιστής, γιατί της εκχωρείται το τρέχον και τελικό άθροισμα των αριθμών και δεν πρέπει να λησμονείται ότι απαιτείται ο μηδενισμός του πριν από την έναρξη της επαναληπτικής διαδικασίας (αρχικοποίηση).
Η χρήση της εντολής Για…από…μέχρι γενικά προτιμάται όταν είναι γνωστός ο αριθμός των φορών που θα γίνει μια επανάληψη, με άλλα λόγια όταν είναι γνωστά η αρχική τιμή, η τελική τιμή και το βήμα.
Εμφωλευμένες εντολές επανάληψης:
Σε όλες τις προηγούμενες περιπτώσεις όπου αναφέρεται εντολή ή εντολές, τίποτα δεν απαγορεύει αυτές οι εντολές να είναι επίσης εντολές επανάληψης. Αναφερόμαστε τότε σε εμφωλευμένες εντολές επανάληψης.

Άσκηση 1(2.18). Εισαγωγή 3 βαθμών και υπολογισμός μέσου όρου
Να γραφεί αλγόριθμος ο οποίος να δέχεται την διαδοχική εισαγωγή 3 βαθμών για κάποιο μάθημα και να υπολογίζει και να εκτυπώνει τον μέσο όρο της βαθμολογίας.

Άσκηση 2(2.18). Εισαγωγή 4 βαθμών και εύρεση του μεγαλύτερου
Να γραφεί αλγόριθμος ο οποίος να δέχεται την διαδοχική εισαγωγή 4 βαθμών για κάποιο μάθημα και να υπολογίζει και να εκτυπώνει τον μεγαλύτερο από αυτούς.

Παράδειγμα 2.18β. Πολλαπλάσια με εμφωλευμένες επαναλήψεις.
Να γραφεί αλγόριθμος ο οποίος υπολογίζει τα πολλαπλάσια του 100 μέχρι το 1000, του 200 μέχρι το 2000 και του 300 μέχρι το 3000. Να χρησιμοποιηθούν εμφωλευμένες επαναλήψεις για την υλοποίηση του αλγόριθμου.

Αλγόριθμος Πολλαπλάσια_με_εμφωλευμένη_επανάληψη
Για i από 1 μέχρι 3
  Εμφάνισε "Πολλαπλάσια του ", i*100, " έως το ", i*1000
  Για j από 100 μέχρι 1000 με_βήμα 100
    Εμφάνισε i*j, "  "
  Τέλος_επανάληψης
  Εμφάνισε ""
  Εμφάνισε ""
Τέλος_επανάληψης
Τέλος Πολλαπλάσια_με_εμφωλευμένη_επανάληψη
Εκτέλεση του αλγόριθμου

Άσκηση 1(2.18β). Πολλαπλάσια με εμφωλευμένες επαναλήψεις σε φθίνουσα σειρά
Να γραφεί αλγόριθμος ο οποίος υπολογίζει τα πολλαπλάσια του 10 μέχρι το 100, του 20 μέχρι το 200, του 30 μέχρι το 300 και του 40 μέχρι το 400 και να τα εμφανίζει σε φθίνουσα σειρά (όπως φαίνεται στην εικόνα παρακάτω). Να χρησιμοποιηθούν εμφωλευμένες επαναλήψεις για την υλοποίηση του αλγόριθμου.


Άσκηση 2(2.18B). Εκτύπωση επαναληπτικού σχήματος
Να αναπτυχθούν αλγόριθμοι, οι οποίοι θα εμφανίζουν τα παρακάτω σχήματα:

      

Άσκηση επανάληψης #1 (Εργασία #1). Υπολογισμός κατανάλωσης ρεύματος
Μία οικογένεια κατανάλωσε Χ Kwh (κιλοβατώρες) ημερησίου ρεύματος και Υ Kwh νυχτερινού ρεύματος.
Το κόστος ημερησίου ρεύματος είναι 0,08€ ανά Kwh και του νυχτερινού 0,05€ ανά Kwh. Να αναπτύξετε έναν αλγόριθμο ο οποίος:
α) Να διαβάζει τα Χ, Υ και να υπολογίζει και να εμφανίζει το συνολικό κόστος της κατανάλωσης ρεύματος της οικογένειας για τον τρέχοντα μήνα.
β) Να εμφανίζει το μήνυμα «ΥΠΕΡΒΟΛΙΚΗ ΚΑΤΑΝΑΛΩΣΗ», αν το συνολικό κόστος είναι μεγαλύτερο από 300€ διαφορετικά θα εμφανίζει το μήνυμα «ΚΑΝΟΝΙΚΗ ΚΑΤΑΝΑΛΩΣΗ».
γ) Να επεκταθούν τα παραπάνω ώστε να λειτουργεί ο αλγόριθμος για ολόκληρο το εξάμηνο.
Θα υπολογίζεται διαδοχικά η κατανάλωση για κάθε μήνα του εξαμήνου και στο τέλος θα υπολογίζεται και θα τυπώνεται:
• η συνολική κατανάλωση του εξαμήνου,
• το συνολικό κόστος των καταναλώσεων του εξαμήνου
• η μέγιστη κατανάλωση του εξαμήνου και
• ο μήνας στον οποίο παρατηρήθηκε.
δ) Να σχεδιαστεί διάγραμμα ροής που να περιγράφει τον αλγόριθμο που αναπτύχθηκε. Για την σχεδίαση μπορεί να χρησιμοποιηθεί η online εφαρμογή σχεδίασης https://app.diagrams.net/ ή κάποια άλλη αντίστοιχη.

Στο αρχείο εισόδου χρησιμοποιείστε τις παρακάτω τιμές για τα Χ και Υ ανά μήνα:
3500
700
2500
1500
2800
800
3400
960
2900
760
3075
880

Άσκηση επανάληψης #2. Υπολογισμός επιδόσεων αθλητών
Σε τρεις διαφορετικούς αγώνες πρόκρισης στο άλμα εις μήκος για τους Ολυμπιακούς Αγώνες
ένας αθλητής πέτυχε τις επιδόσεις a, b, c.
Να αναπτύξετε αλγόριθμο ο οποίος:
α) Να διαβάζει τον κωδικό του αθλητή και τις τιμές των επιδόσεων a, b, c.
β) Να υπολογίζει και να εμφανίζει τη μέση τιμή των παραπάνω τιμών.
γ) Να εμφανίζει το μήνυμα "Ο ΑΘΛΗΤΗΣ ΜΕ ΚΩΔΙΚΟ ΧΧΧΧ ΠΡΟΚΡΙΘΗΚΕ", αν η παραπάνω μέση τιμή είναι μεγαλύτερη των 8 μέτρων διαφορετικά θα εμφανίζει το μήνυμα "Ο ΑΘΛΗΤΗΣ ΜΕ ΚΩΔΙΚΟ ΧΧΧΧ ΔΕΝ ΠΡΟΚΡΙΘΗΚΕ".
δ) Να επεκταθεί ο παραπάνω αλγόριθμος για να υπολογίζει τα παραπάνω και για τους 7 αθλητές που συμμετέχουν στο αγώνισμα. Επίσης να υπολογίζεται και να εκτυπώνεται ο μέσος όρος των επιδόσεων όλων των αθλητών.
ε) Να υπολογίζεται και να εκτυπώνεται ο κωδικός και η επίδοση του αθλητή με το καλύτερο αποτέλεσμα ανάμεσα στους 7.

Στο αρχείο εισόδου χρησιμοποιείστε τις παρακάτω τιμές:
1111
8.19
8.18
7.95
2222
7.96
8.01
7.92
3333
8.09
7.99
8.15
4444
8.09
8.20
8.18
5555
8.20
8.17
8.07
6666
7.97
7.95
7.98
7777
8.17
8.07
8.09