FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017 Μ4. Συναρτήσεις, Υπορουτίνες, Ενότητες - Ασκήσεις Γεώργιος Παπαλάμπρου Επικ. Καθηγητής ΕΜΠ Εργαστήριο Ναυτικής Μηχανολογίας george.papalambrou@lme.ntua.gr ΕΜΠ/ΣΝΜΜ Εργαστήριο Ναυτικής Μηχανολογίας
Ενότητες Μαθήματος 1. Εισαγωγή στην γλώσσα προγραμματισμού FORTRAN. 2. Απλοί τύποι δεδομένων, σταθερές και μεταβλητές, εκφράσεις, απλές εντολές. 3. Δομές ελέγχου. 4. Διαδικασίες {=Συναρτήσεις (functions), υπορουτίνες (subroutines)}, Ενότητες/μονάδες (modules). 5. Μεταφορά δεδομένων, είσοδος-έξοδος, εξωτερικά αρχεία δεδομένων 6. Φάσεις ανάπτυξης λογισμικού: προδιαγραφές, σχεδίαση, υλοποίηση, επαλήθευση, τεκμηρίωση, συντήρηση προγραμμάτων. 7. Σύνθετες δομές δεδομένων: πίνακες, εγγραφές, συνδεδεμένες λίστες. Δυναμική παραχώρηση μνήμης. 8. Βασικές έννοιες αντικειμενοστραφούς προγραμματισμού: αφηρημένοι τύποι δεδομένων, κλάσεις, αντικείμενα, μεταβλητές, μέθοδοι, ενθυλάκωση, κληρονομικότητα, πολυμορφισμός. 9. Διασύνδεση της FORTRAN με άλλες γλώσσες προγραμματισμού. 10. Υλοποίηση παραδειγμάτων και επίλυση προβλημάτων με τη γλώσσα προγραμματισμού FORTRAN.
Περιεχόμενα Ασκήσεων M3 M4 M7 M5 Selective Execution (IF-THEN-ELSE and SELECT CASE) Repetitive Execution (DO Loops) Functions and Modules Subroutines One-Dimensional Arrays Multi-Dimensional Arrays Formated Input and Output Σήμερα: 4 προγράμματα ασκήσεων M4 (και στην ιστοσελίδα μαθήματος: Dropbox/m4_codes/)
Υλικό Ασκήσεων Κατεβάστε από την ιστοσελίδα μαθήματος τα προγράμματα ασκήσεων και τρέξτε τα. slides παραδείγματα ασκήσεις Κώδικες f95 ασκήσεις
Functions 1. Υπολογισμός δύναμης Το πρόβλημα Γράψτε ένα πρόγραμμα για τον υπολογισμό της 3 ης δύναμης του 1, 2, 3,... 10 στις περιπτώσεις INTEGER και REAL. Απαιτείται να υπάρχει ένα function για τον υπολογισμό του κύβου του ακεραίου και ένα function για τον υπολογισμό του κύβου του πραγματικού. Cubes.f95 5
Functions 1. Υπολογισμός δύναμης 6
Functions 1. Υπολογισμός δύναμης 1. Tα Functions ακολουθούν το keyword CONTAINS PARAMETER για δήλωση σταθερών, δηλ. μεταβλητών που παίρνουν μια μοναδική τιμή, η οποία δεν αλλάζει ποτέ (πχ φυσικές σταθερές) 2. Function name = όνομα μεταβλητής με το αποτέλεσμα 3. Το Function επιστρέφει μόνον 1 αποτέλεσμα! 4. Functions ορίζονται μεταξύ CONTAINS END PROGRAM 7
Functions 1. Υπολογισμός δύναμης 8
Functions 1. Υπολογισμός δύναμης Η έξοδος του προγράμματος δίνει τα παρακάτω αποτελέσματα 9
Subroutines 1. Μετατροπή ημερομηνίας Το πρόβλημα Στην επεξεργασία δεδομένων, το έτος, ο μήνας και η ημέρα συνήθως γράφονται ως YYYYMMDD, όπου τα πρώτα τέσσερα ψηφία είναι έτος, τo πέμπτο και έκτο ψηφίο είναι μήνας και τα δύο τελευταία ψηφία είναι ημέρα. Για παράδειγμα το 19710428 υποννοεί 28 Απριλίου 1971. Γράψτε ένα πρόγραμμα που διαβάζει έναν ακέραιο με τη μορφή YYYYMMDD και εξάγει τις τιμές του έτους, μήνα και ημέρας, με χρήση υπορουτίνας. YYYYMMDD2.f95 10
Subroutines 1. Μετατροπή ημερομηνίας 5. Δεν απαιτείται σε FRTN95! 1. To Subroutine καλείται με το keyword CALL 2. INTENT(IN): είσοδος, INTENT(OUT): έξοδος 3. Το Subroutine επιστρέφει >= αποτελέσματα! 4. Subroutines ορίζονται μετά το END PROGRAM mod(19960602,10000)=602 mod(19960602,100)=2 11
Subroutines 1. Μετατροπή ημερομηνίας Δεν απαιτείται σε FRTN95! 12
Subroutines 1. Μετατροπή ημερομηνίας Η έξοδος του προγράμματος δίνει τα παρακάτω αποτελέσματα 13
Subroutines M4_ex22.f95 2. Πολυώνυμο Το πρόβλημα Επίλυση πολυωνύμου 2 ου βαθμού με χρήση υπορουτίνας Χρήση SELECT CASE για διαχωρισμό περιπτώσεων ριζών 14
Subroutines 2. Πολυώνυμο 2. Call Subroutine Solver() 1. SELECT CASE 15
Subroutines 2. Πολυώνυμο 16
Subroutines 2. Πολυώνυμο 17
Subroutines 2. Πολυώνυμο 18
Subroutines 3. Subroutines + Functions 19
Modules Γενικά Σε προηγούμενα παραδείγματα υπάρχουν πολλές εσωτερικές λειτουργίες που φτιάχνονται ως υπορουτίνες στο τέλος του κύριου προγράμματος. Στην πραγματικότητα, πολλές από αυτές είναι γενικές λειτουργίες που μπορούν επίσης να χρησιμοποιηθούν σε άλλα προγράμματα. Η γλώσσα Fortran > 90 παρέχει έναν τρόπο «συσκευασίας» των συχνότερα χρησιμοποιούμενων λειτουργιών σε ενότητες που ονομάζονται ενότητες (modules). Έχουν μια συντακτική μορφή παρόμοια με ένα κύριο πρόγραμμα, εκτός από ορισμένα ειδικά χαρακτηριστικά. 20
Modules Γενικά-Σύνταξη MODULE module-name IMPLICIT NONE [specification part] CONTAINS [internal-functions] END MODULE module-name 21
Modules Γενικά-Σύνταξη MODULE module-name IMPLICIT NONE [specification part] CONTAINS [internal-functions] END MODULE module-name Μία χρήση μιας ενότητας/μονάδας είναι να συμπεριλάβει τον ορισμό σταθερών που θα μπορούσαν να είναι χρήσιμα σε άλλα προγράμματα. Το module math_module περιέχει τιμές του π, e, και γ (θα μπορούσε να περιέχει πολλές άλλες). Κάθε πρόγραμμα που χρειάζεται αυτές τις σταθερές μπορεί απλά να χρησιμοποιήσει την μονάδα 22
Modules Γενικά-Σύνταξη MODULE module-name IMPLICIT NONE [specification part] CONTAINS [internal-functions] END MODULE module-name 1. Το module SumAverage δεν έχει specification part (οπότε δεν υπάρχει IMPLICIT NONE). 2. Περιέχει τα functions Sum() και Average(). 3. Προσοχή: το function Average() κάνει χρήση του Sum() για τον υπολογισμό αθροίσματος 3 REAL αριθμών. 23
Modules Γενικά-Σύνταξη 1. module DegreeRadianConversion: περιέχει PARAMETERs, PI και Degree180 και δύο functions DegreeToRadian() και RadianToDegree(). 2. Οι PARAMETERs χρησιμοπ. από τα functions. 3. Οι parameters είναι global για τα δύο functions. 24
Modules 1. Τριγωνομετρικές πράξεις με μοίρες Το πρόβλημα Οι τριγωνομετρικές συναρτήσεις sin(x) και cos(x) χρησιμοποιούν ακτίνια (rad) ως όρισμα. Χρησιμοποιώντας module, να σχεδιάσετε τριγωνομετρικές πράξεις που χρησιμοποιούν μοίρες (deg). Γράψτε ένα module που περιέχει functions για τη μετατροπή rad σε deg και το ανάποδο και sin(x) και cos(x) με ορίσματα deg αντί rad. TrigonFuncTest.f95 MyTrigonometricFunctions.f95 25
Modules 1. Τριγωνομετρικές πράξεις με μοίρες 1. To Module καλείται με το keyword USE 2. Ο γενικός κώδικας υπάρχει μόνο στο main program 26
Modules 1. Τριγωνομετρικές πράξεις με μοίρες 1. Tα Functions ακολουθούν το keyword CONTAINS 2. Υπάρχουν μόνον Functions και όχι άλλος γενικός κώδικας 1. To Module τελειώνει με το keyword END MODULE <Name> 27
Modules 1. Τριγωνομετρικές πράξεις με μοίρες Σε περίπτωση ύπαρξης ενός module, πρώτα γίνεται Toolbar Build Compile, -> Build το αρχείο του module και κατόπιν κατά τα γνωστά συνεχίζουμε με το κυρίως πρόγραμμα. ΑΛΛΙΩΣ εμφανίζεται το μήνυμα σφάλματος 28
Modules 1. Τριγωνομετρικές πράξεις με μοίρες Σε περίπτωση ύπαρξης ενός module, πρώτα γίνεται Toolbar Build Compile, -> Build το αρχείο του module και κατόπιν κατά τα γνωστά συνεχίζουμε με το κυρίως πρόγραμμα. 29
Modules 1. Τριγωνομετρικές πράξεις με μοίρες Η έξοδος του προγράμματος δίνει τα παρακάτω αποτελέσματα 30
Subroutines vs Functions Subroutine Functions 31