ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Δρ. Ιωάννης Λυχναρόπουλος 2014-2015. Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας



Σχετικά έγγραφα
Συναρτήσεις. Υποπρόγραμμα

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Δομή Επανάληψης. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Εισαγωγή στην FORTRAN. Δρ. Ιωάννης Λυχναρόπουλος

Κεφάλαιο 7: Υποπρογράμματα. Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

Υπο-προγράμματα στη Fortran

Αναδρομικός αλγόριθμος

Η γλώσσα προγραμματισμού Strange

Κεφάλαιο 7: Υπορουτίνες

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι είναι ; Συναρτήσεις. Παράδειγμα #1. double convert ( double cm ) { double inch;

Μέρος 2 Κατασκευή Συντακτικού Αναλυτή

Προγραμματισμός ΙI (Θ)

Εισαγωγή στον Προγραμματισμό Η/Υ για Χημικούς Μηχανικούς

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ ΠΙΝΑΚΕΣ. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

Προγραμματισμός με FORTRAN Συνοπτικός Οδηγός Α. Σπυρόπουλος Α. Μπουντουβής

Υπολογιστικά Συστήματα

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Αρχεία Δεδομένων. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

Προγραμματισμός Ι (ΗΥ120)

1. Λογικά λάθη ονομάζονται αυτά που οφείλονται σε σφάλματα κατά την υλοποίηση του αλγόριθμου.

Αντίρριο, 14/03/2017 Προδιαγραφές Εργαστηριακής Εργασίας για το μάθημα «Μεταγλωττιστές»

Pascal. 15 Νοεμβρίου 2011

Κεφάλαιο 10 Υποπρογράμματα. Καραμαούνας Πολύκαρπος

8 FORTRAN 77/90/95/2003

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ ΠΙΝΑΚΕΣ. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

Συναρτήσεις και Υπορουτίνες

Κεφάλαιο 10 ο Υποπρογράµµατα

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Συναρτήσεις I Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ

Κεφάλαιο 12 : ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Διαδικασίες και συναρτήσεις. 22 Νοε 2008 Ανάπτυξη εφαρμογών/ Υποπρογράμματα 1

Εισαγωγή στη Fortran. Μάθημα 3 ο. Ελευθερία Λιούκα

Τι είναι υποπρόγραμμα; Τμήμα προγράμματος το οποίο επιτελεί ένα αυτόνομο υπολογιστικό έργο (γράφεται χωριστά από το υπόλοιπο πρόγραμμα)

Κεφάλαιο 10 Υποπρογράμματα. Καραμαούνας Πολύκαρπος

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Κάθε υποπρόγραμμα έχει μόνο μία είσοδο και μία έξοδο. Κάθε υποπρόγραμμα πρέπει να είναι ανεξάρτητο από τα άλλα.

Συνάρτηση Διαδικασία

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Προγραμματισμός Η/Υ

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Εντολή Δεδομένα Περιεχόμενα μετά την εκτέλεση 1 read(x) 122 x= 2 read(a,b,c) a= b= c= 3 read(d,e)

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον. Κεφάλαια 2,7,8

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

Δομημένος Προγραμματισμός

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Δομή Επιλογής. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

Η βασική συνάρτηση προγράμματος main()

Εισαγωγή στον Προγραμματισμό Python Μάθημα 4: Συναρτήσεις (functions) και δομοστοιχεία (modules) στην Python

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Η/Υ (ΤΛ2007 )

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ

Προγραμματισμός ΙI (Θ)

ΠΡΟΤΕΙΝΟΜΕΝΑ ΘΕΜΑΤΑ ΔΟΜΗΜΕΝΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Γ ΕΠΑΛ

Δομή προγράμματος στη Fortran

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

Η γλώσσα προγραμματισμού EEL

Η γλώσσα προγραμματισμού C

Εισαγωγή στον Προγραμματισμό

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

Ανάπτυξη και Σχεδίαση Λογισμικού

Fortran και Αντικειμενοστραφής προγραμματισμός.

Η γλώσσα προγραμματισμού C

