ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ(ΒΡΟΧΟΙ) ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ(ΒΡΟΧΟΙ) For I:=1 to 10 Do 2. While posotita<> 0 Do … 3. Repeat ... Until posotita: = 0
Βασικοί στόχοι Να γνωρίσουμε τις εντολές επανάληψης στην Turbo – Pascal. Να κατανοήσουμε τις διαφορές μεταξύ των τριών εντολών επανάληψης. Να αναλύσουμε προγράμματα που χρησιμοποιούν τις εντολές επανάληψης. Να επιλύσουμε προβλήματα με τη χρήση των εντολών επανάληψης.
Εντολές Επανάληψης(Βρόχοι) Με τις εντολές επανάληψης είναι δυνατή η εκτέλεση μιας ακολουθίας προτάσεων του προγράμματος πολλές φορές. Όταν ο αριθμός των επαναλήψεων είναι γνωστός από πριν τότε χρησιμοποιούμε το For… 2. Όταν η εκτέλεση της επανάληψης του βρόχου εξαρτάται από την ικανοποίηση της συνθήκης που προηγείται, τότε χρησιμοποιούμε το While 3. Όταν η επανάληψη του βρόχου εξαρτάται από την ικανοποίηση της συνθήκης που ακολουθεί, τότε χρησιμοποιούμε το, Repeat - Until
Παράδειγμα 1 Program for_1; Uses wincrt; Var metritis,fores:integer; Begin writeln(‘poses fores thelete na emfanistei i protasi’); writeln(‘stin othoni sas; ‘); readln(fores); FOR metritis:=1 TO fores DO writeln(‘Oloi diathetoume ena ekpliktiko egkefalo’); End.
Παράδειγμα 2 Program While_2; Uses wincrt; Var posotita,timi,synolo:real; Begin Wrtiteln(‘Dose <0> stin posotita gia na stamatiseis to programma’); write(‘Dose tin posotita: ’); readln(posotita); WHILE posotita<> 0 DO begin write(‘Dose tin timi: ’); readln(timi); synolo:=posotita*timi; writeln;writeln; writeln(‘To apotelesma se ECU einai..’,synolo:10:2); writeln;write(‘Dose tin posotita: ’); End End.
Παράδειγμα 3 Program repeat_3; Uses wincrt; Var posotita,timi,synolo:real; apantisi:char; Begin Repeat write(‘Dose tin posotita…’); readln(posotita); write(‘ Dose tin timi…’); readln(timi); synolo:=posotita*timi; writeln;writeln; writeln(‘To apotelesma se ECu einai…’,synolo:10:2); writeln; write(‘Tha kanete kai allo ypologismo(N/O) ‘); readln(apantisi); Until apantisi=‘o’ End.
Δομή επανάληψης όσο ικανοποιείται η συνθήκη Η δομή επανάληψης είναι μια ολοκληρωμένη πρόταση η οποία περικλείει μια συνθήκη και μια ομάδα εντολών, οι οποίες εκτελούνται, όσο ικανοποιείται η συνθήκη ΟΣΟ συνθήκη Εντολή 1 Εντολή 2 : : ΕΠΑΝΑΛΑΒΕ Συνθήκη Ψευδής Ψευδής Ψευδής Συνθήκη Αληθής Αληθής Αληθής Αληθής Oμάδα εντολών
3.14159 Γ 1 2 3.14159 R ΠΡΟΓΡΑΜΜΑ Πίνακας_Γινόμενο ‘Εισαγωγή σταθεράς τιμής του π π ← 3.14159 ‘Επεξεργασία δεδομένων ΓΡΑΨΕ ”Ακτίνα, Γινόμενο” R ← 1 ΟΣΟ R<=5 Γ ← π*R ΓΡΑΨΕ R, Γ R ← R+1 ΕΠΑΝΑΛΑΒΕ ΤΕΛΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ Αληθής Αληθής Αληθής Αληθής Οθόνη Ακτίνα, Γινόμενο Μνήμη. Περιοχή μεταβλητών 1 3.14159 π R Γ 3.14159 2 1 3.14159
3.14159 Γ 2 3 3.14159 6.28318 R ΠΡΟΓΡΑΜΜΑ Πίνακας_Γινόμενο ‘Εισαγωγή σταθεράς τιμής του π π ← 3.14159 ‘Επεξεργασία δεδομένων ΓΡΑΨΕ ”Ακτίνα, Γινόμενο” R ← 1 ΟΣΟ R<=5 Γ ← π*R ΓΡΑΨΕ R, Γ R ← R+1 ΕΠΑΝΑΛΑΒΕ ΤΕΛΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ Αληθής Αληθής Αληθής Αληθής Οθόνη Ακτίνα, Γινόμενο 1 3.14159 Μνήμη. Περιοχή μεταβλητών 2 6.28318 π R Γ 3.14159 2 3 3.14159 6.28318
3.14159 Γ 4 3 6.28318 9.42477 R ΠΡΟΓΡΑΜΜΑ Πίνακας_Γινόμενο ‘Εισαγωγή σταθεράς τιμής του π π ← 3.14159 ‘Επεξεργασία δεδομένων ΓΡΑΨΕ ”Ακτίνα, Γινόμενο” R ← 1 ΟΣΟ R<=5 Γ ← π*R ΓΡΑΨΕ R, Γ R ← R+1 ΕΠΑΝΑΛΑΒΕ ΤΕΛΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ Αληθής Αληθής Αληθής Αληθής Οθόνη Ακτίνα, Γινόμενο 1 3.14159 2 6.28318 Μνήμη. Περιοχή μεταβλητών π R Γ 3.14159 3 9.42477 4 3 9.42477 6.28318
3.14159 Γ 5 4 12.56636 9.42477 R ΠΡΟΓΡΑΜΜΑ Πίνακας_Γινόμενο ‘Εισαγωγή σταθεράς τιμής του π π ← 3.14159 ‘Επεξεργασία δεδομένων ΓΡΑΨΕ ”Ακτίνα, Γινόμενο” R ← 1 ΟΣΟ R<=5 Γ ← π*R ΓΡΑΨΕ R, Γ R ← R+1 ΕΠΑΝΑΛΑΒΕ ΤΕΛΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ Αληθής Αληθής Αληθής Αληθής Οθόνη Ακτίνα, Γινόμενο 1 3.14159 2 6.28318 3 9.42477 Μνήμη. Περιοχή μεταβλητών π R Γ 3.14159 5 4 4 12.56636 12.56636 9.42477
3.14159 Γ 6 5 15.70795 12.56636 R ΠΡΟΓΡΑΜΜΑ Πίνακας_Γινόμενο ‘Εισαγωγή σταθεράς τιμής του π π ← 3.14159 ‘Επεξεργασία δεδομένων ΓΡΑΨΕ ”Ακτίνα, Γινόμενο” R ← 1 ΟΣΟ R<=5 Γ ← π*R ΓΡΑΨΕ R, Γ R ← R+1 ΕΠΑΝΑΛΑΒΕ ΤΕΛΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ Αληθής Αληθής Αληθής Αληθής Οθόνη Ακτίνα, Γινόμενο 1 3.14159 2 6.28318 3 9.42477 4 12.56636 Μνήμη. Περιοχή μεταβλητών π R Γ 3.14159 6 5 15.70795 12.56636 5 15.70795
ΠΡΟΓΡΑΜΜΑ Πίνακας ‘Εισαγωγή σταθεράς τιμής του π π ← 3.14159 ‘Επεξεργασία δεδομένων ΓΡΑΨΕ ”Ακτίνα, Γινόμενο” R ← 1 ΟΣΟ R<=5 Γ ← π*R ΓΡΑΨΕ R, Γ R ← R+1 ΕΠΑΝΑΛΑΒΕ ΤΕΛΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ Ψευδής Ψευδής Ψευδής Ψευδής Οθόνη Ακτίνα, Γινόμενο 1 3.14159 2 6.28318 3 9.42477 4 12.56636 Μνήμη. Περιοχή μεταβλητών π R Γ 3.14159 6 15.70795 5 15.70795
Καθιερωμένες συναρτήσεις Στη Turbo Pascal υπάρχουν καθιερωμένες συναρτήσεις τις οποίες μπορούμε να χρησιμοποιήσουμε. Abs Επιστέφει την απόλυτη τιμή ενός αριθμού. Π.χ. Abs(-2.5) Επιστρέφει την τιμή 2.5
2. Sqr Επιστρέφει το τετράγωνο ενός αριθμού. Επιστρέφει το 25. 3. Sqrt Επιστρέφει την τετραγωνική ρίζα ενός αριθμού. Π.χ. Sqrt(4) Επιστρέφει τον αριθμό 2. Round Στρογγυλεύει έναν αριθμό. Το αποτέλεσμα είναι πάντα ακέραιος αριθμός. Αν το δεκαδικό μέρος είναι μικρότερο από 0.5, ο αριθμός παίρνει την τιμή του ακέραιου μέρους. Αλλιώς, στρογγυλεύει στον επόμενο ακέραιο. Π.χ. Round(4.46) Επιστρέφει τον αριθμό 4
Παραδείγματα Να γράψετε ένα πρόγραμμα το οποίο να διαβάζει ένα πραγματικό αριθμό. Στη συνέχεια να υπολογίζετε και να τυπώνετε την τετραγωνική ρίζα του αριθμού. Program tertagoniki_riza; Uses wincrt; Var X:real; Begin Write(‘Dose ena arithmo:’); If x>0 then write(‘H riza tou aritmou einai…’,Sqrt(x):8:4) Else write(X:6:2,’Einai arnitikos arithmos kai den exei riza’); End.
Παραδείγματα Nα γραφεί ένα πρόγραμμα το οποίο να υπολογίζει και να τυπώνει τις πραγματικές λύσεις μιας δευτεροβάθμιας εξίσωσης. Διαφορετικά να τυπώνει το μήνυμα “Μιγαδικές ρίζες”. Χ1,2= (-β±√Δ)/(2α)
Program Lysi_Deuterovathmias; Uses wincrt; Var A,b,c,D,x1,x2:Real; Begin Write(‘Dose tous syntelestes tiw deuterovathmias eksisosis..’); Readln(a,b,c); D:=b*b-4*a*c; If D>0 then begin writeln(‘Diakrinousa..’,D:8:2); x1:=(-b+D)/(2*a); x2:=(-b-D)/(2*a); writeln(‘X1=‘x1:6:2); writeln(‘X2=‘x2:6:2); End Else write(‘Diakrinousa…’,D:6:2,’Migadikes rizes’); End.
Aσκήσεις Να γράψετε ένα πρόγραμμα το οποίο να υπολογίζει και να τυπώνει τον μέσο όρο των πρώτων Ν-ακεραίων αριθμών. Να γράψετε ένα πρόγραμμα το οποίο θα υπολογίζει και θα τυπώνει το άθροισμα των 25 πρώτων ακεραίων αριθμών. (α) Χρησιμοποιώντας την εντολή Repeat-until (β) Χρησιμοποιώντας την εντολή While-End.
3. Nα γραφεί ένα πρόγραμμα που να τυπώνει τον πίνακα πολλαπλασιασμού για τους Ν πρώτους ακέραιους αριθμούς, πολλαπλασιασμένους με τους ακέραιους από το 1 μέχρι το Μ. 4. Να γραφεί ένα πρόγραμμα στο οποίο θα πληκτρολογήσετε διάφορους αριθμούς. Στη συνέχεια θα μετράει πόσοι είναι μεγαλύτεροι από το 10. Το πρόγραμμα να τερματίζετε όταν πληκτρολογηθεί το ‘0’.
5. Να γράψετε ένα πρόγραμμα που θα υπολογίζει το αποτέλεσμα πολλαπλασιάζοντας την ποσότητα των εμπορευμάτων, επί την τιμή. Ο υπολογισμός θα επαναλαμβάνεται μέχρι να δοθεί ποσότητα ‘0’. 6. Να γράψετε ένα πρόγραμμα που θα κάνει αρίθμηση μέχρι ένα αριθμό που θα καθορίζει ο χρήστης. π.χ. Αν ο χρήστης καθορίσει να γίνεται αρίθμηση μέχρι το 8, τότε να τυπώνεται: 1 2 3 4 5 6 7 8
Απαντήσεις Program askisi_1; Uses wincrt; Var Average:Real; I,Sum,max:Integer; Begin Write(‘Dose ton arithmo mexri ton opoio tha vreis ton meso oro: ’); readln(max); sum:=0; For I:= 1 to Max Do sum:=sum+I End; Average:=sum/max; writeln(‘O mesos oros ton proton ‘,max’ arithmwn einai…’,Average); End.
Program Askisi_2_a; Uses wincrt; Var sum,num:Integer; Begin sum:=0; num:=1; Repeat sum:=sum+num; num:=num+1 Until num>25; Writeln(‘To athrisma twn 25 prwtwn akeraion einai…..:’,sum); End.
Program Askisi_2_b; Uses wincrt; Var sum,num:Integer; Begin sum:=0; num:=1; while num<26 Do sum:=sum+num; num:=num+1 End; Writeln(‘To athrisma twn 25 prwtwn akeraion einai..’,sum); End.
Program Askisi_3; Uses wincrt; Var i,j,k,n,m:Integer; Begin write(‘Dose dyo arithmous gia na kathoriseis to megethos tou pinaka pollaplasiasmou…n, m…:’); Readln(m,n); for i:= 1 to m Do begin writeln; for j:= 1 to n Do k:=j*I; writeln(j,’x’,I,’=‘,k) End End.
Program Askisi_4; Uses wincrt; Var Count,num:Integer; begin count:=0; Repeat write(‘Dose ena arithmo’); write(‘gia na stamatiseis to programma dose to ..0’); Readln(num); if num>10 then count:=count+1 Until num=0; writeln(‘ Arithmoi megalyteroi tou 10 einai…:’,count) End.
Program Askisi_5; Uses wincrt; Var posotita,timi,synolo:real; Begin write(‘ Dose tin posotita twn emporeumatwn…..’); writeln(‘An dosete ¨0¨ stin posotita, to programma termatizetai’); readln(posotita); while posotita<> 0 Do write(‘Dose tin timi’); readln(timi); synolo:=posotita*timi; writeln;writeln; writeln(‘To synolo se ECU einai…’,synolo:10:2); writeln; write(‘Dose tin posotita…’); End; End.
Program Askisi_6; Uses wincrt; Var i,arithmos:integer; Begin writeln(‘Arithmisi apo to 1 mexri to…..); Writeln; write(‘Mexri pion arithmo thelete na ginei I arithmisi;…’); readln(arithmos); i:=0; while i< arithmos Do i:=i+1; write(i:5); End; End.