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

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

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

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

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

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

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

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

8 FORTRAN 77/90/95/2003

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

Συναρτήσεις. Υποπρόγραμμα

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

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

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

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Παρουσίαση συλλογών υποπρογραμμάτων για γραμμική άλγεβρα: blas lapack

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

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

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

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

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

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

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

Λογισµικό (Software SW) Γλώσσες

Παράλληλη Επεξεργασία

Προγραμματισμός Η/Υ. Ενότητα 3: Top Down Σχεδιασμός

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος

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

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

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

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

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

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

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

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004)

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ

ΚΕΦΑΛΑΙΟ 1ο 3ο. ΚΕΦΑΛΑΙΟ 5ο 6ο. ΚΕΦΑΛΑΙΟ 7ο. Δομημένος Προγραμματισμός - Γενικές Ασκήσεις Επανάληψης

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #2

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

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

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

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

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

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

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

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

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα

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

ΑΠΑΝΤΗΣΕΙΣ ΘΕΜΑ Α A1. 2-Λάθος 3-Λάθος 4-Σωστό 5-Λάθος A2. integer. real. Boolean. char. string A3.

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Πληροφορική 2. Γλώσσες Προγραμματισμού

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

<<ΔΗΜΗΤΡΗΣ ΜΑΝΩΛΗΣ ΦΥΣΙΚΟΣ ΜCs>> 1

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

Προγραμματισμός Η/Y. Διάλεξη 6 η : Συναρτήσεις

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

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

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

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

Αρχιτεκτονική Υπολογιστών

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

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

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

Κεφάλαιο 10ο. ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ιαδικασίες - Συναρτήσεις

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

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

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

Κεφάλαιο 6 ο Εισαγωγή στον Προγραμματισμό 1

Μαλούτα Θεανώ Σελίδα 1

ΑΕΠΠ Ερωτήσεις θεωρίας

ΦΡΟΝΤΙΣΤΗΡΙΑ ΠΡΟΟΔΟΣ

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

Transcript:

FORTRAN και Αντικειμενοστραφής Προγραμματισμός Παραδόσεις Μαθήματος 2016 Δρ Γ Παπαλάμπρου Επίκουρος Καθηγητής ΕΜΠ georgepapalambrou@lmentuagr Εργαστήριο Ναυτικής Μηχανολογίας (Κτίριο Λ) Σχολή Ναυπηγών Μηχανολόγων Μηχανικών Εθνικό Μετσοβιο Πολυτεχνείο March 21, 2016 Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Περιεχόμενα ύλης 1 Εισαγωγή στην γλώσσα FORTRAN 2 Απλοί τύποι δεδομένων, σταθερές, μεταβλητές, εκφράσεις, εντολές 3 Δομές ελέγχου, συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων [Μ4] 4 Σύνθετες δομές δεδομένων: πίνακες, εγγραφές Παραχώρηση μνήμης 5 Μεταφορά δεδομένων, είσοδος/έξοδος, αρχεία δεδομένων 6 Στοιχεία μεθοδολογίας προγραμματισμού: αλγόριθμοι, δομές δεδομένων, επανάληψη, αναδρομή, δομημένος προγραμματισμός 7 Φάσεις ανάπτυξης λογισμικού: προδιαγραφές, σχεδίαση, υλοποίηση, επαλήθευση, τεκμηρίωση, συντήρηση προγραμμάτων 8 Αντικειμενοστραφής προγραμματισμός: τύποι δεδομένων, κλάσεις, αντικείμενα, κληρονομικότητα, πολυμορφισμός 9 Διασύνδεση FORTRAN με άλλες γλώσσες (C/C++, MATLAB) Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Δομή υποπρογραμμάτων σε μονάδες προγράμματος Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Αναφορά στο βιβλίο M Metcalf, J Reid, M Cohen, Modern Fortran Explained, Oxford, 4th Edition, 2011 κεφάλαιο 5: Program units and procedures, παράγραφοι: 51 μέχρι 511 Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Δομή προγράμματος-εισαγωγή 1 Όπως είδαμε στο προηγούμενο κεφάλαιο, παρότι είναι δυνατόν να γράψει κάποιος ένα πλήρες πρόγραμμα Fortran ως ενιαία μονάδα (unit), είναι προτιμότερο να κάνει κατάτμηση και να σπάσει το πρόγραμμα σε διαχειρίσιμες μονάδες 2 Κάθε τέτοια μονάδα προγράμματος αντιστοιχεί σε μια εργασία (task) που μπορεί εύκολα να γίνει κατανοητή, και που ιδανικά, μπορεί κάποιος να γράψει, να διορθώσει (compile) και να ελέγξει μεμονωμένα 3 Θα συζητήσουμε τα τρία είδη ενός προγράμματος: το κύριο πρόγραμμα, το εξωτερικό υποπρόγραμμα και τις προγραμματιστικές μονάδες (modules) Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Δομή προγράμματος Ένα πλήρες πρόγραμμα πρέπει, κατ ελάχιστο, να περιλαμβάνει ένα κύριο πρόγραμμα (main program) Αυτό μπορεί να περιέχει δηλώσεις όπως τις έχουμε συναντήσει μέχρι στιγμής στα παραδείγματα, αλλά συνήθως (και πιο σημαντικό) τις κλήσεις σε άλλα σχετικά προγράμματα γνωστά ως υποπρογράμματα (subprograms) Ένα υποπρόγραμμα ορίζει μια συνάρτηση (function) ή μια υπορουτίνα (subroutine) Συναρτήσεις και υπορουτίνες είναι γνωστές συλλογικά ως διαδικασίες (procedures) Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Δομή προγράμματος-συναρτήσεις και υπορουτίνες Συναρτήσεις και υπορουτίνες μεταξύ τους διαφέρουν ως εξής: Μια συνάρτηση (function) επιστρέφει ένα μόνο αντικείμενο και συνήθως δεν μεταβάλλει τις τιμές των παραμέτρων εισόδου (έτσι ώστε να αντιπροσωπεύει μια συνάρτηση κατά την μαθηματική έννοια) Μια υπορουτίνα (subroutine) εκτελεί συνήθως μια πιο πολύπλοκη εργασία, με επιστροφή πολλών αποτελεσμάτων μέσω των παραμέτρων εισόδου Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Δομή προγράμματος-υποπρογράμματα Υπάρχουν διάφορα είδη των υποπρογραμμάτων (subprograms), ανάλογα με την χρήση τους, τη δομή τους, κλπ Έτσι ένα υποπρόγραμμα μπορεί να είναι μια αυτόνομη μονάδα προγράμματος, στην οποία περίπτωση καλείται εξωτερικό (external) υποπρόγραμμα και ορίζει μια εξωτερική διαδικασία Εξωτερικές διαδικασίες μπορεί επίσης να οριστούν με άλλα προγραμματιστικά μέσα πλην της Fortran Ένα υποπρόγραμμα μπορεί να είναι ένα μέλος της συλλογής σε μια μονάδα προγράμματος που ονομάζεται προγραμματιστική μονάδα (module), στην οποία περίπτωση το ονομάζουμε μονάδα υποπρογράμματος και ορίζει μια διαδικασία μονάδας υποπρογράμματος Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Δομή προγράμματος-υποπρογράμματα Ένα υποπρόγραμμα μπορεί να τοποθετηθεί μέσα σε μια προγραμματιστική μονάδα, ένα εξωτερικό υποπρόγραμμα ή ένα κύριο πρόγραμμα, στην οποία περίπτωση το ονομάζουμε εσωτερικό υποπρόγραμμα και καθορίζει μια εσωτερική διαδικασία Τα εσωτερικά υποπρογράμματα δεν μπορεί να είναι ένθετα (nested), δηλαδή δεν μπορούν να περιέχουν περαιτέρω υποπρογράμματα και θεωρούμε ότι είναι σύντομα τμήματα κώδικα, μέχρι περίπου είκοσι γραμμές Εαν μια μονάδα προγράμματος ή ένα υποπρόγραμμα περιέχουν ένα υποπρόγραμμα, τότε αυτά λέγεται ότι εξυπηρετούν/περιβάλλουν (host) αυτό το υποπρόγραμμα Η δομή των υποπρογραμμάτων σε μονάδες προγράμματος φαίνονται στο επόμενο σχήμα Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Δομή υποπρογραμμάτων σε μονάδες προγράμματος Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Κυρίως πρόγραμμα Κάθε ολοκληρωμένο πρόγραμμα πρέπει να έχει ένα και μόνο ένα κύριο πρόγραμμα (main program) Προαιρετικά, μπορεί να περιέχει κλήσεις σε υποπρογράμματα Ένα κύριο πρόγραμμα έχει την ακόλουθη μορφή : Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Κυρίως πρόγραμμα Η δήλωση program είναι προαιρετική, αλλά συνιστάται η χρήση της Το program-name μπορεί να είναι οποιαδήποτo έγκυρo όνομα στην Fortran, όπως model Η μόνη μη - προαιρετική δήλωση είναι το end, η οποία έχει δύο σκοπούς Δρα ως σήμα στον μεταγλωττιστή ότι έχει φθάσει στο τέλος της η μονάδα του προγράμματος και, όταν εκτελείται, προκαλεί το πλήρες πρόγραμμα για να σταματήσει Αν περιλαμβάνει program-name, αυτό πρέπει να είναι στη δήλωση του προγράμματος Προτείνεται να χρησιμοποιείτε την πλήρη μορφή, έτσι ώστε να είναι σαφές τόσο για τον αναγνώστη και για τον μεταγλωττιστή (compiler) τι ακριβώς τερματίζεται με την δήλωση τέλους Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Κυρίως πρόγραμμα Ένα κύριο πρόγραμμα χωρίς κλήσεις σε υποπρογράμματα είναι συνήθως αυτό που χρησιμοποιείται μόνο για σύντομες δοκιμές, όπως στο παρακάτω παράδειγμα Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Κυρίως πρόγραμμα Οι δηλώσεις για προδιαγραφές (specification statements) καθορίζουν το περιβάλλον για τις εκτελέσιμες εντολές Μέχρι τώρα, έχουμε συναντήσει τη δήλωση δήλωση τύπου (ακέραιος, πραγματικός, μιγαδικός, λογικού, χαρακτήρα κλπ-integer, real, complex, logical, character), που καθορίζουν τον τύπο και άλλες ιδιότητες εκείνων που απαριθμεί Οι εκτελέσιμες δηλώσεις καθορίζουν τις ενέργειες που πρέπει να εκτελεστούν Μέχρι στιγμής, έχουμε συναντήσει την δήλωση εκχώρησης, τη δήλωση if, το Do και case, καθώς και τις δηλώσεις ανάγνωσης και εκτύπωσης (read, print) Στο παρόν και επόμενα κεφάλαια θα δούμε και άλλες εκτελέσιμες δηλώσεις Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Κυρίως πρόγραμμα Το contain περιέχει δήλωση για την παρουσία ενός ή περισσότερων εσωτερικών υποπρογραμμάτων Αυτά εξαιρούνται από την αλληλουχία εκτελέσιμων δηλώσεων του κύριου προγράμματος Η δήλωση end μπορεί να είναι η ένας κλάδος από μία από εκτελέσιμες δηλώσεις Αν το end εκτελεστεί, το πρόγραμμα σταματάει Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Η δήλωση stop Ένας άλλος τρόπος για να σταματήσει η εκτέλεση του προγράμματος είναι να εκτελέσει μια δήλωση διακοπής: stop Η δήλωση αυτή μπορεί να εμφανίζεται στο κύριο πρόγραμμα ή σε κάποιο υποπρόγραμμα Ένα καλά σχεδιασμένο πρόγραμμα επιστρέφει κανονικά τον έλεγχο στο κύριο πρόγραμμα για τον τερματισμό του, οπότε θα πρέπει να εμφανιστεί εκεί η δήλωση διακοπής Ωστόσο σε εφαρμογές όπου αρκετές δηλώσεις stop εμφανίζονται σε διάφορα σημεία του προγράμματος, είναι δυνατόν να διαχωρισθεί ποιά από τις δηλώσεις stop προκάλεσε τερματισμό με την προσθήκη σε κάθε δήλωση stop ενός κωδικού που θα αποτελείται από ένα σταθερό προεπιλεγμένο χαρακτήρα ή σειρά έως και πέντε ψηφία Παραδείγματα είναι τα εξής: stop stop Incomplete data Program terminated stop 12345 Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Εξωτερικά υποπρογράμματα Εξωτερικά υποπρογράμματα καλούνται από το κύριο πρόγραμμα ή αλλού, συνήθως για να εκτελέσουν μια σαφώς καθορισμένη εργασία στο πλαίσιο ενός ολοκληρωμένου προγράμματος Εκτός από την αρχική δήλωση, έχουν μια μορφή που μοιάζει με εκείνη ενός κύριου πρόγραμματος: Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Εξωτερικά υποπρογράμματα Το contains έχει ακριβώς τον ίδιο ρόλο όπως σε ένα κύριο πρόγραμμα Το αποτέλεσμα της εκτέλεσης δήλωσης end σε ένα υποπρόγραμμα είναι να επιστρέψει τον έλεγχο στο σημείο κλήσης παρά να σταματήσει την εκτέλεση Όσο για τη δήλωση end program, συνιστάται να χρησιμοποιείται η πλήρης μορφή του end ώστε να είναι σαφές τόσο στον αναγνώστη όσο και στον μεταγλωττιστή που ακριβώς αυτό που τερματίζει Η απλούστερη μορφή εξωτερικού υποπρογράμματος ορίζει μια υπορουτίνα χωρίς παραμέτρους και δήλωση της μορφής subroutine subroutine-name Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Εξωτερικά υποπρογράμματα Ένα τέτοιο υποπρόγραμμα είναι χρήσιμο όταν ένα πρόγραμμα αποτελείται από μια αλληλουχία διακριτών φάσεων, οπότε το κύριο πρόγραμμα αποτελείται από μια σειρά δηλώσεων call που καλούν υπορουτίνες Για παράδειγμα Προσοχή πρέπει να δίνεται στην ροή δεδομένων μεταξύ των υπορογραμμάτων, που συνήθως γίνεται με τα ορίσματα (arguments) στην κλήση τους Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Προγραμματιστικές Μονάδες Ο τρίτος τύπος προγράμματος, της προγραμματιστικής μονάδας (module) παρέχει ένα μέσο συγκέντρωσης δεδομένων τύπου global, τύπων (defined types), υποπρογραμμάτων, κλπ Ότι σχετίζεται με μια εργασία (task) μπορεί να συλλέγεται σε ένα module, με πρόσβαση σε αυτό όποτε είναι αναγκαίο Εκείνα τα μέρη κώδικα που σχετίζονται με την εσωτερική λειτουργία και δεν παρουσιάζουν κανένα ενδιαφέρον για τον χρήστη μπορεί να γίνουν «αόρατα» για τον χρήστη, γεγονός που επιτρέπει τον εσωτερικό σχεδιασμό να τροποποιηθεί χωρίς την ανάγκη να αλλάξει το πρόγραμμα που το χρησιμοποιεί Στην Fortran συχνά οι βιβλιοθήκες (libraries) αποτελούνται από σύνολα modules Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Προγραμματιστικές Μονάδες Το module έχει την μορφή Όπως και στις περιπτώσεις end program, end subroutine, end function, συνιστάται να χρησιμοποιείται η πλήρης μορφή δήλωσης end module Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Προγραμματιστικές Μονάδες Στην απλούστερη μορφή του, το κυρίως τμήμα προγράμματος αποτελείται μόνο από τις προδιαγραφές των δεδομένων Έτσι για παράδειγμα έχουμε την μονάδα (module) module state integer, dimension(52) :: cards end module state η οποία κρατάει την κατάσταση στο πρόγραμμα game παραπάνω, και καλείται μέσω της use state που εμφανίζεται στις αρχές του κυρίως προγράμματος game και στα υποπρογράμματα shuffle, deal, play, display Αρχικά η ρουτίνα shuffle θέτει τις τιμές στην μεταβλητή cards, και κατόπιν οι ρουτίνες deal, play τις αλλάζουν ενώ τελικά η ρουτίνα display έχοντας πρόσβαση δείχνει το περιεχόμενο της Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Εσωτερικά υποπρογράμματα Έχουμε δει ότι τα εσωτερικά υποπρογράμματα (internal subprograms) μπορούν να οριστούν μέσα στα κύρια προγράμματα και στα εξωτερικά υποπρογράμματα καθώς και μέσα σε μονάδες υποπρογράμματων Έχουν την μορφή δηλ όπως τα υπογράμματα, μόνο που δεν μπορουν να περιέχουν με τη σειρά τους άλλα εσωτερικά υποπρογράμματα Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Εσωτερικά υποπρογράμματα Σημειώστε ότι οι δηλώσεις function ή subroutine πρέπει να είναι παρούσες στην δήλωση end Ένα εσωτερικό υποπρόγραμμα έχει αυτόματα πρόσβαση σε όλα τα χαρακτηριστικά του προγράμματος host, συμπεριλαμβανομένης της δυνατότητας να καλέσει τα υπόλοιπα εσωτερικά υποπρογράμματα του Σε ένα πρόγραμμα host, πρέπει να προηγείται δήλωση contains πριν από τα εσωτερικά υποπρογράμματα Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Παράμετροι σε διαδικασίες Οι παράμετροι (arguments) σε διαδικασίες παρέχουν ένα εναλλακτικό μέσο σε δύο μονάδες προγράμματος να έχουν πρόσβαση στα ίδια δεδομένα Επιστρέφοντας στο παράδειγμα με το παιχνίδι χαρτιών, αντί της δήλωσης της array cards σε ένα module, μπορούμε να τη δηλώσουμε στο κύριο πρόγραμμα και να περάσει ως μια πραγματική παράμετρος σε κάθε υποπρόγραμμα, όπως φαίνεται στο Σχήμα 53 Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Παράμετροι σε διαδικασίες Κάθε υπορουτίνα περιέχει την cards ως παράμετρο Για παράδειγμα η ρουτίνα shuffle έχει τη μορφή του Σχ 54 Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Παράμετροι σε διαδικασίες Εναλλακτικά, μέσα στην shuffle, μπορεί να καθοριστεί ως παράμετρος το μέγεθος (ncards) του πίνακα cards και ο αλγόριθμος do θα γεμίσει την μεταβλητή, με ncards τον αριθμό των επαναλήψεων, όπως φαίνεται στο Σχήμα 55 Εδώ γίνεται πέρασμα των παραμέτρων ncards, cards στη ρουτίνα shuffle Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Η δήλωση return Είδαμε παραπάνω ότι αν η τελευταία εκτελέσιμη δήλωση σε ένα κύριο πρόγραμμα εκτελείται και δεν υπάρχει διακλάδωση (branch), εκτελείται η εντολή end και το πρόγραμμα σταματάει Ομοίως, αν η τελευταία εκτελέσιμη δήλωση σε ένα υποπρόγραμμα εκτελείται και δεν υπάρχει διακλάδωση εκτελείται η εντολή end και ο έλεγχος επιστρέφει στο σημείο κλήσης του υποπρογράμματος Ακριβώς όπως η δήλωση stop είναι μια εκτελέσιμη δήλωση που παρέχει ένα εναλλακτικό μέσο διακοπής εκτέλεσης, έτσι και η δήλωση return επιστρέφει τον έλεγχο από ένα υποπρόγραμμα Έχει τη μορφή return και δεν πρέπει να εμφανίζεται σε ένα κύριο πρόγραμμα Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Η παράμετρος intent Είδαμε στο Σχήμα 55, ότι η παράμετρος cards χρησιμοποιήθηκε για να περάσει τις πληροφορίες έξω από την ρουτίνα shuffle και η παράμετρος ncards χρησιμοποιήθηκε για να περάσει πληροφορίες μέσα στη ρουτίνα Μια τρίτη δυνατότητα για μία παράμετρο είναι να χρησιμοποιηθεί ως μεταβλητή τόσο για είσοδο τόσο και για έξοδο Μπορούμε να καθορίσουμε τέτοια πρόθεση σχετικά με τη δήλωση τύπου intent για την παράμετρο ως εξής: subroutine shuffle(ncards, cards) integer, intent(in) :: ncards integer, intent(out), dimension(ncards) :: cards Για παραμέτρους εισόδου/εξόδου, μπορεί να καθορισθεί η δήλωση inout Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Συναρτήσεις Οι συναρτήσεις (functions) είναι παρόμοιες με τις υπορουτίνες από πολλές απόψεις, αλλά γίνεται κλήση τους εντός μίας έκφρασης και επιστρέφεται μια τιμή που χρησιμοποιείται στην έκφραση Για παράδειγμα, το υποπρόγραμμα του Σχ 56 με την συνάρτηση distance επιστρέφει την απόσταση μεταξύ δύο σημείων στο χώρο και η λογική έκφραση if (distance(a, c) > distance(b, c) ) then καλεί την συνάρτηση function δύο φορές Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Συναρτήσεις Είναι επιτρεπτό να γράφετε συναρτήσεις (functions) που αλλάζουν τις τιμές των παραμέτρων τους, να τροποποιoύν τις τιμές σε προγραμματιστικές μονάδες (modules), να βασίζονται σε τοπικά δεδομένα από προηγούμενη κλήση, ή να εκτελούν λειτουργίες εισόδου/εξόδου Παρόλα αυτά, τα παραπάνω δεν αποτελούν ορθή προγραμματιστική πρακτική και πρέπει να αποφεύγονται! Εκεί που χρειάζονται τα παραπάνω, θα πρέπει να χρησιμοποιηθεί μια υπορουτίνα Θα πρέπει στο πρόγραμμα να διασφαλίζεται ότι όταν καλείται μια συνάρτηση, τίποτα δεν γίνεται «πίσω από τα παρασκήνια», και αυτό είναι πολύ χρήσιμο σε έναν compiler, ιδιαίτερα για τα εσωτερικά και modules υποπρογράμματα Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Διεπαφές explicit και implicit Μια κλήση σε ένα εσωτερικό υποπρόγραμμα πρέπει να γίνεται από μια δήλωση στην ίδια μονάδα του προγράμματος Μπορεί έτσι να υποτεθεί ότι ο compiler θα επεξεργαστεί τη μονάδα προγράμματος στο σύνολό της και ως εκ τούτου, μπορεί να γνωρίζει τα πάντα για κάθε εσωτερικό υποπρόγραμμα Ειδικότερα, θα ξέρει για την διασύνδεση (interface): αν προσδιορίζει μια συνάρτηση ή μια υπορουτίνα, θα έχει τα ονόματα και τις ιδιότητες των παραμέτρων (arguments), και αν προσδιορίζει μια συνάρτηση θα έχει τις ιδιότητες των αποτελεσμάτων Αυτό, για παράδειγμα, επιτρέπει τον compiler να ελέγχει αν οι παράμετροι (arguments) ταιριάζουν με τον τρόπο που πρέπει στα περάσματα Λέμε τότε ότι η διεπαφή είναι σαφής (explicit) Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Διεπαφές explicit και implicit Μια κλήση σε μια προγραμματιστική μονάδα (module) πρέπει να γίνεται από άλλη δήλωση στη μονάδα ή από μια δήλωση που ακολουθεί ένα use μέσα στην μονάδα Και στις δύο περιπτώσεις, ο compiler θα γνωρίζει τα πάντα για το υποπρόγραμμα, και πάλι μπορούμε να πούμε ότι η διεπαφή είναι σαφής (explicit) Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Διεπαφές explicit και implicit Κατά την κλήση μιας εξωτερικής διαδικασίας (external procedure), ο compiler κανονικά δεν διαθέτει μηχανισμό για να αποκτήσει πρόσβαση στον κώδικα της Τότε λέμε ότι η διεπαφή είναι έμμεση, υπονοούμενη (implicit) Το μόνο που γνωρίζει ο compiler είναι οι πληροφορίες σχετικά με την κλήση, για παράδειγμα ο αριθμός των παραμέτρων (arguments) και ο τύπος τους Για να καθορισθεί μία τέτοια εξωτερική διαδικασία, υπάρχει η δήλωση external external-name-list και εμφανίζεται με άλλες δηλώσεις προδιαγραφών και πριν από κάθε εκτελέσιμη δήλωση Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Διεπαφές explicit και implicit Μία εξωτερική διαδικασία (external procedure) γίνεται compiled και linked χωριστά Δεν προτείνεται η χρήση τους σε ένα κανονικό πρόγραμμα: οι προγραμματιστικές μονάδες (modules) είναι πιο εύκολες στην χρήση τους και πιο ασφαλείς στην διαχείριση παραμέτρων Αντίθετα, μία εξωτερική διαδικασία χρειάζεται αν γίνεται διασύνδεση με διαδικασίες γραμμένες σε άλλη γλώσσα προγραμματισμού (C, κλπ) καλούνται ρουτίνες βιβλιοθηκών, πχ BLAS 1 1 The BLAS (Basic Linear Algebra Subprograms) are routines that provide standard building blocks for performing basic vector and matrix operations Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων

Βιβλιογραφία M Metcalf, J Reid, M Cohen, Modern Fortran Explained, Oxford, 4th Edition, 2011 κεφάλαιο 5: Program units and procedures Γ Παπαλάμπρου - Μάθημα 4 (Μ4) Συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων