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