Εργαστήριο 9 Συναρτήσεις στη PASCAL Η έννοια του κατακερματισμού. Συναρτήσεις. Σκοπός
7.1 ΕΠΙΔΙΩΞΗ ΤΗΣ ΕΡΓΑΣΙΑΣ Η έννοια της συνάρτησης ως υποπρογράμματος είναι τόσο βασική σε όλες τις γλώσσες προγραμματισμού, ώστε κάθε πρόγραμμα που γράφεται για μία πραγματική εφαρμογή, αποτελείται από πολλές συναρτήσεις. Σε προηγούμενα προγράμματα, έχουμε χρησιμοποιήσει αρκετές από τις μαθηματικές συναρτήσεις στη PASCAL, όπως οι rand(), sin(), cos(), sqrt() και άλλες. Όμως, η έννοια της συνάρτησης στη PASCAL δεν περιλαμβάνει μόνον τις μαθηματικές συναρτήσεις. Μία συνάρτηση μπορεί για παράδειγμα, να επεξεργάζεται κείμενο. Στη PASCAL και γενικότερα στο προγραμματισμό, οι συναρτήσεις έχουν μία γενικότερη έννοια και λειτουργία: εκτελούν έναν επιμέρους υπολογισμό / μία επιμέρους λειτουργία του προγράμματος. Κάθε πρόγραμμα που γράφουμε στη PASCAL, αλλά και σε κάθε άλλη γλώσσα προγραμματισμού, όπως η C, αλλά και η C++ / Objective C πρέπει απαραίτητα να περιλαμβάνει ένα κυρίως πρόγραμμα, όπως τα προγράμματα που μέχρι τώρα έχουμε γράψει. Όμως ένα πρόγραμμα στη, εκτός από το κυρίως πρόγραμμα, μπορεί να περιλαμβάνει στο ίδιο αρχείο ή ακόμα και σε διαφορετικά αρχεία, ένα ή περισσότερα άλλα υποπρογράμματα ή συναρτήσεις. Στα προγράμματα που έχουμε γράψει μέχρι τώρα, όλοι οι υπολογισμοί που απαιτούνταν για τη λύση ενός προβλήματος εκτελούνταν από / περιλαμβάνονταν στο κυρίως πρόγραμμα. Αυτή όμως, δεν είναι η πρακτική που συνήθως ακολουθείται. Συνήθως, η λύση ενός προβλήματος αναλύεται και αναπτύσσεται μέσα από επιμέρους υπολογισμούς. Μέσα από αυτούς τους επιμέρους υπολογισμούς, παίρνουμε ενδιάμεσα αποτελέσματα που τα συνδυάζουμε για να σχηματίσουμε τη λύση του προβλήματος που επιχειρούμε να λύσουμε. Επιμέρους υπολογισμοί του υπολογισμού που απαιτείται για τη λύση ενός προβλήματος, μπορεί να γράφονται / αναπτύσσονται ως ξεχωριστά προγράμματα. Αυτά τα προγράμματα, αν και αποτελούν μέρη / κομμάτια της λύσης ενός προβλήματος, α- ναπτύσσονται ανεξάρτητα το ένα από το άλλο και συνδέονται μεταξύ τους, μέσα από ένα κυρίως πρόγραμμα. Το κυρίως πρόγραμμα καλεί κάθε ένα από τα επιμέρους προγράμματα, μεταβιβάζοντας σ αυτό, τα δεδομένα που χρειάζεται για να εκτελέσει τον υπολογισμό του. Όταν το επιμέρους πρόγραμμα ολοκληρώνει τον υπολογισμό που εκτελεί, επιστρέφει το αποτέλεσμα αυτού του υπολογισμού, στο κυρίως πρόγραμμα. Το κυρίως πρόγραμμα συνδυάζει τα αποτελέσματα που παίρνει από όλα τα επιμέρους προγράμματα, στη λύση του συνολικού προβλήματος που επιχειρούμε να λύσουμε. Αυτή η αλληλεπίδραση ανάμεσα σ ένα κυρίως πρόγραμμα και σε επιμέρους προγράμματα, στη λύση ενός προβλήματος, παριστάνεται στην Εικόνα. Σ αυτή την ενότητα, εξετάζουμε πως μπορούμε να γράφουμε προγράμματα που αποτελούνται και εκτελούν τον υπολογισμό που απαιτείται για τη λύση ενός προβ-
λήματος, χρησιμοποιώντας / καλώντας και συνδυάζοντας συναρτήσεις, κάθε μία από τις οποίες εκτελεί έναν επιμέρους υπολογισμό της συνολικής λύσης του προβλήματος. Στην αρχή, γράφουμε προγράμματα που αποτελούνται / περιλαμβάνουν μία συνάρτηση, εκτός από το κυρίως πρόγραμμα. Μετά, η γενίκευση σε προγράμματα που περιλαμβάνουν περισσότερες από μία συναρτήσεις είναι απλή διαδικασία. Θέμα 1: Γράψτε μία συνάρτηση στη C για να υπολογίζει το τετράγωνο ενός πραγματικού αριθμού. Χρησιμοποιείστε αυτή τη συνάρτηση σ ένα πρόγραμμα που θα διαβάζει έναν πραγματικό αριθμό και θα καλεί τη συνάρτηση, για να υπολογίσει το τετράγωνο αυτού του αριθμού. ΑΠΑΝΤΗΣΗ Για να γράψουμε μία συνάρτηση στη C, ακολουθούμε τη παρακάτω διαδικασία. Βήμα 1: Επικεφαλίδα. Όπως και με την ανάπτυξη του προγράμματος, η ανάπτυξη του κώδικα μίας συνάρτησης ξεκινάει από την επικεφαλίδα. Στην επικεφαλίδα, ορίζουμε: 1. Το τύπο του αποτελέσματος που υπολογίζει η συνάρτηση 2. Το όνομα της συνάρτησης και 3. Τις παραμέτρους της συνάρτησης Έτσι, η επικεφαλίδα μίας συνάρτησης για να υπολογίζει το τετράγωνο ενός πραγματικού αριθμού x, μπορεί να έχει τη μορφή: function square (x : real) : real; Όνομα της συνάρτησης Παράμετροι (Δεδομένα) της συνάρτησης Τύπος της συνάρτησης Ο τύπος μίας συνάρτησης είναι ο τύπος του αποτελέσματος που η συνάρτηση υπολογίζει. Οι παράμετροι μίας συνάρτησης είναι / παριστάνουν τα δεδομένα που χρειάζεται μία συνάρτηση, για να εκτελέσει τον ζητούμενο υπολογισμό. Έτσι, το πλήθος των παραμέτρων μίας συνάρτησης είναι τόσο όσο και το πλήθος των δεδομένων που απαιτούνται για να υπολογίζει και να επιστρέφει η συνάρτηση, το ζητούμενο αποτέλεσμα. Οι τιμές των παραμέτρων καθορίζονται / στέλνονται / μεταβιβάζονται στη συνάρτηση από το κυρίως πρόγραμμα, κατά τη κλήση της συνάρτησης. Η συνάρτηση square για να υπολογίζει το τετράγωνο ενός αριθμού x, χρειάζεται ένα δεδομένο, τη τιμή x αυτού του αριθμού. Δεν χρειάζεται κανένα άλλο δεδομένο. Έτσι, στον ορισμό αυτής της συνάρτησης, δηλώνουμε μία παράμετρο την x, για να παρισ-
τάνει τη τιμή του αριθμού που το τετράγωνό του καλείται να υπολογίσει η συνάρτηση. Η παράμετρος x δηλώνεται να έχει το τύπο real. H τιμή της παραμέτρου x θα δίνεται από το κυρίως πρόγραμμα, κατά τη κλήση της συνάρτησης. Βήμα 2: Γράφουμε το πρόγραμμα / εντολές για να εκτελούν τον υπολογισμό που επιδιώκεται από μία συνάρτηση, όπως θα γράφαμε το κώδικα ενός οποιουδήποτε προγράμματος στη PASCAL. H συνάρτηση που χρειάζεται να γράψουμε σ αυτό το θέμα, πρέπει να υπολογίζει το τετράγωνο / να υψώνει στο τετράγωνο ένα αριθμό x που δίνεται σαν παράμετρος στη συνάρτηση. Πως θα υπολογίζει το τετράγωνο αυτού του αριθμού? Πολύ απλά πολλαπλασιάζοντάς τον με τον εαυτό του: function square (x : real) : real; begin square := x * x end; Βήμα 3 Ένα ακόμα χαρακτηριστικό μίας συνάρτησης: Όταν η συνάρτηση ολοκληρώσει τον υπολογισμό της, χρειάζεται να επιστρέψει το αποτέλεσμα αυτού του υ- πολογισμού στο κυρίως πρόγραμμα επικοινωνία ανάμεσα στη συνάρτηση και το κυρίως πρόγραμμα. Για παράδειγμα, η συνάρτηση square (x) υπολογίζει το τετράγωνο του αριθμού x, πολλαπλασιάζοντάς τον με τον εαυτό του. Έχοντας ολοκληρώσει τον υπολογισμός της, η συνάρτηση χρειάζεται να επιστρέψει / να επικοινωνήσει το αποτέλεσμα αυτού του υπολογισμού, πίσω στο κυρίως πρόγραμμα. Πως? Στη PASCAL, μία συνάρτηση επιστρέφει / στέλνει το αποτέλεσμα του υπολογισμού της στο κυρίως πρόγραμμα, με την τελευταία εντολή στο κώδικα της συνάρτησης που είναι η εκχώρηση αυτού του αποτελέσματος στο όνομα της συνάρτησης: square := x; Βήμα 4 Ενσωμάτωση της συνάρτησης στο κυρίως πρόγραμμα: Αφού γράψουμε το κώδικα μίας συνάρτησης, απομένει να ενσωματώσουμε αυτό το κώδικα, στο κώδικα του κυρίως προγράμματος. Για να περιλάβουμε το κώδικα μίας συνάρτησης, στο κυρίως πρόγραμμα: Προσθέτουμε το κώδικα (πρόγραμμα) της συνάρτησης, μετά τις δηλώσεις των μεταβλητών του κυρίως προγράμματος και πριν την αρχή του κυρίως προγράμματος. Εάν έχουμε γράψει περισσότερες από μία συναρτήσεις, προσθέτουμε το κώδικα (πρόγραμμα) κάθε μίας από αυτές, πριν την αρχή του κυρίως προγράμματος. Όλες οι συναρτήσεις πρέπει να είναι πριν το κυρίως πρόγραμμα, όμως η σειρά με την οποία γράφουμε / περιλαμβάνουμε τους κώδικες αυτών των συναρτήσεων, πριν το κυρίως πρόγραμμα, δεν έχει σημασία.
Εικόνα 1: H μορφή και η λειτουργία μίας συνάρτησης στη PASCAL.
Θέμα 2: Γράψτε μία συνάρτηση στη PASCAL που να υπολογίζει τη τετραγωνική ρίζα ενός αριθμού x, χρησιμοποιώντας τον αλγόριθμο Newton ΑΠΑΝΤΗΣΗ Έστω c η τετραγωνική ρίζα ενός αριθμού x. Τότε: c 2 = x, Άρα, x - c 2 = 0 Επομένως, για να βρούμε τη τετραγωνική ρίζα ενός αριθμού x, στη βάση του αλγόριθμού Newton, αρκεί να βρούμε τις ρίζες της εξίσωσης f(x) = x - c 2 = 0 Διαβάζουμε τον αριθμό x και ξεκινάμε με μία αρχική εκτίμηση, έστω: c := x; για τη τετραγωνική ρίζα του αριθμού x. Εάν x/c = c x = c 2, τότε η τετραγωνική ρίζα του αριθμού x είναι c. Διαφορετικά, παίρνουμε την επόμενη εκτίμηση c για τη τετραγωνική ρίζα του x, να είναι: c := (c + x/c) / 2.; Επαναλαμβάνουμε αυτή τη διαδικασία, μέχρι x/c = c ή πολύ κοντά με ε = 10-6
Θέμα 3: Γράψτε μία συνάρτηση στη PASCAL για να υπολογίζει το συνημίτονο μίας γωνίας θ. Το συνημίτονο μίας γωνίας θ, μπορεί να υπολογιστεί από την ακόλουθη σειρά: cosx = 1 - x 2 / 2! + x 4 / 4! - x 6 / 6! + Η συνάρτηση που θα γράψετε, θα πρέπει να υπολογίζει το συνημίτονο από τους πέντε πρώτους όρους της παραπάνω σειράς, Γράψτε μετά, ένα πρόγραμμα που να διαβάζει μία γωνία μία γωνία θ σε μοίρες, 0 θ 360. Το πρόγραμμα θα πρέπει να μετατρέπει αυτή τη γωνία σε ακτίνια και να υπολογίζει το συνημίτονο της γωνίας, καλώντας τη συνάρτηση που γράψατε, στη βάση της παραπάνω ακολουθίας.