Ανάπτυξη εφαρμογής Input-Output

Δομή προγράμματος στη Fortran

Εργαστήριο 9 Συναρτήσεις στη PASCAL. Η έννοια του κατακερματισμού. Συναρτήσεις. Σκοπός

Σχολικό Βιβλίο - Κεφάλαιο 7 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ PASCAL ΠΑΡΟΥΣΙΑΣΗ 13

ΕΚΦΩΝΗΣΕΙΣ ΘΕΜΑ Α. β. Οι πληροφορίες είναι δεδομένα τα οποία δεν έχουν υποστεί επεξεργασία.

Εισαγωγή στη γλώσσα προγραμματισμού Fortran 95

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

Εισαγωγή στον Προγραμματισμό με C++

Ηβασικήσυνάρτηση προγράμματος main()

Άσκηση 1. Α. Υπολογίστε χωρίς να εκτελέσετε κώδικα FORTRAN τα παρακάτω: Ποιά είναι η τελική τιμή του Z στα παρακάτω κομμάτια κώδικα FORTRAN:

Ψευδοκώδικας. November 7, 2011

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Κεφάλαιο 10. Υποπρογράμματα

διανύσματα - Πίνακες - Struct Στατικό διάνυσμα Είσοδος Έξοδος δεδομένων Συναρτήσεις Χειρισμός σφαλμάτων ΤΕΤΑΡΤΗ ΔΙΑΛΕΞΗ

Προγραμματισμός Η/Υ. Συναρτήσεις & Υποπρογράμματα. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Επικοινωνία:

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Δομημένος Προγραμματισμός (ΤΛ1006)

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Oι εντολές COMMON και PARAMETER

ΦΥΣ 145 Μαθηµατικές Μέθοδοι στη Φυσική. Πρόοδος 20 Μαρτίου 2011 Οµάδα

Εισαγωγή στον Προγραμματισμό H/Y (Fortran 90/95/2003)

Προγραμματισμός Ι (HY120)

procedure P ( < pars > ) < type> f( < pars > ) begin { < local vars > < local vars > < procedure body> < procedure body> end; }

Προγραμματισμός Η/Υ (ΤΛ2007 )

Σημειωματάριο Δευτέρας 30 Οκτ. 2017

Παράμετροι. Αναδρομή. Σχεδίαση Διεπαφής Χρήστη ΠΕΡΙΕΧΟΜΕΝΑ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΠΑΝΕΛΛΑΔΙΚΩΝ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2016

ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ

Visual Flowchart Γενικά

Transcript:

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Δρ. Ιωάννης Λυχναρόπουλος 2014-2015 Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας

Τι είναι τα υποπρογράμματα Αυτόνομες μονάδες κώδικα Γραμμένα από τον χρήστη Η δομή τους μοιάζει με τα γνωστά μέχρι τώρα προγράμματα Μπορούν να μεταγλωττιστούν ξεχωριστά Καλούνται από το κυρίως πρόγραμμα Εκτελούν μια συγκεκριμένη διεργασία Μπορούν να χρησιμοποιηθούν σε περισσότερα από ένα κύρια προγράμματα Το μέσο για την απλοποίηση, την καλύτερη οργάνωση και τη γενίκευση των προγραμμάτων

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

Είδη Υποπρογραμμάτων Υπορουτίνες (Subroutines) Υποπρογράμματα που μπορούν να εκτελέσουν όλες τις εντολές ενός προγράμματος Συναρτήσεις (Functions) Υπολογίζουν και επιστρέφουν μία μοναδική τιμή ή έναν πίνακα Δεν χρησιμοποιούνται για είσοδο και έξοδο δεδομένων Παρατήρηση: Στην Fortran ο διαχωρισμός μίας υπορουτίνας από μία συνάρτηση είναι δύσκολος, γιατί οι συναρτήσεις της Fortran μπορούν να επιστρέφουν περισσότερες από μία τιμές ή πίνακες καθώς επίσης και να χρησιμοποιούνται για είσοδο και έξοδο. Η χρήση όμως αυτή πρέπει να αποφεύγεται. Ο καλύτερος τρόπος είναι η χρήση των PURE συναρτήσεων.

