Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄ Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄ 4.3.1 Δομή Επανάληψης
Στην πράξη πολύ λίγοι αλγόριθμοι χρησιμοποιούν μόνο τις δομές ακολουθίας και επιλογής Συνήθως στα ρεαλιστικά προβλήματα χρειάζεται μία σειρά ενεργειών να επαναληφθεί πολλές φορές
Δομή Επανάληψης Χρήση: μία ακολουθία εντολών πρέπει να εφαρμοσθεί σε ένα σύνολο περιπτώσεων, που έχουν κάτι κοινό. Παράδειγμα: τόκοι καταθέσεων ταμιευτηρίου Ο υπολογισμός των τόκων πρέπει να γίνει για όλους τους λογαριασμούς της τράπεζας, άρα η πράξη τόκος = ποσό * επιτόκιο πρέπει να εκτελεσθεί για όλους τους τραπεζικούς λογαριασμούς
Δύο τύποι επαναλήψεων Προκαθορισμένοι: το πλήθος των επαναλήψεων είναι δεδομένο πριν αρχίσουν οι επαναλήψεις (for) Μη προκαθορισμένοι ή απροσδιόριστοι: το πλήθος των επαναλήψεων καθορίζεται κατά τη διάρκεια της εκτέλεσης των εντολών του σώματος της επανάληψης (while)
Βρόχος (loop) Είναι μια ακολουθία εντολών οι οποίες δηλώνονται μία φορά, αλλά μπορούν να εκτελεστούν πολλές φορές για έναν καθορισμένο αριθμό επαναλήψεων (for) ή για όσο ισχύει μία συνθήκη (while βρόχος)
Οι βρόχοι for εκτελούνται για συγκεκριμένο πλήθος φορών Για τη δημιουργία της χρησιμοποιείται η συνάρτηση range() for onoma_metavlitis in range (αρχή, μέχρι, βήμα): Εντολή 1 Εντολή 2 ….. Εντολή ν
Εμφάνιση της λέξης ΚΑΛΗΜΕΡΑ 5 φορές for i in range (5): print ‘ ΚΑΛΗΜΕΡΑ ’ Εμφάνιση της λέξης ΚΑΛΗΜΕΡΑ 5 φορές
H ακολουθία range Ενσωματωμένη συνάρτηση της Python Δομή μορφής: (αρχή, μέχρι, βήμα), όπου: Αρχή , μέχρι , βήμα ακέραιοι αριθμοί Οι ενδείξεις της «αρχής» και του «βήματος» δεν είναι υποχρεωτικές H ένδειξη «μέχρι» πρέπει πάντα να αναφέρεται range(4) (0,1,2,3) range(1,10) (1,2,3,4,5,6,7,8,9) range(5,50,10) (5,15,25,35,45)
for i in range (5): print i 0 , 1 , 2 , 3 , 4 for i in range (2,5): print i 2 , 3 , 4 for i in range (2,10,2): print i 2 , 4 , 6 , 8 10 , 8 , 6 , 4, for i in range (10,2,-2): print i
for variable in sequence: Εντολές Η εντολή for κάνει επανάληψη διατρέχοντας τα στοιχεία μιας ακολουθίας, για παράδειγμα μιας συμβολοσειράς ή μιας λίστας με τη σειρά με την οποία αυτά εμφανίζονται στην ακολουθία for c in “hello”: print(c)
Να γραφεί αλγόριθμος ο οποίος θα διαβάζει την ακτίνα ενός κύκλου και θα υπολογίζει και θα εμφανίζει το εμβαδόν του Αλγόριθμος παράδειγμα Εμφάνισε “Δώσε ακτίνα κύκλου” Διάβασε R E 3.14 * R ^ 2 Εμφάνισε “Εμβαδόν = ”, Ε Τέλος παράδειγμα
Να γραφεί αλγόριθμος ο οποίος για 50 κύκλους θα διαβάζει την ακτίνα του κύκλου και θα υπολογίζει και θα εμφανίζει το εμβαδόν τους Αλγόριθμος παράδειγμα Για i από 1 μέχρι 50 Εμφάνισε “Δώσε ακτίνα ”, i , “ου κύκλου” Διάβασε R E 3.14 * R ^ 2 Εμφάνισε “Εμβαδόν = ”, Ε Τέλος_επανάληψης Τέλος παράδειγμα
R = input ( “ Δώσε ακτίνα κύκλου ” ) Να γραφεί πρόγραμμα σε Python το οποίο για 5 κύκλους θα διαβάζει την ακτίνα του κύκλου και θα υπολογίζει και θα εμφανίζει το εμβαδόν τους for i in range (5): R = input ( “ Δώσε ακτίνα κύκλου ” ) E = 3.14 * R ** 2 print “ Εμβαδόν = ” , Ε
print ' Δώσε ακτίνα ‘ , i , ' κύκλου ' R = input() E = 3.14 * R ** 2 Να γραφεί πρόγραμμα σε Python το οποίο για 5 κύκλους θα διαβάζει την ακτίνα του κύκλου και θα υπολογίζει και θα εμφανίζει το εμβαδόν τους for i in range (1,6): print ' Δώσε ακτίνα ‘ , i , ' κύκλου ' R = input() E = 3.14 * R ** 2 print ‘Εμβαδόν = ’, Ε
print ' Δώσε ακτίνα ‘ , i+1 , ' κύκλου ' R = input() E = 3.14 * R ** 2 Να γραφεί πρόγραμμα σε Python το οποίο για 5 κύκλους θα διαβάζει την ακτίνα του κύκλου και θα υπολογίζει και θα εμφανίζει το εμβαδόν τους for i in range (5): print ' Δώσε ακτίνα ‘ , i+1 , ' κύκλου ' R = input() E = 3.14 * R ** 2 print ‘Εμβαδόν = ’, Ε
Να γραφεί αλγόριθμος ο οποίος θα διαβάζει 100 αριθμούς και θα υπολογίζει και θα εμφανίζει το άθροισμά τους Αλγόριθμος Άθροισμα_Αριθμών Σ0 Για i από 1 μέχρι 100 Εμφάνισε “Δώσε αριθμό” Διάβασε Α Σ Σ + Α Τέλος_επανάληψης Εμφάνισε “Άθροισμα αριθμών = ”, Σ Τέλος Άθροισμα_Αριθμών
Να γραφεί πρόγραμμα σε Python το οποίο θα διαβάζει 7 αριθμούς και θα υπολογίζει και θα εμφανίζει το άθροισμά τους athroisma = 0 for i in range(7) : x = input ( “ Δώσε έναν αριθμό: " ) athroisma = athroisma + x print ‘ To αποτέλεσμα είναι ’ , athroisma
print ‘ Άθροισμα = ’ , athroisma Να γραφεί πρόγραμμα σε Python το οποίο θα διαβάζει 7 αριθμούς και θα υπολογίζει και θα εμφανίζει το άθροισμά τους athroisma = 0 for i in range(5) : x = input ( “ Δώσε έναν αριθμό: " ) athroisma = athroisma + x print ‘ Άθροισμα = ’ , athroisma print ‘ Τελικό άθροισμα = ’ , athroisma
Να γραφεί πρόγραμμα σε Python το οποίο θα εμφανίζει τους άρτιους αριθμούς στο διάστημα [1,100] for i in range (2,101,2): print i 2 , 4 , 6 , 8 , 10 , 12 , … , 98 , 100
Δομή Επανάληψης με while βρόχο μη προκαθορισμένος αριθμός επαναλήψεων υπάρχει περίπτωση να μην εκτελεστούν οι εντολές του βρόχου ο έλεγχος της συνθήκης πραγματοποιείται πριν από την εκτέλεση των εντολών του βρόχου Εκτελούνται οι εντολές όσο η συνθήκη είναι αληθής
πριν το βρόχο while θα πρέπει αρχικά να δώσουμε μία τιμή στη μεταβλητή που ελέγχει τη συνθήκη του βρόχου, ώστε ανάλογα να εκτελεστεί ή όχι ο βρόχος Αρχική τιμή μεταβλητής While ονομα_μεταβλητής <συνθήκη>: Εντολή 1 Εντολή 2 …. Εντολή ν θα πρέπει μέσα στο μπλοκ εντολών να υπάρχει κατάλληλη εντολή, ώστε να εξασφαλίζεται ότι κάποια στιγμή η συνθήκη θα γίνει ψευδής και θα διακοπεί ο βρόχος. Διαφορετικά ο βρόχος δε θα τερματίζει (ΑΤΕΡΜΩΝ ΒΡΟΧΟΣ)
Να γραφεί αλγόριθμος ο οποίος διαβάζει το όνομα ενός μαθητή, τους βαθμούς του σε τρία μαθήματα και υπολογίζει και τυπώνει το μέσο όρο του. Ο αλγόριθμος να σταματάει, όταν για όνομα μαθητή δοθεί το κενό εμφανίζοντας το πλήθος των μαθητών για τους οποίους υπολογίστηκε ο μέσος όρος.
Αλγόριθμος Μέσος_όρος πλήθος 0 Εμφάνισε “Δώσε όνομα μαθητή” Διάβασε όνομα Όσο όνομα ≠ '' '' επανάλαβε Διάβασε β1, β2 , β3 ΜΟ (β1 + β2 + β3) / 3 Εμφάνισε “ Ο μέσος όρος είναι: ” , ΜΟ πλήθος πλήθος + 1 Εμφάνισε “Δώσε όνομα επόμενου μαθητή” Τέλος_επανάληψης Εμφάνισε πλήθος Τέλος Μέσος_όρος
plithos=0 name = raw_input ( “ Δώσε όνομα μαθητή ” ) while name plithos=0 name = raw_input ( “ Δώσε όνομα μαθητή ” ) while name != '' '' : print ‘ Δώσε τους τρεις βαθμούς… ’ b1 = float ( input() ) b2 = float ( input() ) b3 = float ( input() ) mo = float ( ( b1 + b2 + b3 ) / 3 ) print “ Ο μέσος όρος είναι: ” , mo plithos = plithos + 1 name = raw_input ( “ Δώσε όνομα επόμενου μαθητή ” ) print ‘ Αριθμός μαθητών που δόθηκαν = ’ , plithos
plithos=0 name = raw_input ( “ Δώσε όνομα μαθητή ” ) while name plithos=0 name = raw_input ( “ Δώσε όνομα μαθητή ” ) while name != '' '' : athroisma = 0 for i in range ( 3 ) : b = float ( input ( ‘ Δώσε βαθμό… ’ ) ) athroisma = athroisma + b mo = float ( athroisma / 3 ) print “ Ο μέσος όρος είναι: ” , mo plithos = plithos + 1 name = raw_input ( “ Δώσε όνομα επόμενου μαθητή ” ) print ‘ Αριθμός μαθητών που δόθηκαν = ’ , plithos
Τιμή φρουρός Η τιμή η οποία τερματίζει μία επανάληψη Στο προηγούμενο παράδειγμα ήταν το κενό
Σε ένα σουπερμάρκετ κάθε πελάτης δικαιούται μια δωροεπιταγή 6 € αν συμπληρώσει 200 πόντους. Να αναπτυχθεί αλγόριθμος ο οποίος θα διαβάζει τους πόντους που κερδίζει ένας συγκεκριμένος πελάτης σε κάθε επίσκεψη στο σουπερμάρκετ και θα εμφανίζει μετά από πόσες επισκέψεις παίρνει τη δωροεπιταγή και ποιος είναι ο μέσος όρος πόντων σε κάθε επίσκεψη.
Αλγόριθμος Παράδειγμα άθροισμα 0 πλήθος 0 Όσο άθροισμα < 200 επανάλαβε Διάβασε πόντοι άθροισμα άθροισμα + πόντοι πλήθος πλήθος + 1 Τέλος_επανάληψης ΜΟ άθροισμα / πλήθος Εμφάνισε “Πλήθος επισκέψεων : ” , πλήθος Εμφάνισε “Μέσος όρος πόντων : ”, ΜΟ Τέλος Παράδειγμα
athroisma = 0 plithos = 0 while athroisma < 200 : points = input ( ‘ Δώσε πόντους επίσκεψης… ’ ) athroisma = athroisma + points plithos = plithos + 1 print ‘ Άθροισμα πόντων μέχρι τώρα…’ , athroisma print ‘ Αριθμός επισκέψεων μέχρι τώρα…’ , plithos mo = float ( athroisma / plithos ) print ‘ Τελικό άθροισμα πόντων : ’ , athroisma print ‘ Τελικό πλήθος επισκέψεων : ’ , plithos print ‘ Μέσος όρος πόντων : ’ , mo
Παράδειγμα 2. Να γραφεί αλγόριθμος που να διαβάζει άγνωστο πλήθος αριθμών και να υπολογίζει και να εμφανίζει το μέσο όρο τους. Η διαδικασία εισαγωγής των αριθμών να σταματά όταν για αριθμός δοθεί το μηδέν.
Αλγόριθμος Βασικό_Παράδειγμα άθροισμα 0 πλήθος 0 Εμφάνισε “ Δώστε ένα αριθμό ” Διάβασε Α Όσο Α ≠ 0 επανάλαβε άθροισμα άθροισμα + Α πλήθος πλήθος + 1 Εμφάνισε “ Δώστε επόμενο αριθμό ή μηδέν για έξοδο ” Τέλος_επανάληψης Αν πλήθος ≠ 0 τότε ΜΟ άθροισμα / πλήθος Εμφάνισε “ Μέσος όρος αριθμών : ” , ΜΟ αλλιώς Εμφάνισε “ Δεν δόθηκαν αριθμοί ” Τέλος_αν Τέλος Βασικό_Παράδειγμα
Δοκιμάστε να τρέξετε το πρόγραμμα δίνοντας ως πρώτη τιμή athroisma = 0 plithos = 0 a = input ( ‘ Δώσε έναν αριθμό… ’ ) while a != 0 : athroisma = athroisma + a plithos = plithos + 1 a = input ( ‘ Δώσε έναν αριθμό μηδέν για τερματισμό…’ ) mo = float ( athroisma / plithos ) print ‘ Μέσος όρος αριθμών: ’ , mo Τι παρατηρείτε;;; Διορθώστε το λάθος… Δοκιμάστε να τρέξετε το πρόγραμμα δίνοντας ως πρώτη τιμή στο a το μηδέν
athroisma = 0 plithos = 0 a = input ( ‘ Δώσε έναν αριθμό… ’ ) while a athroisma = 0 plithos = 0 a = input ( ‘ Δώσε έναν αριθμό… ’ ) while a != 0 : athroisma = athroisma + a plithos = plithos + 1 a = input ( ‘ Δώσε έναν αριθμό μηδέν για τερματισμό…’ ) if plithos != 0 : mo = float ( athroisma / plithos ) print ‘ Μέσος όρος αριθμών: ’ , mo else: print ‘Δεν δόθηκαν αριθμοί ’