Είδη υποπρογραμμάτων

 

Υπάρχουν δυο είδη υποπρογραμμάτων, οι διαδικασίες και οι συναρτήσεις. Το είδος κάθε υποπρογράμματος καθορίζεται από το είδος της λειτουργίας που καλείται να επιτελέσει.

3.1 Διαδικασίες

Οι διαδικασίες μπορούν να εκτελέσουν οποιαδήποτε λειτουργία από αυτές που μπορεί να εκτελέσει ένα πρόγραμμα. Δηλαδή σε μία διαδικασία μπορούν να γίνουν οι παρακάτω ενέργειες:

  • Εισαγωγή Δεδομένων
  • Εκτέλεση πράξεων και κάθε είδους Υπολογισμού
  • Μεταβολή τιμών σε μεταβλητές
  • Εκτύπωση και Εμφάνιση αποτελεσμάτων

Από τα παραπάνω μπορούμε να αποδώσουμε τον παρακάτω ορισμό για τη διαδικασία.

Η Διαδικασία είναι ένας τύπος υποπρογράμματος που μπορεί να εκτελεί όλες τις λειτουργίες ενός προγράμματος.

Όλα τα υποπρογράμματα τα οποία έχουν καταγραφεί μέχρι τώρα, στο κεφάλαιο που διαβάζετε αποτελούν διαδικασίες. Επομένως μπορούμε πλέον να τα γράψουμε στην τελική τους μορφή, την οποία θα χρησιμοποιούμε από εδώ και πέρα. Η μοναδική διαφορά στο συντακτικό της συγγραφής διαδικασιών είναι ότι αντικαθιστούμε τα δηλωτικά λεκτικά ΥΠΟΠΡΟΓΡΑΜΜΑ και ΤΕΛΟΣ_ΥΠΟΠΡΟΓΡΑΜΜΑΤΟΣ που χρησιμοποιούσαμε μέχρι τώρα με τα λεκτικά ΔΙΑΔΙΚΑΣΙΑ και ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ αντίστοιχα.

Το όνομα μίας διαδικασίας είναι οποιοδήποτε έγκυρο όνομα της ΓΛΩΣΣΑΣ.

Μία διαδικασία εκτελείται / ενεργοποιείται με την ειδική εντολή ΚΑΛΕΣΕ ακολουθούμενο με το όνομα της διαδικασίας και τη λίστα των πραγματικών παραμέτρων της (ακριβώς όπως έχει γίνει σε όλα τα προηγούμενα παραδείγματα).

Παράδειγμα 8
Χρειάζεται να γράψουμε ένα υποπρόγραμμα το οποίο να δέχεται 2 ακέραιους αριθμούς και να τους αντιμεταθέτει

Η διαδικασία που θα γράψω για να λύσω το πρόβλημα μου φαίνεται παρακάτω:

ΔΙΑΔΙΚΑΣΙΑ Αντιμετάθεση(α, β)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: α, β, π
ΑΡΧΗ
π <- α
α <- β
β <- π
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ


Παρατηρήσεις

  • Στις διαδικασίες οι παράμετροι μπορούν να χρησιμοποιηθούν για να περάσουν τιμές από το τμήμα προγράμματος (κυρίως πρόγραμμα ή υποπρόγραμμα) που καλούνται στη διαδικασία και το αντίθετο, δηλαδή να περάσουν τιμές από τη διαδικασία στο τμήμα προγράμματος από το οποίο κλήθηκε.
  • Μία διαδικασία μπορεί να κληθεί από μία άλλη διαδικασία ή από το κυρίως πρόγραμμα.
  • Σε μία διαδικασία μπορούμε να ενεργοποιήσουμε μία συνάρτηση.

 

Δραστηριότητα 7

Να γραφεί μία διαδικασία που να δέχεται ένα μήνυμα κειμένου. Στη συνέχεια να διαβάζει ένα ακέραιο θετικό αριθμό τον οποίο και θα επιστρέφει, ενώ επιπλέον θα εμφανίζει το μήνυμα τόσες φορές όσες καθορίζει ο ακέραιος που δόθηκε. Θεωρήσετε ότι διαθέτετε τη διαδικασία ΕισαγωγήΑκεραίου(Ν) η οποία επιστρέφει ένα θετικό ακέραιο και μπορείτε να τη χρησιμοποιήσετε χωρίς να τη δηλώνεται ξανά.
Κάνετε κλικ εδώ [ΑΠΑΝΤΗΣΗ] για να διαβάσετε τη δική μας απάντηση

 


