Κεφάλαιο 11
Εντολές Επανάληψης.
Η Δομή Της Επανάληψης. Ορισμένες φορές επιθυμούμε την επαναληπτική εκτέλεση εντολών με βάση κάποια συνθήκη. Διακρίνουμε 2 κατηγορίες ασκήσεων: Ασκήσεις που το πλήθος των επαναλήψεων είναι γνωστό εκ’ των προτέρων: (Παράδειγμα μας λέει ο γυμναστής μας να κάνουμε 5 κάμψεις).
Ασκήσεις που το πλήθος των επαναλήψεων είναι άγνωστο όταν ξεκινάμε την άσκηση: (Παράδειγμα μας λέει η μαμά μας να ανακατέψουμε το φαγητό που είναι στην κουζίνα μέχρι να κοκκινίσει).
2
1/11/2013
Κέρος Α. Ιωάννης
Το σενάριο «Παίρνω – Κάνω». Φανταστείτε ότι έξω από την πόρτα της τάξης βρίσκονται πολλοί άνθρωποι, ο κάθε ένας εκ’ των οποίων πρέπει να μπει στην τάξη να βάλει μια υπογραφή σε ένα χαρτί και να φύγει. Πως θα τους βάζατε μέσα; Όλους μαζί ή έναν – έναν; Φυσικά έναν - έναν ως εξής: 1. Μπαίνει ένας, βάζει την υπογραφή του, 2. Μπαίνει ο επόμενος, βάζει την υπογραφή του, 3. Μπαίνει ο επόμενος, βάζει την υπογραφή του. και αυτό θα επαναληφθεί τόσες φορές, όσοι ήταν οι μαθητές.
3
1/11/2013
Κέρος Α. Ιωάννης
Η Επαναληπτική Δομή While (Άγνωστο – Γνωστό πλήθος).
while λογική-έκφραση do Εντολή;
Ενέργεια: Υπολογίζεται η τιμή της λογικής έκφρασης και: α. Αν ήταν True, εκτελείται η Εντολή και επαναλαμβάνουμε την διαδικασία υπολογίζοντας ξανά την λογική έκφραση ενώ, β. Αν ήταν False, εκτελούνται οι εντολές που υπάρχουν μετά το ; της εντολής.
True Συνθήκη
Εντολή
False
Προσοχή στην χρήση του ; μόνο στο τέλος της εντολής.
4
1/11/2013
Κέρος Α. Ιωάννης
Η Επαναληπτική Δομή While Με Σύνθετη Εντολή. while λογική-έκφραση do Begin Εντολή-1; Εντολή-2; κοκ. End;
Ενέργεια: Υπολογίζεται η τιμή της λογικής έκφρασης και: α. Αν ήταν True, εκτελείται η Εντολή-1,Εντολή-2 κοκ και επαναλαμβάνουμε την διαδικασία υπολογίζοντας ξανά την λογική έκφραση ενώ, β. Αν ήταν False, εκτελούνται οι εντολές που υπάρχουν μετά το ; του End.
5
Προσοχή στην χρήση του ; μόνο στο τέλος της εντολής. 1/11/2013
Κέρος Α. Ιωάννης
Παραδείγματα While. Τι θα εμφανίσει καθένα από τα ακόλουθα κομμάτια προγράμματος Pascal; x:=3; while x<5 do Begin write(x); x:=x+1; End;
x:=3; while x<=3 do Begin write(x); x:=x+1; End;
x:=6; while x<5 do Begin write(x); x:=x+1; End;
x
x
x
3
3
4
6
1/11/2013
Κέρος Α. Ιωάννης
Παραδείγματα While (συνέχεια). Τι θα εμφανίσει το ακόλουθο τμήμα προγράμματος Pascal; Α:=7; Β:=1; C:=2; D:=4; while B<=5 do Begin D:=D+A+C; B:=B+1; End; writeln(D); if D<30 then writeln(‘Σπάρτη’) Else Writeln(‘Κιλκίς’);
7
1/11/2013
Εμφανίζει 49 Κιλκίς
Κέρος Α. Ιωάννης
Λογικό Διάγραμμα While. Α:=7; Β:=1; C:=2; D:=4; while B<=5 do Begin D:=D+A+C; B:=B+1; End; writeln(D); if D<30 then writeln(‘Σπάρτη’) Else Writeln(‘Κιλκίς’);
8
1/11/2013
Κέρος Α. Ιωάννης
1ο Παράδειγμα Με Επαναληπτική Δομή While.
Εκφώνηση Να γραφεί πρόγραμμα Pascal που θα διαβάσει πολλούς αριθμούς. Αν δοθεί το 5 το πρόγραμμα πρέπει να εμφανίσει το άθροισμα όσων αριθμών έχουν δοθεί έως τότε ενώ εάν είχε δοθεί εξ’ αρχής το 5 το μήνυμα «Δυστυχώς, δώσατε απευθείας το 5». (PC11Exe1.pas)
9
1/11/2013
Κέρος Α. Ιωάννης
Αθροιστής
Λύση (1ο)
10
1/11/2013
Κέρος Α. Ιωάννης
2ο Παράδειγμα Με Επαναληπτική Δομή While.
Εκφώνηση Να γραφεί πρόγραμμα Pascal που θα διαβάσει πολλούς αριθμούς. Το πρόγραμμα θα τους προσθέσει και η διαδικασία θα σταματήσει όταν το άθροισμα ξεπεράσει το 1000, οπότε και θα το εμφανίσει. (PC11Exe2.pas)
11
1/11/2013
Κέρος Α. Ιωάννης
Λύση (2ο)
12
1/11/2013
Κέρος Α. Ιωάννης
3ο Παράδειγμα Με Επαναληπτική Δομή While.
Εκφώνηση Ο πληθυσμός μιας χώρας αυξάνεται κάθε χρόνο με σταθερό ποσοστό 10% επί του συνόλου. Αν σήμερα ο πληθυσμός είναι 8.000, να γραφεί πρόγραμμα Pascal που θα εμφανίσει σε πόσα χρόνια θα ξεπεράσει τις 10.000. (PC11Exe3.pas)
13
1/11/2013
Κέρος Α. Ιωάννης
Λύση (3ο)
Μετρητής
14
1/11/2013
Κέρος Α. Ιωάννης
4ο Παράδειγμα Με Επαναληπτική Δομή While.
Εκφώνηση Να γραφεί πρόγραμμα Pascal που θα διαβάσει 5 ακέραιους αριθμούς και θα εμφανίσει πόσοι από αυτούς ήταν θετικοί, πόσοι αρνητικοί και πόσοι μηδέν. (PC11Exe4.pas)
15
1/11/2013
Κέρος Α. Ιωάννης
Λύση (4ο)
16
1/11/2013
Κέρος Α. Ιωάννης
5ο Παράδειγμα Με Επαναληπτική Δομή While.
Εκφώνηση Να γραφεί πρόγραμμα Pascal που θα διαβάσει πολλούς ακέραιους αριθμούς και θα εμφανίσει πόσοι από αυτούς ήταν θετικοί, πόσοι αρνητικοί και πόσοι μηδέν. Το πλήθος των αριθμών που θα δώσει ο χρήστης θα το διαβάσετε εκ’ των προτέρων. (PC11Exe5.pas)
17
1/11/2013
Κέρος Α. Ιωάννης
Λύση (5ο)
18
1/11/2013
Κέρος Α. Ιωάννης
Η Επαναληπτική Δομή Repeat (Άγνωστο – Γνωστό πλήθος). Repeat Εντολή-1; Εντολή-2; Until λογική-έκφραση; Ενέργεια: Εκτελούνται η Εντολή-1, Εντολή-2 κοκ και υπολογίζεται η τιμή της λογικής έκφρασης: α. Αν ήταν false, επαναλαμβάνουμε την διαδικασία ξανά από την αρχή, β. Αν ήταν True, εκτελούνται οι εντολές που υπάρχουν μετά το Until.
Εντολές
False Συνθήκη
True
Προσοχή στην χρήση του ; στο τέλος της εντολής.
19
1/11/2013
Κέρος Α. Ιωάννης
Παραδείγματα Repeat. Τι θα εμφανίσει καθένα από τα ακόλουθα κομμάτια προγράμματος Pascal; x:=3; Repeat x:=x+1; writeln(x); Until x>=5;
x:=5; Repeat x:=x+1; writeln(x); Until x>=5;
x:=7; Repeat x:=x+1; writeln(x); Until x>=5;
x
x
x
4
6
8
5
20
1/11/2013
Κέρος Α. Ιωάννης
Παραδείγματα Repeat (συνέχεια). Τι θα εμφανίσει τo ακόλουθο τμήμα προγράμματος Pascal; x := 1; i := 1; Repeat y:=x * i; if y mod 2 = 0 then begin x := x +2 ; z := x + y ; end else begin x := x +1; z := x * y; end; writeln(z); i:=i+1; Until x > 7;
21
Εμφανίζει 2 8 18
32
1/11/2013
Κέρος Α. Ιωάννης
Λογικό Διάγραμμα Repeat. Α:=7; Β:=1; C:=2; D:=4; Repeat D:=D+A+C; B:=B+1; Until B>5; writeln(D); if D<30 then writeln(‘Σπάρτη’) Else Writeln(‘Κιλκίς’);
22
1/11/2013
Κέρος Α. Ιωάννης
1ο Παράδειγμα Με Επαναληπτική Δομή Repeat.
Εκφώνηση Να γραφεί πρόγραμμα Pascal που θα διαβάσει πολλούς αριθμούς. Αν δοθεί το 5 το πρόγραμμα πρέπει να σταματά και να εμφανίσει το άθροισμα όσων αριθμών έχουν δοθεί έως τότε. (PC11Exe6.pas)
23
1/11/2013
Κέρος Α. Ιωάννης
Λύση (1ο)
24
1/11/2013
Κέρος Α. Ιωάννης
2ο Παράδειγμα Με Επαναληπτική Δομή Repeat.
Εκφώνηση Να γραφεί πρόγραμμα Pascal που θα διαβάσει 5 ακέραιους αριθμούς και θα εμφανίσει πόσοι από αυτούς ήταν θετικοί, πόσοι αρνητικοί και πόσοι μηδέν. (PC11Exe7.pas)
25
1/11/2013
Κέρος Α. Ιωάννης
Λύση (2ο)
26
1/11/2013
Κέρος Α. Ιωάννης
Η Επαναληπτική Δομή For (Γνωστό πλήθος).
for Μεταβλητή := Αρχική Τιμή to Τελική Τιμή do Εντολή; for Μεταβλητή := Αρχική Τιμή to Τελική Τιμή do Begin Εντολή-1; Εντολή-2; . . End; Προσοχή στην χρήση του ; μόνο στο τέλος της εντολής. Ενέργεια: Για όλες τις τιμές της Μεταβλητής από την Αρχική μέχρι και την Tελική εκτελείται η Εντολή (Εντολή-1, Εντολή-2, …).
27
1/11/2013
Κέρος Α. Ιωάννης
Η Επαναληπτική Δομή For (Γνωστό πλήθος).
for Μεταβλητή := Τελική Τιμή downto Αρχική Τιμή do Εντολή; for Μεταβλητή := Τελική Τιμή downto Αρχική Τιμή do Begin Εντολή-1; Εντολή-2; . . End; Προσοχή στην χρήση του ; μόνο στο τέλος της εντολής. Ενέργεια: Για όλες τις τιμές της Μεταβλητής από την Τελική μέχρι και την Αρχική εκτελείται η Εντολή (Εντολή-1, Εντολή-2, …).
28
1/11/2013
Κέρος Α. Ιωάννης
Παραδείγματα For. Πόσες επαναλήψεις θα γίνουν σε καθένα από τα ακόλουθα κομμάτια προγράμματος Pascal; For Χ:=1 to 3 do Begin . . End;
For Χ:=3 to 4 do Begin . . End;
For Χ:=1 to 1 do Begin . . End;
For Χ:=3 to 1 do Begin . . End;
2
1
0
3
29
For Χ:=3 downto 1 do Begin . . End;
For Χ:=1 downto 3 do Begin . . End;
3
0 1/11/2013
Κέρος Α. Ιωάννης
Παραδείγματα For (συνέχεια) . Τι θα εμφανίσει καθένα από τα ακόλουθα κομμάτια προγράμματος Pascal;
30
Υ:=0; For Χ:=1 to 3 do Begin Υ:= Υ+1; Writeln( Χ, Υ); End;
Υ:=0; For Χ:=3 downto 1 do Begin Υ:= Υ+1; Writeln( Χ, Υ); End;
X Y
X Y
X
1 1
3 1
A
2 2
2 2
B
3 3
1 3
C
1/11/2013
For Χ:=‘Α’ to ‘C’ do Writeln( Χ);
Κέρος Α. Ιωάννης
Παραδείγματα For (συνέχεια). Τι θα εμφανίσει τo ακόλουθο τμήμα προγράμματος Pascal;
Α:= 4; D:= 5; For i:=1 to 5 do D:= D+Α+I; Writeln(D);
31
Εμφανίζει 40
1/11/2013
Κέρος Α. Ιωάννης
Λογικό Διάγραμμα For.
Α:= 4; D:= 5; For i:=1 to 10 do D:= D+Α+i; Writeln(D);
32
1/11/2013
Κέρος Α. Ιωάννης
1ο Παράδειγμα Με Επαναληπτική Δομή For.
Εκφώνηση Να γραφεί πρόγραμμα Pascal το οποίο θα διαβάσει πολλούς ακέραιους θετικούς αριθμούς και θα εμφανίσει πόσοι από αυτούς ήταν μονοί και πόσοι ζυγοί. Το πλήθος των αριθμών που θα πληκτρολογήσει ο χρήστης θα το διαβάσετε εκ’ των προτέρων. (PC11Exe8.pas)
33
1/11/2013
Κέρος Α. Ιωάννης
Λύση (1ο)
34
1/11/2013
Κέρος Α. Ιωάννης
2ο Παράδειγμα Με Επαναληπτική Δομή For.
Εκφώνηση Ένας έμπορος δομικών υλικών πουλάει τούβλα προς 10 € τα εκατό στους καταναλωτές και προς 8 € τα εκατό στους οικοδόμους. Να γραφεί πρόγραμμα Pascal που θα διαβάσει για 5 παραγγελίες το είδος του πελάτη (1 = Καταναλωτής, 2 = Οικοδόμος) και την ποσότητα τούβλων που αυτός αγόρασε και θα υπολογίσει εμφανίσει την αξία κάθε παραγγελίας αλλά και το σύνολο των χρημάτων που θα εισπράξει ο έμπορος. (PC11Exe9.pas)
35
1/11/2013
Κέρος Α. Ιωάννης
Λύση (2ο)
36
1/11/2013
Κέρος Α. Ιωάννης
3ο Παράδειγμα Με Επαναληπτική Δομή For.
Εκφώνηση Να γραφεί πρόγραμμα Pascal που θα εμφανίσει το πλήθος και το άθροισμα όλων των ακέραιων αριθμών μεταξύ του 100 και του 300 (και του 100 και του 300) που διαιρούνται με το 16. (PC11Exe10.pas)
37
1/11/2013
Κέρος Α. Ιωάννης
Λύση (3ο)
38
1/11/2013
Κέρος Α. Ιωάννης
Δομή For – Αποτελεσματική χρήση. Η μεταβλητή ελέγχου δεν πρέπει να αλλάζει τιμές μέσα στον κύκλο της επανάληψης. Μπορεί να εμφανίζεται σε μία έκφραση, άλλα όχι στο αριστερό μέλος της εντολής αντικατάστασης, οπότε αλλάζει η τιμή της. Η μεταβλητή ελέγχου μεταβάλλεται κατά βήματα παίρνοντας την επόμενη ή την προηγούμενη τιμή από το πεδίο τιμών της. Αν η μεταβλητή είναι ακέραιος, τότε το βήμα 1. Αν χρειαζόμαστε άλλο βήμα, επιλέγουμε την while. Μετά το τέλος της επανάληψης η μεταβλητή ελέγχου έχει απροσδιόριστη τιμή. Αν τη χρησιμοποιήσουμε ή θα πάρουμε μήνυμα λάθους ή λάθος αποτέλεσμα ανάλογα με το μεταφραστικό πρόγραμμα (compiler) που χρησιμοποιούμε.
39
Ο κύκλος της επανάληψης εκτελείται με την μεταβλητή ελέγχου να παίρνει τιμές την αρχική, τα ενδιάμεσα βήματα και την τελική. Αν η αρχική τιμή είναι ίση με την τελική, ο κύκλος εκτελείται μία μόνο φορά. Στην περίπτωση to αν η αρχική τιμή είναι μεγαλύτερη από την τελική, ο κύκλος δεν εκτελείται. Στην περίπτωση downto αν η αρχική τιμή είναι μικρότερη από την τελική, ο κύκλος δεν εκτελείται. 1/11/2013
Κέρος Α. Ιωάννης
Σύγκριση δομών επανάληψης (Γνωστό πλήθος).
Όταν το πλήθος των επαναλήψεων είναι γνωστό μπορούν να χρησιμοποιηθούν και οι 3 μορφές επανάληψης που μάθαμε.
i:=1; while i<=3 do begin Εντολές . . i:=i+1; end;
i:=1; repeat Εντολές . . i:=i+1; until i>3;
for i:=1 to 3 do begin Εντολές . . end;
Είναι λογικό, πως αν δεν τεθεί διαφορετικά από την εκφώνηση, θα προτιμούμε το for στο γνωστό πλήθος επαναλήψεων.
40
1/11/2013
Κέρος Α. Ιωάννης
Σύγκριση δομών επανάληψης (Άγνωστο πλήθος).
Όταν το πλήθος των επαναλήψεων είναι άγνωστο μπορούν να χρησιμοποιηθούν μόνο οι επαναλήψεις while και repeat.
readln(x); while x<>5 do begin Εντολές . . readln(x); end;
repeat readln(x); Εντολές . . until x=5;
Είναι λογικό, πως αν δεν τεθεί διαφορετικά από την εκφώνηση, θα προτιμούμε το while στο άγνωστο πλήθος επαναλήψεων.
41
1/11/2013
Κέρος Α. Ιωάννης
Έλεγχος ορθότητας δεδομένων. Μέχρι τώρα, όλες οι ασκήσεις λύθηκαν με την παραδοχή ότι ο χρήστης ήταν «καλός»: πληκτρολογούσε ότι ακριβώς του ζητούσαμε. Είναι αυτό όμως σωστό; Για παράδειγμα έστω ότι πρέπει ο χρήστης να πληκτρολογήσει τον κωδικό ενός είδους που μπορεί να είναι 1 ή 2 ή 3 μόνο. Μέχρι τώρα θα πληκτρολογούσαμε:
Readln(code); Με την εντολή αυτή ο χρήστης πληκτρολογεί κάτι που μπορεί να είναι το 1 ή το 2 ή το 3 αλλά και οτιδήποτε άλλο. Δεν θα ήταν λογικότερο να απαιτήσουμε την σωστή πληκτρολόγηση των δεδομένων και να μην προχωρήσουμε την εκτέλεση του προγράμματος αν δεν πάρουμε τέτοια;
42
1/11/2013
Κέρος Α. Ιωάννης
Έλεγχος ορθότητας δεδομένων. Τι κάνουμε λοιπόν; Repeat Readln(code); Until (code=1) or (code=2) or (code=3); Αν δεν δώσει αυτά που θέλουμε τότε ξανά… Αν δώσει αυτά που θέλουμε τότε προχωρά παρακάτω….
43
1/11/2013
Κέρος Α. Ιωάννης
Παράδειγμα 1ο. Εκφώνηση Σε μία εταιρεία parking υπάρχουν 3 χώροι στάθμευσης ανάλογα με το είδος των οχημάτων (φορτηγά (Φ), ΙΧ, (ΙX) μοτοσικλέτες (Μ)). Για κάθε όχημα κόβεται ένα εισιτήριο. Στο parking μπορούν να κοπούν συνολικά 10 εισιτήρια την ημέρα ανεξαρτήτως του είδους των οχημάτων. Να γραφεί πρόγραμμα Pascal που θα διαβάσει το είδος του οχήματος (να ελέγχει την ορθή καταχώριση - εγκυρότητα των δεδομένων) και θα υπολογίσει και εμφανίσει τον αριθμό των φορτηγών , των ΙΧ και των μοτοσικλετών που πάρκαραν στο τέλος της ημέρας. (Υποθέστε ότι στο τέλος της ημέρας έχουν παρκάρει ακριβώς 10 οχήματα). (PC11Exe11.pas)
44
1/11/2013
Κέρος Α. Ιωάννης
Λύση (1ο)
45
1/11/2013
Κέρος Α. Ιωάννης
Παράδειγμα 2ο. Εκφώνηση Μια εταιρεία δημοσκοπήσεων θέτει σε ένα δείγμα 2000 πολιτών ένα ερώτημα. Για την επεξεργασία των δεδομένων να αναπτύξετε πρόγραμμα Pascal που: 1. Να διαβάσει το φύλλο του πολίτη (Α = Άνδρας, Γ = Γυναίκα) και να ελέγχει την ορθή εισαγωγή, 2. Να διαβάσει την απάντηση στο ερώτημα, η οποία μπορεί να είναι "ΝΑΙ", "ΌΧΙ", "ΔΕΝ ΞΕΡΩ" και να ελέγχει την ορθή εισαγωγή, 3. Να υπολογίσει και να εμφανίσει το πλήθος που απάντησαν "ΝΑΙ", 4. Στο σύνολο των ατόμων που απάντησαν "ΝΑΙ" να υπολογίσει και να εμφανίσει το ποσοστό των ανδρών και το ποσοστό των γυναικών. (PC11Exe12.pas)
46
1/11/2013
Κέρος Α. Ιωάννης
Λύση (2ο)
47
1/11/2013
Κέρος Α. Ιωάννης
Εμφωλευμένες επαναλήψεις. Τι θα εμφανίσει τo ακόλουθο τμήμα προγράμματος Pascal;
X Y 1 1
For x:=1 to 3 do For y:=1 to 3 do Writeln(x, y);
1 2
1 3
Κανόνες εμφωλευμένων επαναλήψεων
2 1
1. Πρώτα ξεκινάει η εξωτερική επανάληψη και μετά ξεκινάει και ολοκληρώνεται η εσωτερική και συνεχίζει πάλι η εξωτερική.
2 2
2. Δεν μπορεί να χρησιμοποιηθεί η ίδια μεταβλητή ως μετρητής 2 ή περισσοτέρων βρόχων που ο ένας είναι στο εσωτερικό του άλλου.
3 1
2 3
3 2 3 3
48
1/11/2013
Κέρος Α. Ιωάννης
Παράδειγμα 1ο. Να γραφεί πρόγραμμα Pascal που θα εμφανίσει όλες τις ακέραιες λύσεις της εξίσωσης 2*x-4*y=0 στο διάστημα [1..10]. (PC11Exe13.pas)
49
1/11/2013
Κέρος Α. Ιωάννης
Παράδειγμα 1ο
(Λογικό Διάγραμμα).
50
1/11/2013
Κέρος Α. Ιωάννης
Παράδειγμα 2ο. Να γραφεί πρόγραμμα Pascal που θα εμφανίσει την προπαίδεια όλων των αριθμών από 1 έως 10. (PC11Exe14.pas)
51
1/11/2013
Κέρος Α. Ιωάννης
Εύρεση μεγίστων - ελαχίστων. Αρκετές φορές, θα χρειαστούμε από ένα σύνολο από τιμές να βρούμε ποια είναι η πιο μεγάλη (max) και ποια η πιο μικρή (min). Για να καταλάβουμε την λογική εύρεσης των max (min), να θυμηθούμε ότι κάθε φορά στην επανάληψη έχουμε ένα δεδομένο.
Συγκρίνουμε το δεδομένο που έχουμε τώρα για να δούμε αν είναι μεγαλύτερο (μικρότερο) από τον μέχρι τώρα max (min) και: • Αν ήταν μεγαλύτερος (μικρότερος) αντικαθιστούμε τον max (min) • Διαφορετικά, δεν γίνεται αλλαγή στον max (min) Το μόνο πρόβλημα που έχουμε είναι με το πρώτο δεδομένο. Με ποιον να συγκριθεί;
52
1/11/2013
Κέρος Α. Ιωάννης
Εύρεση μεγίστων – ελαχίστων (Σενάριο 1ο).
Εάν γνωρίζουμε ότι οι τιμές για τις οποίες ψάχνουμε το max (min) βρίσκονται σε κάποιο όριο τιμών [τιμή 1 .. τιμή 2], τις χρησιμοποιούμε ανάποδα ως αρχική τιμή των max (min): max:=τιμή 1 - 1 min:=τιμή 2 + 1
Για παράδειγμα, αν οι τιμές που εξετάζουμε είναι βαθμοί, ξέρουμε πως κυμαίνονται στο διάστημα [1..20], οπότε θέτουμε: max:= 0 min:= 21 Τι πρόβλημα θα είχαμε αν δεν τα θέταμε ανάποδα; Εάν βάζαμε αρχική τιμή για max=20, θα υπήρχε μετά μαθητής που θα είχε βαθμό μεγαλύτερο από 20; ΟΧΙ Εάν βάζαμε αρχική τιμή για min=1, θα υπήρχε μετά μαθητής που θα είχε βαθμό μικρότερο από 1; ΟΧΙ
53
1/11/2013
Κέρος Α. Ιωάννης
Παράδειγμα 1ο. Εκφώνηση Να γραφεί πρόγραμμα Pascal που θα διαβάσει τον αριθμό (έστω Ν) των μαθητών ενός σχολείου και τα ακόλουθα στοιχεία για κάθε έναν από αυτούς: • Όνομα. • Κωδικός φύλου (1= αγόρι 2= κορίτσι ) • Βαθμός. Το πρόγραμμα να εμφανίσει ποιο αγόρι έχει το μικρότερο βαθμό στη τάξη και ποιο κορίτσι τον μεγαλύτερο. Υποθέστε ότι το πλήθος Ν των μαθητών είναι θετικός ακέραιος αριθμός, ο κωδικός φύλου είναι 1 ή 2 και ο βαθμός είναι πραγματικός αριθμός από 1 έως και 20.
(PC11Exe15.pas)
54
1/11/2013
Κέρος Α. Ιωάννης
Λύση (1ο)
55
1/11/2013
Κέρος Α. Ιωάννης
Παράδειγμα 2ο. Εκφώνηση Να γραφεί πρόγραμμα Pascal που θα διαβάσει 5 αριθμούς και θα εμφανίσει τον μεγαλύτερο και τον μικρότερο. (PC11Exe17.pas)
56
1/11/2013
Κέρος Α. Ιωάννης
Λύση (2ο) Γιατί αυτή η λύση είναι προβληματική;
max=-100 Εάν οι αριθμοί που θα δοθούν ήταν όλοι μικρότεροι από -100 ο max παραμένει στην τιμή -100
min=100
Εάν οι αριθμοί που θα δοθούν ήταν όλοι μεγαλύτεροι από 100 ο min παραμένει στην τιμή 100
Μόνο αν είχε δοθεί αριθμός σε αυτό το διάστημα το πρόγραμμα θα έδινε σωστά αποτελέσματα
57
1/11/2013
Κέρος Α. Ιωάννης
Εύρεση μεγίστων – ελαχίστων (Σενάριο 2ο).
Εάν γνωρίζουμε ότι οι τιμές για τις οποίες ψάχνουμε το max (min) δεν βρίσκονται σε κάποιο συγκεκριμένο όριο τιμών τότε θέτουμε αυθαίρετα την πρώτη τιμή ως max (min), και εξετάζουμε όλες τις υπόλοιπες σε σχέση με τον max (min).
58
1/11/2013
Κέρος Α. Ιωάννης
Παράδειγμα 1ο. Εκφώνηση Να γραφεί πρόγραμμα Pascal που θα διαβάσει 5 αριθμούς και θα εμφανίσει τον μεγαλύτερο και τον μικρότερο. (PC11Exe17.pas)
59
1/11/2013
Κέρος Α. Ιωάννης
Λύση (1ο)
60
1/11/2013
Κέρος Α. Ιωάννης
Παράδειγμα 2ο. Εκφώνηση Να γραφεί πρόγραμμα Pascal που θα διαβάζει για πολλά αυτοκίνητα τα εξής στοιχεία για κάθε ένα από αυτά: • Πινακίδα αυτοκινήτου. • Αριθμός ατυχημάτων. Το πλήθος των αυτοκινήτων θα το διαβάσετε εκ’ των προτέρων. Το πρόγραμμα θα υπολογίσει και θα εμφανίσει τον μέσο όρο των ατυχημάτων και τον αριθμό του αυτοκινήτου με τα περισσότερα και τα λιγότερα ατυχήματα. Σε περίπτωση ισότητας να κρατείται το τελευταίο που βρίσκουμε. (Υποθέστε ότι το πλήθος των αυτοκινήτων και ο αριθμός των ατυχημάτων τους είναι θετικοί αριθμοί). (PC11Exe18.pas)
61
1/11/2013
Κέρος Α. Ιωάννης
Λύση (2ο)
62
1/11/2013
Κέρος Α. Ιωάννης