Υποπρόγραμμα
Ένα υποπρόγραμμα (subprogram) ή υπορουτίνα (subroutine) είναι ένα σύνολο εντολών της Pascal που κάνει μια συγκεκριμένη λειτουργία και γράφεται με τους ίδιους κανόνες που γράφεται ένα πρόγραμμα. Τα υποπρογράμματα χωρίζονται σε δύο κατηγορίες:
- διαδικασίες (procedures)
- συναρτήσεις (functions) -σε αυτές αναφέρεται το άρθρο-
Είναι χρήσιμα όταν θέλουμε να χρησιμοποιήσουμε ένα κομμάτι κώδικα πολλές φορές. Αντί να το αντιγράφουμε κάθε φορά που θέλουμε να το χρησιμοποιήσουμε, φτιάχνουμε ένα υποπρόγραμμα που κάνει αυτό που θέλουμε και το καλούμε κάθε φορά που το χρειαζόμαστε.
Υπάρχουν περιπτώσεις όπου αυτές οι εντολές που θέλουμε να εκτελεστούνε σε 2 διαφορετικά σημεία του προγράμματος διαφέρουν αλλά όχι πολύ μεταξύ τους. Και σε αυτή την περίπτωση μπορούμε να χρησιμοποιήσουμε υποπρογράμματα. Τα υποπρογράμματα μπόρουν να δέχονται δεδόμενα για είσοδο μέσω των παραμέτρων τους και να εκτελούν τις εντολές ανάλογα.
Συνάρτηση (function)
Οι συναρτήσεις (function) είναι υποπρογράμματα (υπορουτίνες) που επιστρέφουν ΜΙΑ τιμή.
Η τιμή αυτή επιστρέφεται στη ρουτίνα που κάλεσε τη συνάρτηση και ονομάζεται αποτέλεσμα της συνάρτησης.
Το αποτέλεσμα αυτό χρησιμοποιείται με τον ίδιο τρόπο που χρησιμοποιείται και μια μεταβλητή, μπορεί δηλαδή να είναι μέρος μιας παράστασης, μπορεί να είναι μια πραγματική παράμετρος τιμής ή μπορεί να αποδοθεί σε μια μεταβλητή του ίδιου τύπου.
[ms_alert icon=”fa-exclamation” background_color=”#f5f5f5″ text_color=”” border_width=”5″ border_radius=”5″ box_shadow=”yes” dismissable=”no” class=”” id=””]Η συνάρτηση είναι ένα υποπρόγραμμα ειδικά σχεδιασμένο να επιστρέφει μία και μόνο μία τιμή.[/ms_alert]
Ο ορισμός της συνάρτησης
Ο ορισμός μιας συνάρτησης αποτελείται από τρία μέρη:
- Τίτλο
- Δεδομένα
- Κύριο μέρος της συνάρτησης
Ο τίτλος της συνάρτησης αποτελείται από τη δεσμευμένη λέξη Function ακολουθούμενη από το όνομα της συνάρτησης καθώς και τις παραμέτρους. Η ίδια η συνάρτηση πρέπει να δηλωθεί με κάποιον συγκεκριμένο τύπο δεδομένων.
Άρα ο τίτλος αποτελείται από τα παρακάτω 4 πράγματα:
- δεσμευμένη λέξη Function
- όνομα της συνάρτησης (αναγνωριστικό)
- απαιτούμενες παραμέτρους (προαιρετικό, αν υπάρχουν)
- τύπος συνάρτησης (υποχρεωτικό)
Τα δεδομένα που πρόκειται να χειριστούν οι εντολές της συνάρτησης, ορισμένα σαν επικεφαλίδες, σταθερές, τύποι και μεταβλητές, δηλώνονται μετά τον τίτλο, αλλά πριν από την πρώτη εντολή της συνάρτησης. Αυτό είναι το τμήμα των δηλώσεων της συνάρτησης.
Μετά ακολουθεί το κύριο μέρος της συνάρτησης. Αποτελείται από ένα σύνολο εκτελέσιμων εντολών, όπου περιγράφονται οι πράξεις που πρόκειται να γίνουν. Οι εντολές της συνάρτησης περικλείονται από τις δεσμευμένες λέξεις begin και end ακολουθούμενες από το σύμβολο ;
.
Η γενική μορφή της συνάρτησης είναι η εξής :
Function Τίτλος_Συνάρτησης (Προεραιτικές παράμετροι): Τύπος_Συνάρτησης; {Δηλώσεις δεδομένων} begin {Εντολές Προγράμματος (κύριο μέρος της συνάρτησης)} end;
Κλήση των Συναρτήσεων
Η κλήση μιας συνάρτησης μπορεί να γίνει γράφοντας μόνο τον τίτλο της.
Η συνάρτηση επιστρέφει μια τιμή και συνεπώς θα πρέπει μέσα στο προγραμμα που την κάλεσε (το κυρίως πρόγραμμα ή κάποιο άλλο υποπρόγραμμα) να εκχωρείται η τιμή αυτή σε κάποια μεταβλητή.
Στο παρακάτω παράδειγμα:
powr := power(num, expo);
καλείται η συνάρτηση power
και δίνεται η τιμή της στην μεταβλητή powr
. Η συνάρτηση power
έχει δύο παραμέτρους, που βρίσκονται μέσα σε παρενθέσεις αμέσως μετά το όνομα της συνάρτησης.
Μια συνάρτηση μπορεί επίσης να κληθεί μέσα σε πράξεις, όπως στο παρακάτω παράδειγμα :
dazzle := 12 * surprise(730, 88)/2;
Εδώ η συνάρτηση surprise
εκφράζεται ως μέρος μιας πράξης στο δεξί μέρος της εκχώρησης.
Επιστρεφόμενες Τιμές Συναρτήσεων
Η συνάρτηση επιστρέφει κάποια τιμή η οποία περιέχεται στο όνομά της. Για παράδειγμα, η παρακάτω πρόταση :
Function power(): Real; Begin power:= -1.0 End;
αναγκάζει τη συνάρτηση power να επιστρέψει την τιμή -1.0. Επίσης η μεταβλητή που δέχεται την τιμή θα πρέπει να είναι του ίδιου τύπου με τον τύπο επιστροφής της συνάρτησης.
[ms_alert icon=”fa-exclamation” background_color=”#f5f5f5″ text_color=”” border_width=”5″ border_radius=”5″ box_shadow=”yes” dismissable=”no” class=”” id=””]Κάθε συνάρτηση ορίζει τοπική (δικιά της) μεταβλητή με το ίδιο όνομα και τύπο με αυτήν. Το περιεχόμενο της μεταβλητής αυτής επιστρέφεται στο τέλος της συνάρτησης.[/ms_alert]
Απλό παράδειγμα συνάρτησης
Ακολουθεί ένα πρόγραμμα που περιέχει μια συνάρτηση η οποία υψώνει έναν αριθμό σε κάποια δύναμη.
Program Funct; Var num, expo, powr : Real; //-------------------------------------- Function power(base, exponent : Real) : Real; Begin If base >0 Then Power := Exp(exponent * Ln(base)) Else Power := -1.0; End; { end of power() } //-------------------------------------- Begin Writeln('Δώστε έναν αριθμό: '); Readln(num); Writeln('Δώστε τον εκθέτη: '); Readln(expo); powr:= Power(num, expo); Writeln(num, '^', expo, ' = ', powr); End.
Το παραπάνω πρόγραμμα Funct περιμένει την εισαγωγή δύο αριθμών, της βάσης και του εκθέτη και στη συνέχεια καλεί τη συνάρτηση power, η οποία υψώνει τον αριθμό στην αντίστοιχη δύναμη. Το αποτέλεσμά του είναι το παρακάτω:
Δώστε έναν αριθμό: 5 Δώστε τον εκθέτη: 3 5^3 = 125