Θέση εμφάνισης Υποπρογραμμάτων Εσωτερικά Υποπρογράμματα Περιέχονται στο «κύριο» πρόγραμμα Εισάγονται στην έκταση Contains End Program Αναγνωρίζονται και χρησιμοποιούνται μόνο από το «κύριο» πρόγραμμα Εξωτερικά Υποπρογράμματα Βρίσκονται σε ξεχωριστά αρχεία Συμπεριλαμβάνονται σε Project Αναγνωρίζονται και χρησιμοποιούνται από όλα τα πρoγράμματα/υποπρογράμματα στο Project Εσωτερικά Υποπρογράμματα Αρθρώματος (module) Βρίσκονται σε ξεχωριστά αρχεία (modules) Συμπεριλαμβάνονται σε Project Δηλώνονται και χρησιμοποιούνται στο κύριο πρόγραμμα μέσω της εντολής Use: USE <module_name> USE <module_name>, ONLY: <λίστα ονομάτων>

Ορίσματα (ή Παράμετροι) Είναι ειδικές μεταβλητές μέσω των οποίων πραγματοποιείται η επικοινωνία του κυρίως προγράμματος και των υποπρογραμμάτων Τα ορίσματα των υποπρογραμμάτων μπορεί να είναι μεταβλητές ή πίνακες οποιουδήποτε τύπου Πρέπει σε κάθε περίπτωση να δηλώνονται ακολουθώντας τους μέχρι τώρα γνωστούς κανόνες. Προσοχή χρειάζεται στην αντιστοιχία των ορισμάτων μεταξύ κλήσης από το κυρίως πρόγραμμα (πραγματικές παράμετροι) και του υποπρογράμματος (τυπικές παράμετροι). Πρέπει να ταιριάζουν το πλήθος και ο τύπος τους (και όχι αναγκαστικά το όνομά τους) Το πέρασμα των τιμών των ορισμάτων στη Fortran γίνεται «μέσω αναφοράς»

Σύνταξη Υποπρογραμμάτων Συνάρτηση [PURE][<type>] FUNCTION FunctionName(arg1, arg2, ) [RESULT (var)] END FUNCTION [FunctionName] Αν δεν χρησιμοποιηθεί η επιλογή RESULT, τότε η συνάρτηση επιστρέφει το αποτέλεσμα της, εκχωρώντας το στο όνομά της. Αν χρησιμοποιηθεί η RESULT (var) τότε πρέπει να επιστρέψει το αποτέλεσμα της, εκχωρώντας το στη μεταβλητή var. Στις PURE συναρτήσεις πρέπει όλα τα ορίσματα να δηλωθούν με INTENT(IN). Επίσης στις PURE συναρτήσεις απαγορεύεται η χρήση εντολών εισόδου/εξόδου. Υπορουτίνα [PURE] SUBROUTINE SubroutineName(arg1, arg2, ) END SUBROUTINE [SubroutineName]

PURE Περιορισμοί PURE υποπρογραμμάτων Όλα τα ορίσματα πρέπει να δηλωθούν με την επιλογή INTENT. Ιδίως για τις PURE Συναρτήσεις, όλα τα ορίσματα πρέπει να δηλωθούν ως INTENT(IN) Δεν επιτρέπεται η χρήση εντολών εισόδου εξόδου μέσα στο υποπρόγραμμα Αν ένα PURE υποπρόγραμμα καλεί άλλα υποπρογράμματα, θα πρέπει και αυτά να είναι τύπου PURE Δεν επιτρέπεται η τροποποίηση καθολικών μεταβλητών. (Επιτρέπεται όμως η χρήση τους μέσα σε εκφράσεις) Σαν καλή πρακτική, να χρησιμοποιείτε πάντοτε την επιλογή PURE σε όλες τις Συναρτήσεις σας, εκτός ειδικών περιπτώσεων. Να μην χρησιμοποιείτε την επιλογή PURE στις Υπορουτίνες σας, (παρόλα αυτά να δηλώνετε με δική σας ευθύνη όλα τα ορίσματα με INTENT)

