====== Άσκηση 11 - procedures, for μέσα σε for ======
* Πολλές φορές το πρόγραμμά μας μεγαλώνει πολύ και γίνεται **περίπλοκο**. Επίσης πολλές φορές έχει **όμοια τμήματα**.
* Για να κάνουμε πιο **ευανάγνωστο** το πρόγραμμά μας και να μην ξαναγράφουμε πουθενά **όμοιο κώδικα**, μπορούμε να τοποθετήσουμε κώδικα μέσα σε υποπρογράμματα που ονομάζονται διαδικασίες. Μπορούμε στην συνέχεια να καλούμε τις διαδικασίες και θα εκτελείται ο κώδικας που περιέχουν.
* Στην νέα Άσκηση θα δούμε
* for μέσα σε for
* **procedures**
- **ΔΗΜΙΟΥΡΓΙΑ ΕΡΓΟΥ** : Θα δημιουργήσουμε το νέο έργο **sximata**
* Κάνουμε όμοιες ενέργειες όπως στην Άσκηση1, όπου hello τώρα ο τίτλος είναι **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 - Εισαγωγή στις διαδικασίες**
* Ωραία το φτιάξαμε αλλά δεν είναι εύκολο με μια ματιά να καταλάβουμε τι κάνουν οι 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**.
* Οπότε οι διαδικασίες λειτουργούν ως εξής:
* Ξεχωρίζουμε ένα κομμάτι κώδικα και το βάζουμε μέσα σε μία **procedure** (διαδικασία).
* Δίνουμε στην procedure ένα περιγραφικό όνομα (εδώ την ονομάσαμε **grammi**).
* Στην συνέχεια στο κυρίως πρόγραμμα καλούμε την διαδικασία γράφοντας απλά το όνομά της.
- ** Τροποποίηση - Άσκηση 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 / ΑΣΚΗΣΗ ΓΙΑ ΤΟ ΣΠΙΤΙ**
-
* **ΕΠΕΚΤΑΣΗ 2 / ΑΣΚΗΣΗ ΓΙΑ ΤΟ ΣΠΙΤΙ**
-