ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ(ΒΡΟΧΟΙ) 1.For I:=1 to 10 Do 2. While posotita<> 0 Do … 3. Repeat … ... Until posotita: = 0
Mar 17, 2016
ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ(ΒΡΟΧΟΙ)
1.For I:=1 to 10 Do
2. While posotita<> 0 Do …
3. Repeat…...Until posotita: = 0
Βασικοί στόχοι
• Να γνωρίσουμε τις εντολές επανάληψης στην Turbo – Pascal.
• Να κατανοήσουμε τις διαφορές μεταξύ των τριών εντολών επανάληψης.
• Να αναλύσουμε προγράμματα που χρησιμοποιούν τις εντολές επανάληψης.
• Να επιλύσουμε προβλήματα με τη χρήση των εντολών επανάληψης.
Εντολές Επανάληψης(Βρόχοι)
Με τις εντολές επανάληψης είναι δυνατή η εκτέλεση μιας ακολουθίας προτάσεων του προγράμματος πολλές φορές.
1. Όταν ο αριθμός των επαναλήψεων είναι γνωστός από πριν τότε χρησιμοποιούμε το For…
2. Όταν η εκτέλεση της επανάληψης του βρόχου εξαρτάται από την ικανοποίηση της συνθήκης που προηγείται, τότε χρησιμοποιούμε το While
3. Όταν η επανάληψη του βρόχου εξαρτάται από την ικανοποίηση της συνθήκης που ακολουθεί, τότε χρησιμοποιούμε το, Repeat - Until
Παράδειγμα 1Program 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 DOwriteln(‘Oloi diathetoume ena ekpliktiko egkefalo’);End.
Παράδειγμα 2Program 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 DObeginwrite(‘Dose tin timi: ’);readln(timi);synolo:=posotita*timi;writeln;writeln;writeln(‘To apotelesma se ECU einai..’,synolo:10:2);writeln;write(‘Dose tin posotita: ’);readln(posotita);End
End.
Παράδειγμα 3Program repeat_3;Uses wincrt;Var
posotita,timi,synolo:real;apantisi:char;
BeginRepeatwrite(‘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 ‘Επεξεργασία δεδομένων ΓΡΑΨΕ ”Ακτίνα, Γινόμενο” R ← 1 ΟΣΟ R<=5 Γ ← π*R ΓΡΑΨΕ R, Γ R ← R+1 ΕΠΑΝΑΛΑΒΕΤΕΛΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ
Μνήμη. Περιοχή μεταβλητών
π R Γ
13.14159
Οθόνη
Ακτίνα, Γινόμενο1 3.14159
ΑληθήςΑληθήςΑληθήςΑληθής
3.141592
ΠΡΟΓΡΑΜΜΑ Πίνακας_Γινόμενο‘Εισαγωγή σταθεράς τιμής του π π ← 3.14159 ‘Επεξεργασία δεδομένων ΓΡΑΨΕ ”Ακτίνα, Γινόμενο” R ← 1 ΟΣΟ R<=5 Γ ← π*R ΓΡΑΨΕ R, Γ R ← R+1 ΕΠΑΝΑΛΑΒΕΤΕΛΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ
Μνήμη. Περιοχή μεταβλητών
π R Γ
23.14159
Οθόνη
Ακτίνα, Γινόμενο1 3.141592 6.28318
ΑληθήςΑληθήςΑληθήςΑληθής
3.141593
6.28318
ΠΡΟΓΡΑΜΜΑ Πίνακας_Γινόμενο‘Εισαγωγή σταθεράς τιμής του π π ← 3.14159 ‘Επεξεργασία δεδομένων ΓΡΑΨΕ ”Ακτίνα, Γινόμενο” R ← 1 ΟΣΟ R<=5 Γ ← π*R ΓΡΑΨΕ R, Γ R ← R+1 ΕΠΑΝΑΛΑΒΕΤΕΛΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ
Μνήμη. Περιοχή μεταβλητών
π R Γ
36.28318
Οθόνη
Ακτίνα, Γινόμενο1 3.141592 6.283183 9.42477
ΑληθήςΑληθήςΑληθήςΑληθής
3.141594
9.42477
ΠΡΟΓΡΑΜΜΑ Πίνακας_Γινόμενο‘Εισαγωγή σταθεράς τιμής του π π ← 3.14159 ‘Επεξεργασία δεδομένων ΓΡΑΨΕ ”Ακτίνα, Γινόμενο” R ← 1 ΟΣΟ R<=5 Γ ← π*R ΓΡΑΨΕ R, Γ R ← R+1 ΕΠΑΝΑΛΑΒΕΤΕΛΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ
Μνήμη. Περιοχή μεταβλητών
π R Γ
49.42477
Οθόνη
Ακτίνα, Γινόμενο1 3.141592 6.283183 9.42477
4 12.56636
ΑληθήςΑληθήςΑληθήςΑληθής
3.141595
12.56636
ΠΡΟΓΡΑΜΜΑ Πίνακας_Γινόμενο‘Εισαγωγή σταθεράς τιμής του π π ← 3.14159 ‘Επεξεργασία δεδομένων ΓΡΑΨΕ ”Ακτίνα, Γινόμενο” R ← 1 ΟΣΟ R<=5 Γ ← π*R ΓΡΑΨΕ R, Γ R ← R+1 ΕΠΑΝΑΛΑΒΕΤΕΛΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ
Μνήμη. Περιοχή μεταβλητών
π R Γ
512.56636
Οθόνη
Ακτίνα, Γινόμενο1 3.141592 6.283183 9.424774 12.56636
5 15.70795
ΑληθήςΑληθήςΑληθήςΑληθής
3.141596
15.70795
ΠΡΟΓΡΑΜΜΑ Πίνακας‘Εισαγωγή σταθεράς τιμής του π π ← 3.14159 ‘Επεξεργασία δεδομένων ΓΡΑΨΕ ”Ακτίνα, Γινόμενο” R ← 1 ΟΣΟ R<=5 Γ ← π*R ΓΡΑΨΕ R, Γ R ← R+1 ΕΠΑΝΑΛΑΒΕΤΕΛΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ
Μνήμη. Περιοχή μεταβλητών
π R Γ
615.70795
Οθόνη
Ακτίνα, Γινόμενο1 3.141592 6.283183 9.424774 12.56636
5 15.70795
ΨευδήςΨευδήςΨευδήςΨευδής
3.14159
Καθιερωμένες συναρτήσεις
Στη Turbo Pascal υπάρχουν καθιερωμένες συναρτήσεις τις οποίες μπορούμε να χρησιμοποιήσουμε.
1. Abs Επιστέφει την απόλυτη τιμή ενός αριθμού.
Π.χ. Abs(-2.5)Επιστρέφει την τιμή 2.5
2. Sqr Επιστρέφει το τετράγωνο ενός αριθμού.
Π.χ. Sqr(5)
Επιστρέφει το 25.
3. Sqrt Επιστρέφει την τετραγωνική ρίζα ενός αριθμού.
Π.χ. Sqrt(4)
Επιστρέφει τον αριθμό 2.
4. Round Στρογγυλεύει έναν αριθμό. Το αποτέλεσμα είναι πάντα ακέραιος αριθμός. Αν το δεκαδικό μέρος είναι μικρότερο από 0.5, ο αριθμός παίρνει την τιμή του ακέραιου μέρους. Αλλιώς, στρογγυλεύει στον επόμενο ακέραιο.
Π.χ. Round(4.46)
Επιστρέφει τον αριθμό 4
ΠαραδείγματαΝα γράψετε ένα πρόγραμμα το οποίο να διαβάζει ένα πραγματικό
αριθμό. Στη συνέχεια να υπολογίζετε και να τυπώνετε την τετραγωνική ρίζα του αριθμού.
Program tertagoniki_riza;Uses wincrt;VarX:real;BeginWrite(‘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σκήσεις1. Να γράψετε ένα πρόγραμμα το οποίο να
υπολογίζει και να τυπώνει τον μέσο όρο των πρώτων Ν-ακεραίων αριθμών.
2. Να γράψετε ένα πρόγραμμα το οποίο θα υπολογίζει και θα τυπώνει το άθροισμα των 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;VarAverage: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 DoBeginsum:=sum+IEnd;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;
Repeatsum:=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 Begin
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 Dobeginwriteln;for j:= 1 to n Dobegink:=j*I;writeln(j,’x’,I,’=‘,k)EndEnd
End.
Program Askisi_4;Uses wincrt;VarCount,num:Integer;
begincount:=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;Varposotita,timi,synolo:real;Begin
write(‘ Dose tin posotita twn emporeumatwn…..’); writeln(‘An dosete ¨0¨ stin posotita, to programma termatizetai’);
readln(posotita);while posotita<> 0 DoBeginwrite(‘Dose tin timi’);readln(timi);synolo:=posotita*timi;writeln;writeln;writeln(‘To synolo se ECU einai…’,synolo:10:2);writeln;write(‘Dose tin posotita…’);readln(posotita);End;
End.
Program Askisi_6;Uses wincrt;Vari,arithmos:integer;Beginwriteln(‘Arithmisi apo to 1 mexri to…..);Writeln;write(‘Mexri pion arithmo thelete na ginei I arithmisi;…’);
readln(arithmos);i:=0;while i< arithmos Do
Begini:=i+1;write(i:5);End;
End.