INTENT Τα ορίσματα των υποπρογραμμάτων πρέπει να δηλώνονται υποχρεωτικά ως προς τον τύπο τους Καλό είναι να δηλώνουμε επίσης και την επιθυμητή λειτουργία τους με την επιλογή intent. Υπάρχουν 3 είδη intent: IN = ορίσματα εισόδου OUT = ορίσματα εξόδου INOUT = ορίσματα εισόδου/εξόδου Προσοχή: Αν δεν δηλωθεί το INTENT των ορισμάτων, τότε αυτό θεωρείται ότι είναι INOUT τόσο για τις υπορουτίνες όσο και για τις συναρτήσεις. Η χρήση του INTENT είναι υποχρεωτική όταν ένα υποπρόγραμμα δηλωθεί ως PURE.

Παραδείγματα Συναρτήσεων Συνάρτηση για τον υπολογισμό του αθροίσματος 2 ακεραίων αριθμών Integer function addition(x,y) Integer, intent(in)::x,y addition=x+y end function addition function addition(x,y) Integer::addition Integer, intent(in)::x,y addition=x+y end function addition function addition(x,y) result(z) Integer::z Integer, intent(in)::x,y z=x+y end function addition pure function addition(x,y) result(z) Integer::z Integer, intent(in)::x,y z=x+y end function addition

Παραδείγματα Υπορουτινών Υπορουτίνα για τον υπολογισμό του αθροίσματος και της διαφοράς 2 ακεραίων αριθμών subroutine add_sub(x,y,a,s) Integer::x,y,a,s a=x+y s=x-y end subroutine add_sub subroutine add_sub(x,y,a,s) Integer, intent(in)::x,y Integer,intent(out)::a,s a=x+y s=x-y end subroutine add_sub

Κλήση υποπρογραμμάτων Ένα υποπρόγραμμα μπορεί να κληθεί είτε από το κυρίως πρόγραμμα είτε από κάποιο άλλο υποπρόγραμμα Οι συναρτήσεις καλούνται όπως ακριβώς και οι εγγενείς συναρτήσεις π.χ. εκχωρώντας σε κάποια μεταβλητή το αποτέλεσμα τους, σύμφωνα με την σύνταξη <Μεταβλητή> = όνομα_συνάρτησης (ορίσματα_εισόδου) Οι υπορουτίνες καλούνται με την εντολή CALL, σύμφωνα με την σύνταξη CALL όνομα υπορουτίνας (ορίσματα εισόδου-εξόδου)

Ροή εκτέλεσης εντολών κατά την κλήση ενός υποπρογράμματος Έναρξη εκτέλεσης κυρίως προγράμματος Εκτέλεση υπολογισμών μέχρι την εντολή κλήσης του υποπρογράμματος Ο έλεγχος εκτέλεσης ανατίθεται στο υποπρόγραμμα «Πέρασμα» ορισμάτων εισόδου από το κυρίως πρόγραμμα στο υποπρόγραμμα Εκτέλεση των εντολών του υποπρογράμματος Ανάθεση τιμών στα ορίσματα εξόδου του υποπρογράμματος Ο έλεγχος εκτέλεσης ανατίθεται στο κυρίως πρόγραμμα «Πέρασμα» ορισμάτων εξόδου από τη διαδικασία στο κυρίως πρόγραμμα Συνέχιση της εκτέλεσης του προγράμματος

Πέρασμα Τιμών Παραμέτρων Συναρτήσεις Προκαθορισμένος τρόπος g=fun1(x, y, z) function fun1(a, b, c) Να αποφεύγεται! Συναρτήσεις Pure g=fun2(x, y, z) Να προτιμάται! pure function fun2(a, b, c) Υπορουτίνες call subr1(x, y, z) subroutine subr1(a, b, c)