3.2 Συναρτήσεις

Αντίθετα η λειτουργία των συναρτήσεων είναι πιο περιορισμένη.

Οι συναρτήσεις υπολογίζουν μόνο μία τιμή, αριθμητική, χαρακτήρα ή λογική και μόνο αυτήν επιστρέφουν στο υποπρόγραμμα που την κάλεσε. Οι συναρτήσεις μοιάζουν με τις συναρτήσεις των μαθηματικών και η χρήση τους είναι όμοια με τη χρήση των ενσωματωμένων συναρτήσεων που υποστηρίζει η γλώσσα προγραμματισμού.

Από τα παραπάνω μπορούμε να αποδώσουμε τον παρακάτω ορισμό για τη συνάρτηση

Η Συνάρτηση είναι ένας τύπος υποπρογράμματος που δέχεται μια ομάδα παραμέτρων, κάνει κάποιες επεξεργασίες με αυτές και τελικά υπολογίζει και επιστρέφει μια μόνο τιμή, στο όνομα της (όπως οι μαθηματικές συναρτήσεις).

Το όνομα μίας συνάρτησης είναι οποιοδήποτε έγκυρο όνομα της ΓΛΩΣΣΑΣ.

Η δήλωση αλλά και η εκτέλεση / ενεργοποίηση των συναρτήσεων, λόγω του τρόπου λειτουργίας τους, διαφοροποιείται σε σχέση με αυτήν των διαδικασιών.

Παράδειγμα 9
Θέλουμε να υπολογίσουμε και να εμφανίσουμε τον μεγαλύτερο αριθμό από τέσσερις ακεραίους που δίνονται.

Επιλέγουμε να λύσουμε το πρόβλημα μας, γράφοντας ένα υποπρόγραμμα το οποίο να δέχεται 2 ακέραιους αριθμούς και να υπολογίζει τον μεγαλύτερό τους. Το υποπρόγραμμα αυτό χρησιμοποιείται στο κυρίως πρόγραμμα όσες φορές χρειάζεται για να υπολογίσουμε το τελικό ζητούμενο.

Το κυρίως πρόγραμμα που λύνει το πρόβλημά μας είναι το παρακάτω, ενώ η συνάρτηση που χρησιμοποιώ καταγράφεται αμέσως από κάτω.

ΠΡΟΓΡΑΜΜΑ Μεγαλύτερο4
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: α1, α2, α3, α4, μ1,μ2
ΑΡΧΗ
ΓΡΑΨΕ ‘Δώσε 4 ακέραιους αριθμούς :'
ΔΙΑΒΑΣΕ α1, α2, α3, α4
μ1 <- Μέγιστος2(α1, α2)
μ2 <- Μέγιστος2(α3, α4)
ΓΡΑΨΕ ‘Ο μεγαλύτερος αριθμός είναι ο ‘, Μέγιστο2(μ1, μ2)
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΣΥΝΑΡΤΗΣΗ Μέγιστος2(α, β): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ:α, β, μεγ
ΑΡΧΗ
ΑΝ α > β ΤΟΤΕ
μεγ <- α
ΑΛΛΙΩΣ
μεγ <- β
ΤΕΛΟΣ_ΑΝ
Μέγιστος2 <- μεγ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

