Προγραμματισμός FORTRAN > Μαθήματα > Υποπρογράμματα
Αρχική-HomeΠαραδείγματαΕντολές-ΣυναρτήσειςΟδηγίες-FAQsΣυνδέσεις-Links

ΜΑΘΗΜΑ: ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΧΡΗΣΤΩΝ

Ομάδες εντολών που εκτελούν μια ειδική εργασία ή που επαναλαμβάνονται συχνά μπορούν να μετακινηθούν έξω από το κύριο πρόγραμμα σε ένα ή περισσότερα υποπρογράμματα ή προγραμματιστικές μονάδες. Με αυτό το τρόπο αφ' ενός το κυρίως σώμα του προγράμματος απλοποιείται, αφ' ετέρου το κάθε υποπρόγραμμα μπορεί να γραφεί, να δοκιμαστεί και να διορθωθεί ανεξάρτητα από τα άλλα, πολύ πιο εύκολα και αξιόπιστα. Η βασική προγραμματιστική μονάδα είναι αυτή του Κυρίως Προγράμματος που αρχίζει με την εντολή PROGRAM και τελειώνει με την εντολή END (ή END PROGRAM). Οι υπόλοιπες προγραμματιστικές μονάδες της fortran ανήκουν στη κατηγορία των Υποπρογραμμάτων, είναι δευτερεύουσες αυτοτελείς διαδικασίες, και είναι τριών ειδών:

  1. οι Συναρτήσεις που δηλώνονται με την εντολή FUNCTION,
  2. οι Υπορουτίνες που δηλώνονται με την εντολή SUBROUTINE, και,
  3. οι πιο σύνθετες Λογισμικές Μονάδες που δηλώνονται με την εντολή MODULE.


αρχή

ΣΥΝΑΡΤΗΣΕΙΣ (FUNCTIONS) & ΣΥΝΑΡΤΗΣΕΙΣ ΕΝΤΟΛΗΣ

Η Συνάρτηση-Function είναι ένα πλήρες πρόγραμμα το οποίο υπολογίζει μια τιμή και την επιστρέφει στο κυρίως πρόγραμμα και στο σημείο του ονόματος της. Λειτουργεί με τον ίδιο τρόπο που λειτουργούν οι συναρτήσεις βιβλιοθήκης (intrinsic function) της γλώσσας.

Η συνάρτηση δέχεται τα δεδομένα της (ένα ή περισσότερα) μέσω της παρένθεσης που ακολουθεί το όνομά της. Ο κώδικας κάθε συνάρτησης αρχίζει με την εντολή FUNCTION και τελειώνει με την END.

Έστω για παράδειγμα μια συνάρτηση που υπολογίζει το εμβαδόν τριγώνου από τις 3 πλευρές:

REAL FUNCTION Embadon(a,b,c)
IMPLICIT NONE
  REAL:: a, b, c, t
  t = (a+b+c)/2.0
  Embadon = SQRT (t*(t-a)*(t-b)*(t-c))
END

Η εντολή FUNCTION δηλώνει τα εξής: η συνάρτηση λέγεται Embadon, δέχεται 3 δεδομένα (a,b,c) και επιστρέφει μια πραγματική τιμή (REAL). Η τιμή υπολογίζεται στο σώμα της συνάρτησης στο σημείο που εμφανίζεται το όνομά της σαν καταχώρηση ( Embadon = ... ).

Στο κυρίως πρόγραμμα δηλώνουμε και καλούμε τη συνάρτηση με το όνομά της δίνοντας τιμές στα δεδομένα της παρένθεσης από μεταβλητές του κυρίως προγράμματος:

...
  REAL:: Embadon
...
  S = 4 * Embadon(a1,b1,c1) + ...
...

ΣΥΝΑΡΤΗΣΕΙΣ ΕΝΤΟΛΗΣ

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

PROGRAM
  REAL:: A, B, C, MesosOros, P,... ! Τύπος της συνάρτησης
...
  MesosOros(A,B,C) = (A+B+C)/3. ! Ορισμός της συνάρτησης