Σύγκριση κλήσης Συναρτήσεων και Υπορουτινών π.χ. Εύρεση του γινομένου τριών αθροισμάτων: (2+3)(5+4)(8+2) program xxx implicit none integer::z z= add(2,3)* add(5,4) * add(8,2) print*, z! 450 contains integer function add(x,y) integer::x,y add=x+y end function add end program program xxx implicit none integer::z1,z2,z3,z call add(2,3,z1) call add(5,4,z2) call add(8,2,z3) z=z1*z2*z3 print*, z! 450 contains subroutine add(x,y,z) integer::x,y,z z=x+y end subroutine add end program

Εσωτερικά Υποπρογράμματα Γράφονται στο ίδιο αρχείο μαζί με το κυρίως πρόγραμμα. H θέση τους είναι μετά από όλες τις εκτελέσιμες εντολές του κυρίως προγράμματος, μεταξύ της εντολής contains και end program: Program xyz. Contains Υποπρογράμματα End program Έχουν απ ευθείας πρόσβαση σε όλες τις μεταβλητές του κυρίως προγράμματος (χωρίς να είναι απαραίτητο το πέρασμα των τιμών τους μέσω ορισμάτων) Σημείωση: To implicit none του κυρίως προγράμματος έχει ισχύ και σε όλα τα εσωτερικά του υποπρογράμματα

Εξωτερικά Υποπρογράμματα Η σύνταξη τους είναι ακριβώς ίδια όπως αυτή των εσωτερικών υποπρογραμμάτων Βρίσκονται σε αυτόνομα αρχεία *.f95 Για να χρησιμοποιηθούν εισάγονται σε κοινό project με το κυρίως πρόγραμμα. Δεδομένης της αυτονομίας τους, μπορούν να χρησιμοποιηθούν σε περισσότερα από ένα κύρια προγράμματα Δεν είναι εκτελέσιμα αρχεία Σημείωση: Κάθε εξωτερικό υποπρόγραμμα πρέπει να έχει το δικό του implicit none Το μειονέκτημά τους είναι πως δεν διαθέτουν ρητή διεπιφάνεια με αποτέλεσμα την αναγκαιότητα χρήσης της εντολής interface στο κυρίως πρόγραμμα Μπορούν να αντικατασταθούν από τη χρήση αθρωμάτων, τα οποία διαθέτουν ρητή διεπιφάνεια και επίσης παρέχουν επιπλέον δυνατότητες

Αρθρώματα (Modules) Ένα άρθρωμα είναι ένα αρχείο.f95, το οποίο έχει πανομοιότυπη μορφή με αυτή ενός αρχείου προγράμματος. Η διαφορά είναι πως το άρθρωμα δεν περιέχει τμήμα εκτελέσιμων εντολών. Περιέχει μόνο δηλώσεις καθολικών μεταβλητών και σταθερών καθώς και εσωτερικά υποπρογράμματα. Για να γίνει γνωστό ένα άρθρωμα στο κυρίως πρόγραμμα, θα πρέπει και τα δύο να εισαχθούν σε ένα κοινό project και στο κυρίως πρόγραμμα να υπάρχει η δήλωση του αρθρώματος με την εντολή USE. H εντολή USE πρέπει να είναι η πρώτη εντολή του προγράμματος π.χ. program test use my_subs! Δήλωση του module my_subs.f95 implicit none.

Παράδειγμα Αρθρώματος Έστω ένα άρθρωμα στο αρχείο my_subs.f95, το οποίο περιέχει μία καθολική σταθερά και 2 συναρτήσεις υπολογισμού εμβαδού και περιμέτρου ενός κύκλου με δεδομένη ακτίνα module my_subs real,parameter :: pi=3.14 contains real function embado_kyklou(r) result(e) real,intent(in)::r real::e e=pi*r*r end function real function perimetros_kyklou(r) result(p) real,intent(in)::r real::p p=2*pi*r end function end module

