====== Άσκηση 12 - procedures παράμετροι κατά τιμή ======
* Στην προηγούμενη άσκηση είδαμε την χρήση διαδικασιών (procedures) για να κάνουμε το πρόγραμμά μας πιο ευανάγνωστο αλλά και να χρησιμοποιούμε ξανά τα όμοια τμήματά του.
* Στην νέα Άσκηση θα δούμε
* Παραμέτρους μέσα σε procedure
* Ορισμό παραμέτρων **κατά τιμή**
- **ΑΝΟΙΓΜΑ ΕΡΓΟΥ** - Αν δεν είναι ήδη ανοιχτό, θα ανοίξουμε το υπάρχον έργο **sximata** και το αρχείο **sximata.pas**
- **ΠΡΟΣΘΗΚΗ 1**
* Η διαδικασία **grammi** φτιάχνει μία γραμμή με **3 αστεράκια**. Τι θα γινόταν εάν θέλαμε 5 αστεράκια και θέλαμε να κρατήσουμε και την διαδικασία που φτιάχνει 3 αστεράκια;
* Θα αναγκαζόμασταν να φτιάξουμε μια 2η διαδικασία grammi2 με ίδιο κώδικα και μοναδική αλλαγή **for i:=1 to 5; do**
* Αντί να φτιάχνουμε πολλές διαδικασίες που διαφέρουν λίγο, μπορούμε να βάλουμε την διαφορά τους σε μία μεταβλητή ως εξής: procedure grammi(mikos : integer);
var
i : integer;
begin
for i:=1 to mikos do
write('*');
writeln('');
end;
* Στην θέση του 3 ή του 5 βάλαμε την μεταβλητή **mikos**.
- Τώρα καλούμε από το κυρίως πρόγραμμα ως **grammi(3)** ή **grammi(5)** για να φτιάξει μία γραμμή με **3 ή με 5 αστεράκια**. Κάντε τις παραπάνω αλλαγές στην procedure και καλέστε από το κυρίως πρόγραμμα σωστά ώστε να εμφανιστούν **8 αστεράκια**.
- Αν τώρα θέλαμε μία γραμμή με +, δηλαδή **++++++++**; Βάλτε ερωτηματικό **;** μετά το **mikos : integer** και πριν κλείσει η παρένθεση προσθέστε μία νέα μεταβλητή έστω **symbolo** με τον τύπο της. Αντικαταστήστε το **'*'** με την μεταβλητή **symbolo**.
- Καλέστε τώρα ως **grammi(8,'+');** από το κυρίως πρόγραμμα για να εμφανιστεί γραμμή με **8 +**.
- **ΠΡΟΣΘΗΚΗ 2**
* Έστω ότι θέλουμε να φτιάξουμε το παρακάτω τρίγωνο *
**
***
****
*****
* Θα μπορούσαμε να φτιάξουμε τον παρακάτω κώδικα grammi(1,'*');
grammi(2,'*');
grammi(3,'*');
grammi(4,'*');
grammi(5,'*');
* Όμως τι θα γινόταν αν θέλαμε ένα τρίγωνο με πλευρά 20 αστεράκια; Δεν είναι έξυπνος τρόπος, την στιγμή που γνωρίζουμε να φτιάχνουμε επαναλήψεις. Θέλουμε μια επανάληψη **for j:=1 to 5; do** και το μοναδικό που αλλάζει κάθε φορά στην εντολή είναι το μήκος της γραμμής που παίρνει τιμές από 1 έως 5. Υπάρχει κάτι που παίρνει τιμές από 1 έως 5;
- Μα και βέβαια είναι το **j**. Οπότε ο κώδικάς μας θα γίνει for j:=1 to 5; do
grammi(j,'*');
- Αφού ο παραπάνω κώδικας φτιάχνει ένα τρίγωνο πάρτε τον και βάλτε τον σε μία νέα **procedure trigono**.
- Θα έχει 2 παραμέτρους **pleura** (που θα δίνετε το μήκος της πλευράς) και **symbolo**. Μην ξεχάσετε να μεταφέρετε και την μεταβλητή **j** μέσα στην διαδικασία **trigono**.
- Πως θα καλέσετε τώρα από το κυρίως πρόγραμμα;
- **ΠΡΟΣΘΗΚΗ 3**
* Βλέπουμε λοιπόν ότι μπορούμε να έχουμε procedures που θα καλούνε άλλες procedures. Οπότε έχουμε πλέον δυνατότητα να φτιάξουμε γραμμές και τρίγωνο.
- Φτιάξτε μια νέα procedure **tetragono** που να φτιάχνει τετράγωνα. Θα μοιάζει με την **trigono** αλλά με μία αλλαγή μέσα στον κώδικά της.
- Εμφανίστε μία γραμμή με 10 **-**
- ένα τρίγωνο με 8 **+**
- και ένα τετράγωνο με 6 *****
- Επίσης φτιάξτε μια νέα procedure **trigono2** που να εμφανίζει ένα ανάποδο τρίγωνο με **5 +** και καλέστε την σωστά από το κυρίως πρόγραμμα. +++++
++++
+++
++
+
* **ΕΠΕΚΤΑΣΗ 1 / ΑΣΚΗΣΗ ΓΙΑ ΤΟ ΣΠΙΤΙ**
-
* **ΕΠΕΚΤΑΣΗ 2 / ΑΣΚΗΣΗ ΓΙΑ ΤΟ ΣΠΙΤΙ**
-