Δομή Επανάληψης Κεφάλαιο 7 Mike Trimos
Δομή Επανάληψης Η Διαδικασία αυτή ονομάζεται Βρόγχος ή Επανάληψη (Loop) και η εντολή ή το σύνολο των εντολών που επαναλαμβάνονται ονομάζεται Σώμα της Δομής. Η γλώσσα προγραμματισμού PASCAL προσφέρει τρία είδη εντολών επανάληψης, τα οποία χρησιμοποιούνται ανάλογα με την περίπτωση: FOR/DO WHILE/DO REPEAT/UNTIL
Η εντολή FOR/DO Η εντολή αυτή χρησιμοποιείται στις περιπτώσεις όπου ο προγραμματιστής γνωρίζει τον ακριβή αριθμό επαναλήψεων μιας εντολής ή ενός συνόλου εντολών. FOR <Μεταβλητή Ελέγχου>:= <Αρχική Τιμή> ΤΟ <Τελική Τιμή> DO <Σώμα της Δομής>; Μεταβλητή Ελέγχου Αρχική Τιμή Ψευδής Είναι η Μεταβλητή Ελέγχου <= της Τελικής Τιμής Αληθής Εκτέλεση του Σώματος της επανάληψης Μεταβλητή Ελέγχου Μεταβλητή Ελέγχου + Βήμα Αύξησης
Η εντολή FOR/DO Η <Αρχική Τιμή> και <Τελική Τιμή> είναι τιμές του ίδιου τύπου με την Μεταβλητή Ελέγχου και δεν μπορούν να είναι τύπου REAL Η Αρχική τιμή πρέπει να είναι μικρότερη της Τελικής τιμής. Αν αυτό δεν είναι ορθό η δομή επανάληψης δεν εκτελείται και αγνοείται χωρίς να εμφανίζει κάποιο μήνυμα για συντακτικό λάθος. Αυτό το γεγονός όμως υποδεικνύει πιθανό ΛΟΓΙΚΟ ΛΑΘΟΣ. Η Μετάβαση από την αρχική στην τελική τιμή γίνεται εξ ορισμού με βήμα αύξησης 1 Αν το <Σώμα της Δομής> αποτελείται από δύο ή περισσότερες εντολές, τότε αυτές τοποθετούνται μεταξύ των λέξεων BEGIN & END. Η επανάληψη σταματά να εκτελείται, μόλις η τιμή της μεταβλητής ελέγχου γίνει μια μονάδα μεγαλύτερη από την τελική τιμή.
Παράδειγμα 1 Να γραφεί πρόγραμμα στην PASCAL που να τυπώνει όλα τα κεφαλαία γράμματα του Λατινικού Αλφαβήτου. Program LatinLetters(Input, Output); VAR enterkey, letter: CHAR; BEGIN FOR letter:= A TO Z DO WRITE(letter:2); WRITELN; WRITELN( Πατήστε το ENTER για να σταματήσει το Πρόγραμμα ); READ(enterkey); END. Το πρόγραμμα να μετατραπεί με τέτοιο τρόπο ώστε να χρησιμοποιηθεί μεταβλητή ελέγχου τύπου INTEGER και να εκτυπώνει πάλι το Λατινικό Αλφάβητο.
Παράδειγμα 2 Να γραφτεί πρόγραμμα στην PASCAL που να υπολογίζει το μέσο όρο των ακεραίων αριθμό από το 10 έως και το 15 συμπεριλαμβανομένων. Program Average(Input, Output); VAR no, sum, metritis: INTEGER; mesos_oros: REAL; BEGIN metritis:=0; sum:=0; FOR no:=10 TO 15 DO begin sum:=sum+no; metritis:=metritis+1; end; mesos_oros:=sum/metritis; WRITELN; WRITELN( The Average is:, mesos_oros:6:2); END>
Παράδειγμα 2 Πίνακας Προκαταρτικής Εκτέλεσης Νο Sum Metritis Συνθήκη Ελέγχου 0 0 10 Αληθής 10 1 11 Αληθής 21 2 12 Αληθής 33 3 13 Αληθής 46 4 14 Αληθής 60 5 15 Αληθής 75 6 Mesos_oros 16 Ψευδής 12.50 12.50 Αποτέλεσμα
Φθίνουσα Επανάληψη τύπου FOR/DO FOR <Μεταβλητή Ελέγχου >:= < Αρχική Τιμή > DOWNTO <Τελική Τιμή> DO < Σώμα της Δομής>; Η <Αρχική Τιμή> πρέπει να είναι μεγαλύτερη της <Τελικής Τιμής> Η Μετάβαση από την <Αρχική Τιμή> στην <Τελική Τιμή> γίνεται εξ ορισμού με βήμα μείωσης 1 Το <Σώμα της Δομής> εκτελείται για όλες τις τιμές της <Μεταβλητής Ελέγχου> από την <Αρχική> μέχρι τη <Τελική> Η Επανάληψη σταματά να εκτελείται, μόλις η τιμή της <Μεταβλητής Ελέγχου> γίνει μικρότερη από την τελική τιμή.
Φθίνουσα Επανάληψη τύπου FOR/DO Παράδειγμα Να Γραφεί πρόγραμμα που να τυπώνει όλους τους ακέραιους αριθμούς από το 10 ως και το 0 Program DownNumbering(Input, Output); VAR arithmos: INTEGER; BEGIN FOR arithmos:= 10 DOWNTO 0 DO begin WRITE(arithmos:3); end; END.
ΑΣΚΗΣΕΙΣ (1) Κατασκευάστε Λογικό Διάγραμμα και γράψετε πρόγραμμα το οποίο να τυπώνει τους πρώτους 12 όρους της πιο κάτω σειράς: 1 2 3 4 5 2 3 4 5 6.. (1) Υπολογίστε το άθροισμα των πρώτων 20 όρων της πιο κάτω σειράς: 1-2+3-4+7-6+13-8+21.
Οι Εντολές WHILE/DO WHILE <Συνθήκη> DO <Σώμα της Δομής> Η <Συνθήκη> είναι μια απλή σύνθετη λογική συνθήκη Το <Σώμα της Δομής> αποτελείται από μία ή περισσότερες εντολές Αρχική τιμή Μεταβλητής Ελέγχου Συνθήκη Ελέγχου Αληθής Ψευδής Εκτέλεση του Σώματος της Δομής Μεταβολή τιμής Μεταβλητής Ελέγχου
Οι Εντολές WHILE/DO Η Αρχική τιμή της μεταβλητής ελέγχου πρέπει να προσδιορίζεται πριν από το WHILE/DO Η Μεταβλητή Ελέγχου πρέπει να μεταβάλλεται σε κάθε επανάληψη πριν από την εξέταση της στη Συνθήκη Ελέγχου. Αν αυτό δεν γίνει τότε η ΔΟΜΗ θα εκτελείται επ αόριστο δημιουργώντας ένα Ατέρμονα Βρόγχο. Παράδειγμα Γράψετε Πρόγραμμα το οποίο να υπολογίζει το άθροισμα της πιο κάτω σειράς μέχρι που το άθροισμα να ξεπεράσει το 100. Το πρόγραμμα θα τυπώνει το άθροισμα και τον συνολικό αριθμό των όρων της σειράς. 1,3,5,7,9...
Program SeriesSum(Input, Output); VAR Couter, No, Sum: INTEGER; BEGIN Counter:=0; Sum:=0; No:=1; WHILE (Sum<=100) DO Begin Sum:=Sum+No; No:=No+2; Counter:=Counter+1; End; WRITELN( The Number of Terms is:, Counter:3); WRITELN( The SUM is:, Sum:3); END.
Η Εντολή REPEAT/UNTIL REPEAT <Σώμα της Δομής> UNTIL <Συνθήκη>; Παράδειγμα Να γραφτεί πρόγραμμα που να υπολογίζει το άθροισμα των πρώτων 20 περιττών αριθμών.
Program OddSum(Input, Output); VAR Couter, No, Sum, todd: INTEGER; BEGIN Counter:=1; Sum:=0; No:=1; REPEAT WRITELN( Arithmos is:,no:3); No:=No+1; todd:=no mod 2; if todd=1 then begin Counter:=Counter+1; Sum:=Sum+No; end; UNTIL(Counter=20); END. WRITELN( The Number of Terms is:, Counter:3); WRITELN( The SUM is:, Sum:3);
REPEAT/UNTIL Ο Η.Υ. εκτελεί πρώτα το σώμα της δομής και μετά ελέγχει τη συνθήκη. Εάν η Συνθήκη είναι ψευδής τότε ολόκληρο το σώμα της δομής εκτελείται ξανά. Η διαδικασία αυτή επαναλαμβάνεται εως ότου η συνθήκη γίνει αληθής. Το Σώμα της δομής θα εκτελεστεί τουλάχιστον μια φορά, ανεξάρτητα από τις αρχικές τιμές των μεταβλητών που ελέγχουν την Συνθήκη Ελέγχου. Η μεταβλητή που καθορίζει την τιμή της συνθήκης ελέγχου πρέπει να έχει μια Αρχική τιμή πριν από την εντολή REPEAT/UNTIL Η τιμή της μεταβλητής ελέγχου θα πρέπει να μεταβάλλεται μέσα στο σώμα της δομής
Ποια Συνθήκη να χρησιμοποιηθεί Όταν είναι να χρησιμοποιηθεί η εντολή FOR/DO τότε είναι η πιο κατάλληλη αφού είναι η πιο εύκολη. Όταν γνωρίζουμε το συνολικό αριθμό των επαναλήψεων ή την Αρχική και Τελική τιμή της μεταβλητής ελέγχου της επανάληψης η εντολή FOR/DO είναι η πιο κατάλληλη. Όταν υπάρχει περίπτωση το σώμα της δομής να μην εκτελεστεί ούτε μια φορά τότε η πιο κατάλληλη δομή είναι εντολή WHILE/DO Όταν το σώμα της δομής πρέπει να εκτελεστεί τουλάχιστο μια φορά, τότε η πιο κατάλληλη δομή είναι η εντολή REPEAT/UNTIL
Ασκήσεις Άσκηση 1 Άσκηση 2 Άσκηση 3 * ** *** **** * * * * * * * * * * Άσκηση 4 * * * * * * * * *