Δημιουργία Project Για την χρήση εξωτερικών υποπρογραμμάτων ή αρθρωμάτων απαιτείται η δημιουργία ενός project Στην FTN95 ένα project δημιουργείται από το μενού File New Project Επιλέγουμε Fortran Application και δίνουμε στο Location τον φάκελο στον οποίο θα αποθηκευτεί το project (ένας φάκελος ανά project). Τέλος δίνουμε ένα όνομα στο project και πατάμε το πλήκτρο Open. Στον project explorer κάνουμε δεξί κλικ στο Source Files και επιλέγουμε «Add new item» αν θέλουμε να δημιουργήσουμε κάποιο νέο αρχείο.f95 ή «Add existing items» αν θέλουμε να συμπεριλάβουμε στο project κάποιο αρχείο.f95 που έχουμε ήδη δημιουργήσει και αποθηκεύσει στο δίσκο

Εμβέλεια Μεταβλητών Καθολικές Μεταβλητές Όλες οι μεταβλητές που δηλώνονται στο κυρίως πρόγραμμα ή σε ένα άρθρωμα που χρησιμοποιείται από το κυρίως πρόγραμμα Είναι γνωστές σε όλα τα εσωτερικά υποπρογράμματα, όχι όμως και στα εξωτερικά Τοπικές Μεταβλητές Δηλώνονται μέσα στα υποπρογράμματα και έχουν τοπική ισχύ μόνον μέσα στο ίδιο το υποπρόγραμμα. Η τιμή τους καταστρέφεται μόλις τερματίσει η εκτέλεση του υποπρογράμματος, εκτός κι αν είναι δηλωμένες με την επιλογή SAVE Αν υπάρχει τοπική μεταβλητή, η οποία είναι ταυτόχρονα δηλωμένη και ως καθολική, τότε ο τοπικός της χαρακτήρας υπερισχύει μέσα στο υποπρόγραμμα, που αυτή είναι δηλώνεται.

Επιλογή SAVE Οι τοπικές μεταβλητές, δηλαδή όλες οι μεταβλητές που δηλώνονται μέσα σε ένα υποπρόγραμμα χάνουν την τιμή τους μετά το πέρας εκτέλεσης του υποπρογράμματος, εκτός αν είναι δηλωμένες με την επιλογή SAVE Σε μία τέτοια περίπτωση, η μεταβλητή πρέπει να δηλωθεί με εκχώρηση αρχικής τιμής H FΤΝ95 δίνει αυτομάτως την επιλογή SAVE σε όλες τις τοπικές μεταβλητές που δηλώνουμε με αρχική τιμή, χωρίς να χρειαστεί να το δηλώσουμε εμείς ρητά: π.χ. οι παρακάτω εντολές έχουν το ίδιο αποτέλεσμα: integer, save:: k=5 και integer:: k=5 Προτιμούμαι όμως τον πρώτο τρόπο γραφής, ο οποίος δεν εξαρτάται από τον compiler.

Εντολή RETURN Η εντολή RETURN χρησιμοποιείται για να επιστρέψει ο έλεγχος εκτέλεσης στο κυρίως πρόγραμμα, διακόπτoντας την κανονική ροή εκτέλεσης του υποπρογράμματος Είναι αντίστοιχο με τις εντολές EXIT για τους βρόγχους επανάληψης STOP για το κυρίως πρόγραμμα Η εκτέλεση συνεχίζεται από το σημείο του κυρίου προγράμματος στο οποίο είχε σταματήσει Να αποφεύγεται η χρήση της καθώς σε νέες εκδόσεις της Fortran αναμένεται να καταργηθεί

Υποπρογράμματα και πίνακες Πίνακας ως αποτέλεσμα μίας συνάρτησης pure function test(x,y) result(z) Integer,intent(in)::x,y Integer::z(2) Z(1)=x+y Z(2)=x-y end function Πίνακες ως παράμετροι 1oς Τρόπος: Με ρητή δήλωση μεγέθους pure function test(a,n) result(z) Integer,intent(in)::n Integer,intent(in)::A(n) Integer::z,i z=0 do i=1,n z=z+a(i) end do end function 2oς Τρόπος: Με πίνακες υποθετικής μορφής pure function test(a) result(z) Integer,intent(in)::A(:) Integer::z,i z=0 do i=1,size(a,1) z=z+a(i) end do end function Για τα όρια των επαναλήψεων μπορούμε να χρησιμοποιούμε τις εγγενείς συναρτήσεις: size,lbound,ubound Προσοχή: Η αρίθμηση των δεικτών του πίνακα μέσα στο υποπρόγραμμα είναι ανεξάρτητη από τον τρόπο δήλωσής τους στο κυρίως πρόγραμμα. Π.χ αν θέλαμε στον δεύτερο τρόπο να ξεκινάει η αρίθμηση από το 0 θα έπρεπε να γράψουμε: integer,intent(in)::a(0:)