Όπως διαπιστώνετε υπάρχουν οι παρακάτω διαφορές σε σχέση με τη διαδικασία

  • Η συνάρτηση επιστρέφει το ζητούμενο στο όνομά της, άρα το όνομα της χρησιμοποιείται μέσα στη συνάρτηση σαν κανονική μεταβλητή.
  • Σαν μεταβλητή που είναι το όνομα της συνάρτησης πρέπει να έχει έναν τύπο. Ο τύπος αυτός μπορεί να είναι οποιοσδήποτε τύπος δεδομένων υποστηρίζει η ΓΛΩΣΣΑ. Μία συνάρτηση δηλαδή μπορεί να είναι: ΑΚΕΡΑΙΑ, ΠΡΑΓΜΑΤΙΚΗ, ΧΑΡΑΚΤΗΡΑΣ ή ΛΟΓΙΚΗ. Ο τύπος γράφεται στη γραμμή δήλωσης της συνάρτησης μετά τη λίστα μεταβλητών.
  • Η τελευταία εντολή σε μια συνάρτηση είναι συνήθως μία εντολή εκχώρησης της τιμής που υπολογίστηκε και πρέπει να επιστραφεί, στο όνομα της συνάρτησης.
  • Μία συνάρτηση εκτελείται / ενεργοποιείται απλά με την εμφάνιση του ονόματός της σε οποιαδήποτε έκφραση .
  • Στις συναρτήσεις οι παράμετροι μπορούν να χρησιμοποιηθούν μόνο για να περάσουν τιμές από το τμήμα προγράμματος (κυρίως πρόγραμμα ή υποπρόγραμμα) που καλούνται στη συνάρτηση. Ποτέ το αντίθετο.
  • Μία συνάρτηση μπορεί να ενεργοποιηθεί σε μία διαδικασία ή σε μία άλλη συνάρτηση
  • Μία συνάρτηση εκτελείται όπως ακριβώς εκτελούνται οι ενσωματωμένες συναρτήσεις της ΓΛΩΣΣΑΣ.


Προκειμένου να σχηματίσετε μία πληρέστερη εικόνα του τρόπου που συνεργάζεται ένα κυρίως πρόγραμμα με τα υποπρογράμματά του καθώς και τις διαφορές των συναρτήσεων με τις διαδικασιών, είναι χρήσιμο να διαβάσετε το σχετικό αναλυτικό παράδειγμα


3.3 Επιλογή κατάλληλου υποπρογράμματος

Από τα παραπάνω ελπίζουμε να έγιναν κατανοητές οι διαφορές μεταξύ των δύο τύπων υποπρογραμμάτων. Όπως αντιλαμβάνεστε η διαφορετικότητά τους καθορίζει και σε ποιες περιπτώσεις πρέπει να χρησιμοποιείτε το κάθε ένα. Είναι πολύ σημαντικό να μπορούμε να αποφασίζουμε σωστά πιο τύπο υποπρογράμματος θα χρησιμοποιούμε σε κάθε περίσταση. Για να γίνει αυτό θα πρέπει να έχουμε ξεκαθαρίσει στο μυαλό μας τι κοινό αλλά κυρίως τι διαφορετικό έχουν.

Όπως καταλαβαίνετε λοιπόν: οι διαδικασίες μπορούν να κάνουν οποιαδήποτε ενέργεια , ενώ οι συναρτήσεις (α) δεν επιτρέπεται να περιλαμβάνουν εντολές εισόδου και εξόδου (ΔΙΑΒΑΣΕ και ΓΡΑΨΕ) ενώ επιπλέον πρέπει να υπολογίζουν και να επιστρέφουν στο όνομά τους μία μόνο τιμή .

Δραστηριότητα 10

Σύμφωνα με τα παραπάνω η διαδικασία είναι ένας τύπος υποπρογράμματος ο οποίος μπορεί να χρησιμοποιηθεί για κάθε πρόβλημα. Γιατί λοιπόν, κατά τη γνώμη σας υπάρχουν δύο είδη υποπρογραμμάτων και πιο συγκεκριμένα γιατί να υπάρχουν οι συναρτήσεις;

Κάνετε κλικ εδώ [ΑΠΑΝΤΗΣΗ] για να διαβάσετε τη δική μας απάντηση

 

Δραστηριότητα Online

Στο σημείο αυτό είναι χρήσιμο να ελέγξετε το βαθμό κατανόησης της ύλης που έχετε διαβάσει στην παρούσα ενότητα, κάνωντας το παρόν online τεστ αυτοαξιολόγησης

 


3.4 Χαρακτηριστικά των Υποπρογραμμάτων

Όπως αναφέρθηκε προηγουμένως (στην ενότητα 1), ο χωρισμός ενός προγράμματος σε υποπρογράμματα προϋποθέτει την ανάλυση του αρχικού προβλήματος σε μικρότερα υποπροβλήματα, τα οποία να μπορούν να αντιμετωπισθούν ανεξάρτητα το ένα από το άλλο.