...
  mo = MesosOros(TEST1,TEST2,XLAB) ! Χρήσεις της συνάρτησης
...
  IF (MesosOros(P,D,Q) .LT. MesosOros(X,Y,Z)) STOP
...
END


αρχή

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ/ΥΠΟΡΟΥΤΙΝΕΣ (SUBROUTINES)

Η Υπορουτίνα-Subroutine διαφέρει κυρίως από τη συνάρτηση στο ότι δεν επιστρέφει τιμή με το όνομά της, αλλά χρησιμοποιεί την παρένθεση για να πάρει δεδομένα και να δώσει τα αποτελέσματά της. Η κλήση μιας υπορουτίνας από το κυρίως πρόγραμμα γίνεται με την εντολή CALL ακολουθούμενη από το όνομα της υπορουτίνας. Ο κώδικας κάθε υπορουτίνας αρχίζει με την εντολή SUBROUTINE και τελειώνει με την εντολή END. Η εκτέλεσή μιας υπορουτίνας μπορεί να τελειώσει και νωρίτερα με τη χρήση της εντολής RETURN (όπως με την εντολή STOP στο κυρίως πρόγραμμα).

Το ίδιο παράδειγμα που υπολογίζει το εμβαδόν τριγώνου από τις 3 πλευρές, γραμμένο σαν υπορουτίνα θα είναι:

SUBROUTINE EmbadoTrigwnou(a,b,c,Emb)
IMPLICIT NONE
  REAL a, b, c, t, Emb
  t = (a+b+c)/2.0
  Emb = SQRT (t*(t-a)*(t-b)*(t-c))
END

Η εντολή SUBROUTINE δηλώνει τα εξής: η υπορουτίνα λέγεται EmbadoTrigwnou και δέχεται ή επιστρέφει 4 δεδομένα (a, b, c, Emb). Στο κυρίως πρόγραμμα καλούμε την υπορουτίνα με την εντολή CALL, το όνομά της και τη παρένθεση με τα δεδομένα, δίνοντας τιμές από μεταβλητές του κυρίως προγράμματος. Το αποτέλεσμά της το παίρνουμε, μέσω της Emb, στη μεταβλητή Embado του κυρίως προγράμματος και μπορούμε να το χρησιμοποιούμε στις επόμενες εντολές.

...
  CALL EmbadoTrigwnou(a1,b1,c1,Embad)
  S = Embad + ...
...


αρχή

ΛΟΓΙΣΜΙΚΕΣ ΜΟΝΑΔΕΣ (MODULES)

Ένα η περισσότερα συναφή υποπρογράμματα μαζί με τυχόν σφαιρικές δηλώσεις τύπων, μπορούν να ενωθούν σε μια ενότητα η οποία καλείται MODULE. Το MODULE είναι σύνθετη προγραμματιστική μονάδα και περιέχει μέσα του Δηλώσεις Δεδομένων, Συναρτήσεις και Υπορουτίνες. Σε μεγάλες εφαρμογές συναντάμε και ένα απλούστερο είδος MODULE που περιέχει μόνο δηλώσεις. Η ενιαία αυτή προγραμματιστική μονάδα αρχίζει με την εντολή MODULE και τελειώνει με την εντολή END.

Το MODULE ενεργοποιείται από το κυρίως πρόγραμμα με την εντολή USE. Τα περιεχόμενά του καλούνται στη συνέχεια, ή με το όνομά τους (συναρτήσεις), ή την εντολή CALL (υπορουτίνες).

Η δημιουργία και η χρήση σύνθετων λογισμικών μονάδων (modules) δεν αποτελεί στοιχείο του Βασικού Προγραμματισμού και γι’ αυτό θα ασχοληθούμε με περισσότερη λεπτομέρεια σε άλλο κεφάλαιο.


αρχή

Prev Μάθημα Next


Παραδείγματα

Ερωτήσεις


©2006 Δρ. Β. Χ. Μούσας, Επικ. Καθ., e-mail Τ.Ε.Ι. ΑθήναςΤμήμα Πολιτικών Έργων Υποδομής