el:school:lessons:programmatismos:pascal:askisi11_procedures
Άσκηση 11 - procedures, for μέσα σε for
Πολλές φορές το πρόγραμμά μας μεγαλώνει πολύ και γίνεται περίπλοκο. Επίσης πολλές φορές έχει όμοια τμήματα.
Για να κάνουμε πιο ευανάγνωστο το πρόγραμμά μας και να μην ξαναγράφουμε πουθενά όμοιο κώδικα, μπορούμε να τοποθετήσουμε κώδικα μέσα σε υποπρογράμματα που ονομάζονται διαδικασίες. Μπορούμε στην συνέχεια να καλούμε τις διαδικασίες και θα εκτελείται ο κώδικας που περιέχουν.
Στην νέα Άσκηση θα δούμε
for μέσα σε for
procedures
ΔΗΜΙΟΥΡΓΙΑ ΕΡΓΟΥ : Θα δημιουργήσουμε το νέο έργο sximata
ΕΙΣΑΓΩΓΗ - for μέσα σε for
Θα φτιάξουμε το πρώτο μας σχήμα που θα είναι μια γραμμή με 8 αστεράκια
******
ΔΕΝ Θα την φτιάξουμε με
writeln('********');
Για ευελιξία, Θα κάνουμε μια επανάληψη 8 φορές την εντολή
write('*'); και επειδή θέλουμε να αλλάξει γραμμή στο τέλος θα βάλουμε και μια
writeln(' '); έξω από την επανάληψη.
for i:=1 to 8 do
write('*');
writeln('');
Αν θέλαμε να φτιάξουμε και μια 2η γραμμή από κάτω πάλι με 8 αστεράκια θα αντιγράφαμε τις 3 γραμμές κώδικα πάλι από κάτω. Αν θέλαμε 5 γραμμές από 8 αστεράκια; Μπορούμε να κάνουμε μια επανάληψη με μία for από 1 έως 5 (χρησιμοποιήστε μεταβλητή j). Προσοχή! Oι 3 γραμμές κώδικα που θα βάλετε μέσα στην εξωτερική for από 1 έως 5 είναι πολλές εντολές, θυμηθείτε τι βάζουμε όταν έχουμε πολλές εντολές. Προσέξτε επίσης την στοίχιση
Σαν να φτιάξαμε ένα ορθογώνιο και είναι εύκολο να αλλάξουμε τώρα το μέγεθος. Για κάντε το 6 γραμμές x 3 στήλες.
Procedure - Εισαγωγή στις διαδικασίες
Μετά το τέλος του var και πριν από το
BEGIN του κυρίως προγράμματος θα βάλουμε τον παρακάτω κώδικα.
procedure grammi;
var
i : integer;
begin
for i:=1 to 3 do
write('*');
writeln('');
end;
Το κυρίως πρόγραμμά μας πλέον μπορεί να γίνει πολύ πιο απλό και κατανοητό
for j:=1 to 6 do
grammi;
Βλέπουμε ότι βάλαμε την μεταβλητή i μέσα στην procedure grammi γιατί πλέον χρησιμοποιείται εκεί και όχι στο κυρίως πρόγραμμα. Οπότε αφαιρέστε την από την δήλωση var του κυρίως προγράμματος αφήνοντας εκεί μόνο την μεταβλητή j.
Τροποποίηση - Άσκηση epiloges
Ανοίγουμε την άσκηση epiloges
Βλέπουμε ότι κάνει 4 τουλάχιστον διαφορετικά πράγματα με μια case που εκτελεί 4 διαφορετικά κομμάτια κώδικα. Πάνω από το BEGIN του κυρίως προγράμματος, φτιάχνουμε μια νέα procedure diairesi_akeraiwn;
Μέσα θα βάλουμε όλο τον κώδικα που είχε η επιλογή
'1' της
case. Δηλαδή
procedure diairesi_akeraiwn;
begin
clrscr();
writeln('**Διαίρεση Ακεραίων**');
write('Δώσε 1ο αριθμό ');
readln(akeraios1);
write('Δώσε 2ο αριθμό ');
readln(akeraios2);
piliko:=akeraios1 div akeraios2;
ypoloipo:=akeraios1 mod akeraios2;
writeln('Το πηλίκο είναι ', piliko, ' και το υπόλοιπο είναι ', ypoloipo);
end;
Τώρα η επιλογή
'1' της
case δεν χρειάζεται καν
begin .. end, μπορεί να γίνει
'1': diairesi_akeraiwn;
Με όμοιο τρόπο φτιάξτε άλλες 3 procedures για τις 3 άλλες επιλογές της case. Δώστε ότι ονόματα θέλετε.
Δεν έγινε πιο οργανωμένο και ξεκάθαρο τι κάνει το πρόγραμμά μας;
Μόλις ξεπεράσουμε ένα όριο π.χ. 100 γραμμών κώδικα είναι αναγκαίο να μπουν κομμάτια του σε διαδικασίες. Αλλιώς δεν μπορούμε να το μεγαλώσουμε άλλο χωρίς να χαθούμε στον κώδικά του
Ακόμα και μικρά κομμάτια κώδικα 3-10 γραμμών, αν κάνουν κάτι συγκεκριμένο μπορούν να μπουν σε διαδικασίες και να βελτιωθεί αισθητά η ανάγνωσή του. Αλλά η χρήση των διαδικασιών δεν σταματάει εκεί.
* ΕΠΕΚΤΑΣΗ 1 / ΑΣΚΗΣΗ ΓΙΑ ΤΟ ΣΠΙΤΙ
-
el/school/lessons/programmatismos/pascal/askisi11_procedures.txt · Last modified: Y/m/d H:i by vagk