Υπάρχουν πάντως τρεις βασικές ιδιότητες που πρέπει να έχουν όλα τα υποπρογράμματα και τις οποίες πρέπει να λαμβάνουμε υπόψη κατά τη συγγραφή τους. Οι βασικές αυτές αρχές είναι οι παρακάτω:

3.4.1 Κάθε υποπρόγραμμα έχει μόνο μία είσοδο και μία έξοδο.

Το υποπρόγραμμα, ενεργοποιείται με την είσοδο σε αυτό (που γίνεται πάντοτε από την αρχή του), δέχεται κάποιες τιμές μέσω των παραμέτρων, πραγματοποιεί κάποιες ενέργειες - υπολογισμούς και τερματίζεται – απενεργοποιείται, επιστρέφοντας μία ή περισσότερες τιμές κατά την έξοδο από αυτό, που γίνεται πάντα από το τέλος του.



Στο σημείο αυτό είναι χρήσιμο να διαβάσετε πάλι την ενότητα 6.4.3 σελ. 132 του βιβλίου του μαθητή, που αναφέρεται στο Δομημένο Προγραμματισμό.

Παράδειγμα 10
Δείτε τη διαδικασία που χρησιμοποιήσαμε στο παράδειγμα 3.

Το υποπρόγραμμα ΕισαγωγήΘετικούΑριθμού όταν πάρει τον έλεγχο ξεκινάει από την 1η εντολή μετά την μία και μοναδική αρχή του (που καθορίζεται με τη σχετική δηλωτική εντολή ΑΡΧΗ). Δηλαδή εκτελείται η εντολή ΓΡΑΨΕ και εμφανίζεται το σχετικό μήνυμα «Δώσε θετική και ακέραια τιμή». Στη συνέχεια εκτελούνται οι εντολές με τη σειρά και τον τρόπο που καθορίζεται και τελευταία εκτελείται η 5η εντολή (όπου εκχωρείται στο x το ακέραιο μέρος του α) και στη συνέχεια το υποπρόγραμμα τελειώνει και επιστρέφει στην επόμενη εντολή του τμήματος προγράμματος από το οποίο κλήθηκε. Δεν υπάρχει καμία περίπτωση
Α) να εκτελεστεί πρώτα η 2 η ή η 3 η εντολή, όπως επίσης
Β) να εκτελεστεί μετά την 5 η εντολή κάποια άλλη εντολή του υποπρογράμματος.

 

 

ΑΡΧΗ
1 η εντολή:
2 η εντολή:
3 η εντολή:
4 η εντολή:
5 η εντολή:
ΤΕΛΟΣ

ΔΙΑΔΙΚΑΣΙΑ ΕισαγωγήΘετικούΑκεραίου( x )
ΜΕΤΑΒΛΗΤΕΣ:
ΠΡΑΓΜΑΤΙΚΕΣ:α
ΑΚΕΡΑΙΕΣ: x
ΑΡΧΗ
ΓΡΑΨΕ ‘Δώσε θετική και ακέραια τιμή:'
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΔΙΑΒΑΣΕ α
ΜΕΧΡΙΣ_ΌΤΟΥ α >=0 ΚΑΙ α = Α_Μ(α)
x <- Α_Μ(α)
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

 

3.4.2 Κάθε υποπρόγραμμα πρέπει να είναι ανεξάρτητο από τα άλλα.

Αυτό σημαίνει ότι κάθε υποπρόγραμμα πρέπει να σχεδιαστεί από την αρχή με τέτοιο τρόπο ώστε να μην έχει (κατά το δυνατόν βέβαια) εξάρτηση από το κυρίως πρόγραμμα ή από άλλα υποπρογράμματα. Ένα ανεξάρτητο υποπρόγραμμα μπορεί να αναπτυχθεί να βελτιωθεί να διορθωθεί και να τροποποιηθεί αυτόνομα. Στην πράξη βέβαια η απόλυτη ανεξαρτησία είναι δύσκολο να επιτευχθεί

Παράδειγμα 11
Ας δούμε τώρα με ένα παράδειγμα, με πιο τρόπο μπορούμε να επιδιώξουμε ή να ρυθμίσουμε το επίπεδο ανεξαρτησίας για ένα υποπρόγραμμα που φτιάχνουμε. Θεωρήσετε ένα πρόβλημα στο οποίο δίνονται βαθμοί στην εικοσαβάθμια κλίμακα και υπολογίζεται ο Μέσος Όρος τους.

