====== Άσκηση 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 / ΑΣΚΗΣΗ ΓΙΑ ΤΟ ΣΠΙΤΙ** -