Αλφαριθμητικά ως παράμετροι Για να είναι μπορεί ένα υποπρόγραμμα να δέχεται αλφαριθμητικά οποιουδήποτε μήκους θα πρέπει η τυπική παράμετρος να δηλωθεί με * αντί για κάποιο συγκεκριμένο αριθμό. Program test character::s*20,p*10 s= Mixanologoi p= Mhxanikoi call print_string(trim(s)) call print_string(trim(p)) contains subroutine print_string(s) character(*)::s print*,s end subroutine end program

Είδη Πινάκων στην Fortran program various_arrays integer:: a(2,3) integer,allocatable::b(:,:)... allocate(b(3,4)) call f(b,size(b,1),size(b,2)) call g(a)! Στατικός πίνακας! Δυναμικός πίνακας... contains subroutine f(c,n,m) integer::c(n.m) integer::d(n,m) integer::e(3,6)... end subroutine f subroutine g(c) integer:: c(:,:)... end subroutine g! Εικονικός. Δεν δεσμεύει νέο χώρο γιατί η κλήση γίνεται πάντοτε μέσω αναφοράς! Αυτόματος => Δυναμικός (γιατί δεν γνωρίζουμε τα n και m την ώρα της! μεταγλώττισης), τοπικός. Δεσμεύει nxm χώρο! Στατικός, τοπικός! Εικονικός υποθετικής μορφής end program

OPTIONAL present program xyz implicit none real::x,a,b,c x=2. a=3.;b=2.;c=5. print*, find_y(x,a,b,c)! 21.0 print*, find_y(x=x,a_in=a,b_in=b,c_in=c)! 21.0 print*, find_y(a_in=a,x=x,c_in=c,b_in=b)! 21.0 print*, find_y(x,4.,6.)! 28.0 print*, find_y(x,8.)! 32.0 print*, find_y(x)! 0.0 print*, find_y(x,a_in=2.,c_in=5.)! 13.0 print*, find_y(x,c_in=5.)! 5.0 contains function find_y(x,a_in,b_in,c_in) real :: find_y,x real :: a,b,c real,optional :: a_in,b_in,c_in a=0 b=0 c=0 if(present(a_in))a=a_in if(present(b_in))b=b_in if(present(c_in))c=c_in find_y=a*x**2 + b*x +c end function end program

Αναδρομικά Υποπρογράμματα Ένα υποπρόγραμμα ονομάζεται αναδρομικό, αν καλεί τον εαυτό του. Πρέπει να δίνεται ιδιαίτερη προσοχή στο να τερματίζεται σωστά η αναδρομή Μειονέκτημα των αναδρομικών υποπρογραμμάτων είναι η μεγάλη απαίτηση σε μνήμη που ενδέχεται να έχουν Χρησιμοποιούνται για την ανάπτυξη αναδρομικών αλγορίθμων π.χ. εφαρμόζοντας την μεθοδολογία «Διαίρει και Βασίλευε».

Παραδείγματα Αναδρομικής Συνάρτησης Παραγοντικό n! = 0, n=0 n! = n*(n-1)!, n>0 Δήλωση Συνάρτησης ως Recursive Συνθήκη τερματισμού αναδρομής program xyz implicit none integer::i do i=0,6 print*,i,parag(i) end do contains recursive integer function parag(n) result(par) integer,intent(in)::n if (n==0) then par=1 else par=n*parag(n-1) end if end function parag end program Απαιτείται η χρήση του Result Αναδρομική κλήση