Για την αντιμετώπισή του πρέπει να γραφεί ένα υποπρόγραμμα για να ελέγχει κατά την εισαγωγή των δεδομένων αν όντως δίνεται αποδεκτός βαθμός. Για το συγκεκριμένο πρόβλημα μπορεί να γραφεί η παρακάτω διαδικασία.

ΔΙΑΔΙΚΑΣΙΑ Εισαγωγήβαθμού(β)
ΜΕΤΑΒΛΗΤΕΣ:
ΠΡΑΓΜΑΤΙΚΕΣ:β
ΑΡΧΗ
ΓΡΑΨΕ ‘Δώσε βαθμό από 0..20:'
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΔΙΑΒΑΣΕ β
ΜΕΧΡΙΣ_ΌΤΟΥ β >=0 ΚΑΙ β<=20
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

Η αντιμετώπιση αυτή είναι βέβαια αποδεκτή και λύνει το πρόβλημά μας. Είναι όμως συνδεμένη με αυτό, με την έννοια ότι το δεδομένο που εισάγεται περιορίζεται υποχρεωτικά μεταξύ του 0 και του 20.

Μία πιο σωστή θεώρηση, πηγάζει από τη λογική: Το πρόβλημα της εισαγωγής ένας αριθμού έτσι ώστε να ανήκει σε ένα κλειστό πεδίο ορισμού είναι αρκετά συνηθισμένο στο προγραμματισμό και μπορεί να το ξανασυναντήσουμε αλλά με διαφορετικά όρια τιμών. Επομένως μήπως αξίζει το κόπο να γράψω την παρακάτω διαδικασία;

ΔΙΑΔΙΚΑΣΙΑ ΕισαγωγήΑποΕως(α,β, x )
ΜΕΤΑΒΛΗΤΕΣ:
ΠΡΑΓΜΑΤΙΚΕΣ:α, β, x
ΑΡΧΗ
ΓΡΑΨΕ ‘Δώσε ένα αριθμό μεταξύ του', α, ‘ και του ‘, β
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΔΙΑΒΑΣΕ x
ΜΕΧΡΙΣ_ΌΤΟΥ x >= α ΚΑΙ x <= β
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

Η διαδικασία που γράψαμε είναι πιο γενική και ανεξάρτητη από το συγκεκριμένο πρόβλημα και μπορεί να χρησιμοποιηθεί σε περισσότερα προβλήματα.

Όπως διαπιστώνετε, η χρήση των παραμέτρων βοηθάει στην ανεξαρτησία ενός υποπρογράμματος.

3.4.3 Κάθε υποπρόγραμμα πρέπει να μην είναι πολύ μεγάλο.

Το αν ένα πρόγραμμα είναι μεγάλο ή όχι είναι υποκειμενικό. Γενικά μπορούμε να πούμε ότι καλό είναι ένα υποπρόγραμμα να έχει έκταση μέχρι μία σελίδα. Ένα μικρό σε μέγεθος τμήμα εντολών, είναι εύκολα κατανοητό και ελεγχόμενο. Το σημαντικό σημείο κατά τη σχεδίαση και συγγραφή ενός υποπρογράμματος είναι ότι πρέπει αυτό να επιτελεί μία συγκεκριμένη λειτουργία. Αν διαπιστώσουμε ότι ένα υποπρόγραμμα που έχουμε φτιάξει επιτελεί περισσότερες από μία λειτουργίες, πιθανότατα να μπορεί να διασπαστεί σε απλούστερα υποπρογράμματα.

Δραστηριότητα 12

Αναφέρετε επιγραμματικά ποια χαρακτηριστικά πρέπει να έχει ένα υποπρόγραμμα. Αναπτύξετε ένα από αυτά και δώσετε αντίστοιχο παράδειγμα.

Κάνετε κλικ εδώ [ΑΠΑΝΤΗΣΗ] για να διαβάσετε τη δική μας απάντηση



Αφού τελειώσατε τη μελέτη του κεφαλαίου, διαβάσετε στο Παράρτημα Β συγκεντρωμένα τα βήματα που πρέπει να ακολουθείτε για να αντιμετωπίσετε ένα πρόβλημα και να το λύσετε με τμηματικό προγραμματισμό