FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2016 M10 Παραδείγματα FORTRAN Δρ. Γεώργιος Παπαλάμπρου Επικ. Καθηγητής ΕΜΠ Εργαστήριο Ναυτικής Μηχανολογίας george.papalambrou@lme.ntua.gr ΕΜΠ/ΣΝΜΜ Εργαστήριο Ναυτικής Μηχανολογίας 1
Περιεχόμενα Παραδειγμάτων 1. Εισαγωγή 2. Selective Execution (IF-THEN-ELSE and SELECT CASE) 3. Repetitive Execution (DO Loops) 4. Functions και Modules 5. Υπορουτίνες 6. Πίνακες 7. Μορφοποιημένο Input και Output Όλα τα αρχεία *.f95 υπάρχουν στην ιστοσελίδα του μαθήματος Σήμερα! Τα παραδείγματα αυτής της ενότητας έχουν ληφθεί από το: http://www.cs.mtu.edu/~shene/courses/cs201/notes/fortran.html Το περιεχόμενο της ιστοσελίδας αυτής περιέχει σύντομη παρουσίαση της βασικής γλώσσας Fortran και πολλά παραδείγματα με κώδικες (που εκτελούνται!) και συστήνεται για μελέτη. 2
DO Loops 1. Καταμέτρηση θετικών και αρνητικών Το αρχείο Counting.f95 υπάρχει στην ιστοσελίδα Το πρόβλημα Λαμβάνοντας υπόψη ένα σύνολο με ακέραιες τιμές εισόδου, γράψτε ένα πρόγραμμα για να μετρήσει τον αριθμό των θετικών και αρνητικών τιμών και να υπολογίζει τα αθροίσματά τους. Η είσοδος δεδομένων θα είναι οργανωμένη ως εξής: Η πρώτη γραμμή δίνει τον αριθμό των τιμών των δεδομένων που ακολουθούν Ξεκινώντας με τη δεύτερη γραμμή, κάθε γραμμή περιέχει μια τιμή ακεραίου Counting.f95 3
DO Loops 1. Καταμέτρηση θετικών και αρνητικών 4
DO Loops 1. Καταμέτρηση θετικών και αρνητικών Για την εκτέλεση του προγράμματος στο περιβάλλον Plato κάνουμε τα παρακάτω: Toolbar Build Compile, -> Build, -> Start Run Η έξοδος του προγράμματος δίνει τα παρακάτω αποτελέσματα 5
Functions και Modules 1. Υπολογισμός δύναμης Το αρχείο Cubes.f95 υπάρχει στην ιστοσελίδα Το πρόβλημα Γράψτε ένα πρόγραμμα για τον υπολογισμό της 3 ης δύναμης του 1, 2, 3,... 10 στις περιπτώσεις INTEGER και REAL. Απαιτείται να υπάρχει ένα function για τον υπολογισμό του κύβου του ακεραίου και ένα function για τον υπολογισμό του κύβου του πραγματικού. Cubes.f95 6
Functions και Modules 1. Υπολογισμός δύναμης 7
Functions και Modules 1. Υπολογισμός δύναμης Η έξοδος του προγράμματος δίνει τα παρακάτω αποτελέσματα 8
Functions και Modules Τα αρχεία TrigonFuncTest.f95, 2. Τριγωνομετρικές πράξεις με μοίρες MyTrigonometricFunctions.f95 υπάρχουν στην ιστοσελίδα Το πρόβλημα Οι τριγωνομετρικές συναρτήσεις sin(x) και cos(x) χρησιμοποιούν ακτίνια (rad) ως όρισμα. Χρησιμοποιώντας modules, να σχεδιάσετε τριγωνομετρικές πράξεις που χρησιμοποιούν μοίρες (deg). Γράψτε ένα module που περιέχει functions για τη μετατροπή rad σε deg και το ανάποδο και sin(x) και cos(x) με ορίσματα deg αντί rad. MyTrigonometricFunctions.f95 TrigonFuncTest.f95 9
Functions και Modules 2. Τριγωνομετρικές πράξεις με μοίρες 10
Functions και Modules 2. Τριγωνομετρικές πράξεις με μοίρες 11
Functions και Modules 2. Τριγωνομετρικές πράξεις με μοίρες Σε περίπτωση ύπαρξης ενός module, πρώτα γίνεται Toolbar Build Compile, -> Build το αρχείο του module και κατόπιν κατά τα γνωστά συνεχίζουμε με το κυρίως πρόγραμμα. Η έξοδος του προγράμματος δίνει τα παρακάτω αποτελέσματα 12
Υπορουτίνες 1. Μετατροπή ημερομηνίας Το αρχείο YYYYMMDD.f95 υπάρχει στην ιστοσελίδα Το πρόβλημα Στην επεξεργασία δεδομένων, το έτος, ο μήνας και η ημέρα συνήθως γράφονται ως YYYYMMDD, όπου τα πρώτα τέσσερα ψηφία είναι έτος, τo πέμπτο και έκτο ψηφίο είναι μήνας και τα δύο τελευταία ψηφία είναι ημέρα. Για παράδειγμα το 19710428 υποννοεί 28 Απριλίου 1971. Γράψτε ένα πρόγραμμα που διαβάζει έναν ακέραιο με τη μορφή YYYYMMDD και εξάγει τις τιμές του έτους, μήνα και ημέρας, με χρήση υπορουτίνας. YYYYMMDD.f95 13
Υπορουτίνες 1. Μετατροπή ημερομηνίας 14
Υπορουτίνες 1. Μετατροπή ημερομηνίας Η έξοδος του προγράμματος δίνει τα παρακάτω αποτελέσματα 15
Πίνακες 1. Αναζήτηση στοιχείων πίνακα Τo αρχείo TableLookUp.f95 υπάρχει στην ιστοσελίδα Το πρόβλημα Δίνεται πίνακας και ένας αυθαίρετος αριθμός και ζητείται να γράψετε ένα πρόγραμμα για να καθορίσει εάν ο αριθμός αυτός είναι μέρος του πίνακα. Το πρόγραμμα θα πρέπει να διαβάζει τον πίνακα, να ρωτάει για έναν αριθμό, να κάνει την αναζήτηση και να εμφανίζει τη θέση στον πίνακα όπου βρίσκεται ο αριθμός (αν υπάρχει). TableLookUp.f95 16
Πίνακες 1. Αναζήτηση στοιχείων πίνακα 17
Πίνακες 1. Αναζήτηση στοιχείων πίνακα Η έξοδος του προγράμματος δίνει τα παρακάτω αποτελέσματα Δόθηκε CTRL C για τερματισμό 18
Mορφοποίηση εισόδου/εξόδου - Formatted I/O Ο παρακάτω πίνακας περιγράφει τις δυνατότητες μορφοποίησης εισόδου/εξόδου δεδομένων προγράμματος. Παραδείγματα CHARACTER(LEN=30) :: Format Format = "(5X, I5.2, F10.3, A, ES14.7)" READ(*,Format)... variables... WRITE(*,Format)... variables and expressions... 19
I/O Εξοδος ακεραίου - INTEGER Output: The I Descriptor Παράδειγμα 20
I/O Εξοδος πραγματικού - REAL Output: The F Descriptor Παράδειγμα 21
I/O Εξοδος πραγματικού - REAL Output: The E Descriptor Παράδειγμα 22
I/O Εξοδος χαρακτήρα - CHARACTER Output: The A Descriptor 23
I/O Εξοδος χαρακτήρα - CHARACTER Output: The A Descriptor Παράδειγμα 24
Ι/Ο 1. Εκτύπωση ακεραίων και πραγματικών Τo αρχείo Format.f95 υπάρχει στην ιστοσελίδα Το πρόβλημα Γράψτε ένα πρόγραμμα που για κάθε ακέραιο στην περιοχή από 1 έως 10, εκτυπώνει την τιμή του, το τετράγωνο, τον κύβο, την τετραγωνική ρίζα και την τέταρτη ρίζα. Θα πρέπει να δημιουργήσετε την έξοδο όπως φαίνεται παρακάτω. 1 1 1 1.0000000 1.0000000 2 4 8 1.4142135 1.1892071 3 9 27 1.7320508 1.3160740 : : 10 100 1000 3.1622777 1.7782794 Format.f95 25
Ι/Ο 1. Εκτύπωση ακεραίων και πραγματικών Κάθε ένας από τους 3 πρώτους ακέραιους εκτυπώνεται χρησιμοποιώντας 6 θέσεις, και κάθε μία από τις ρίζες εκτυπώνεται χρησιμοποιώντας 12 θέσεις με 7 ψηφία για το κλασματικό μέρος. 26
Ι/Ο 2. Εκτύπωση πραγματικών Τo αρχείo FormatLog.f95 υπάρχει στην ιστοσελίδα Το πρόβλημα Γράψτε ένα πρόγραμμα που για x = 2.0, 1.8, 1.6, 1.4,..., 0.8, 0.6, 0.4 και 0.2, εκτυπώνει τον αύξοντα αριθμό της τιμής ( δηλαδή, 1, 2, 3, κλπ), την ίδια την τιμή και LOG του (x) τέσσερις φορές χρησιμοποιώντας Ε, Ε με τρία ψηφία για τον εκθέτη, ES και EN περιγραφείς. Θα πρέπει να δημιουργήσετε την έξοδο όπως φαίνεται παρακάτω. 1 2.00000 0.69315E+00 0.69315E+000 6.93147E-01 693.14718E-03 2 1.80000 0.58779E+00 0.58779E+000 5.87787E-01 587.78661E-03 3 1.60000 0.47000E+00 0.47000E+000 4.70004E-01 470.00358E-03 : 10 0.20000-0.16094E+01-0.16094E+001-1.60944E+00-1.60944E+00 FormatLog.f95 27
Ι/Ο 2. Εκτύπωση πραγματικών 28