FORTRAN και Αντικειμενοστραφής Προγραμματισμός Παραδόσεις Μαθήματος 2016 Δρ Γ Παπαλάμπρου Επίκουρος Καθηγητής ΕΜΠ georgepapalambrou@lmentuagr Εργαστήριο Ναυτικής Μηχανολογίας (Κτίριο Λ) Σχολή Ναυπηγών Μηχανολόγων Μηχανικών Εθνικό Μετσοβιο Πολυτεχνείο March 23, 2016 Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Περιεχόμενα ύλης 1 Εισαγωγή στην γλώσσα FORTRAN 2 Απλοί τύποι δεδομένων, σταθερές, μεταβλητές, εκφράσεις, εντολές 3 Δομές ελέγχου, συναρτήσεις, διαδικασίες, πέρασμα παραμέτρων 4 Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων [Μ5] 5 Σύνθετες δομές δεδομένων: πίνακες, εγγραφές Παραχώρηση μνήμης 6 Στοιχεία μεθοδολογίας προγραμματισμού: αλγόριθμοι, δομές δεδομένων, επανάληψη, αναδρομή, δομημένος προγραμματισμός 7 Φάσεις ανάπτυξης λογισμικού: προδιαγραφές, σχεδίαση, υλοποίηση, επαλήθευση, τεκμηρίωση, συντήρηση προγραμμάτων 8 Αντικειμενοστραφής προγραμματισμός: τύποι δεδομένων, κλάσεις, αντικείμενα, κληρονομικότητα, πολυμορφισμός 9 Διασύνδεση FORTRAN με άλλες γλώσσες (C/C++, MATLAB) Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Αναφορά στο βιβλίο M Metcalf, J Reid, M Cohen, Modern Fortran Explained, Oxford, 4th Edition, 2011 κεφάλαιο 9 Data transfer, παράγραφοι: 91-95, 97, 98 κεφάλαιο 10 Operations on external files Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Μεταφορά δεδομένων, είσοδος/έξοδος-εισαγωγή 1 Η Fortran διαθέτει ένα ιδιαίτερα πλούσιο σύνολο δυνατοτήτων για την είσοδο/έξοδο (input/output-ι/ο) δεδομένων, όμως είναι μια περιοχή της γλώσσας στην οποία δεν δίνεται συνήθως μεγάλη έμφαση 2 Για τα περισσότερα προγράμματα μικρής κλίμακας αρκεί να ξέρετε πώς να διαβάσετε μερικά αρχεία δεδομένων που περιέχουν τις μεταβλητές εισόδου, και πώς να μεταφέρετε σε μία οθόνη ή εκτυπωτή τα αποτελέσματα ενός υπολογισμού Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Μεταφορά δεδομένων, είσοδος/έξοδος-εισαγωγή 1 Αντιθέτως στην επεξεργασία δεδομένων μεγάλης κλίμακας από την άλλη, τα προγράμματα έχουν συχνά να αντιμετωπίσουν μεγάλες ροές δεδομένων από και προς πολλά αρχεία 2 Στι περιπτώσεις αυτές είναι απαραίτητο να δοθεί προσοχή στον τρόπο με τον οποίο η είσοδος/έξοδος έχει σχεδιασθεί ώστε ο χρόνος εκτέλεσης του προγράμματος να μην είναι δραματικά μεγάλος Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Μεταφορά δεδομένων, είσοδος/έξοδος-εισαγωγή Ο όρος αρχείο (file) χρησιμοποιείται για συλλογή δεδομένων που δεν βρίσκονται στην κύρια μνήμη του Η/Υ και ένα αρχείο οργανώνεται πάντοτε σε μία ακολουθία εγγραφών (records) Αυτό το κεφάλαιο ξεκινά με τη συζήτηση διαφόρων τύπων μορφοποιημένων (formatted) I/O, δηλαδή I/O σχετικές με εγγραφές που δεν χρησιμοποιούν τον εσωτερικό τρόπο αναπαράστασης αριθμών του υπολογιστή, αλλά μία σειρά χαρακτήρων που μπορούν να εμφανιστούν σε μία μονάδα εξόδου Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Μεταφορά δεδομένων, είσοδος/έξοδος-εισαγωγή Είναι επίσης η μορφή που συνήθως απαιτείται για μετάδοση δεδομένων μεταξύ των διαφόρων ειδών των ηλεκτρονικών υπολογιστών Κατόπιν παρουσιάζονται οι λεγόμενες περιγραφές επεξεργασίας (edit descriptors), οι οποίες χρησιμοποιούνται για τον έλεγχο της μετάφρασης μεταξύ της εσωτερικής αναπαράστασης αριθμών και της εξωτερικής μορφής Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Μετατροπή αριθμών Οι τρόποι με τους οποίους οι αριθμοί αποθηκεύονται εσωτερικά σε έναν Η/Υ αποτελούν συνήθως αντικείμενο της επιστήμης των υπολογιστών Ωστόσο, αν θέλουμε να δώσουμε στην έξοδο τις τιμές - να εμφανιστουν σε μία οθόνη ή να εκτυπωθούν - τότε οι εσωτερικές αναπαραστάσεις τους πρέπει να μετατραπούν σε μία ακολουθία χαρακτήρων για να μπορούν να διαβαστούν με ένα κανονικό τρόπο Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Μετατροπή αριθμών Για παράδειγμα, τα περιεχόμενα μιας δεδομένης λέξης υπολογιστή μπορεί να είναι (σε δεκαεξαδικό σύστημα) be1d7dbf που αντιστοιχεί στην τιμή -0,000450 Για τον δικά μας συγκεκριμένο σκοπό, μπορεί να θέλουμε να εμφανιστεί η ποσότητα αυτή, όπως -000450, είτε ως -45E - 04, ή στρογγυλεμένη σε ένα σημαντικό ψηφίο ως -5Ε - 04 Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Μεταφορά δεδομένων, είσοδος/έξοδος-εισαγωγή Η μετατροπή από την εσωτερική αναπαράσταση στην εξωτερική μορφή πραγματοποιείται σύμφωνα με τις πληροφορίες που καθορίζονται από τις περιγραφές επεξεργασίας (edit descriptros) που περιέχονται στις προδιαγραφές μορφoποίησης (format specifications) Οι περιγραφές επεξεργασίας παρουσιάζονται πλήρως αργότερα σε αυτό το κεφάλαιο Προς το παρόν, ας δούμε μερικά παραδείγματα Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Μεταφορά δεδομένων, είσοδος/έξοδος-εισαγωγή Για να εκτυπώσετε μια μεταβλητή χαρακτήρα σε ένα πεδίο 10 χαρακτήρων, ορίζετε a10, όπου το a συμβολίζει αλφαριθμητική μετατροπή Για να εκτυπώσετε μια ακέραια τιμή σε ένα πεδίο πλάτους 10 χαρακτήρων, θα χρησιμοποιήσετε την περιγραφη επεξεργασίας i10, όπου το i συμβολίζει μετατροπή ακεραίου, και το 10 προσδιορίζει το πλάτος του πεδίου εξόδου Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Μεταφορά δεδομένων, είσοδος/έξοδος-εισαγωγή Για να εκτυπώσετε μία πραγματική ποσότητα σε ένα πεδίο 10 χαρακτήρων, τα 5 από τα οποία προορίζονται για το κλασματικό μέρος του αριθμού, ορίζουμε f105 Η περιγραφή επεξεργασίας f συμβολίζει πραγματική μετατροπή (floating-point), το 10 είναι το συνολικό πλάτος του πεδίου εξόδου και 5 είναι το πλάτος του κλασματικό μέρος του γηπέδου Εάν ο αριθμός που δίνεται παραπάνω ήταν να μετατραπεί σύμφωνα με αυτή την περιγραφή επεξεργασίας, θα εμφανιστεί ως bb - 0,00045, όπου b αντιπροσωπεύει ένα κενό Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Μεταφορά δεδομένων, είσοδος/έξοδος-εισαγωγή Μια προδιαγραφή μορφoποίησης (format specification) αποτελείται από έναν κατάλογο απο περιγραφές επεξεργασίας που περικλείονται σε παρενθέσεις, και μπορεί να κωδικοποιούνται είτε ως προεπιλεγμένη έκφραση χαρακτήρων, για παράδειγμα (i10, f103, a10) ή ως μία ξεχωριστή δήλωση μορφοποίησης με μια ετικέτα δήλωσης (statement label), για παράδειγμα, 10 format(i10, f103, a10) Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Μεταφορά δεδομένων, είσοδος/έξοδος-εισαγωγή Για να εκτυπώσετε τις βαθμωτές μεταβλητές j, b, και c, με τύπους ακέραιου, πραγματικού και χαρακτήρα αντίστοιχα, θα δώσετε print (i10, f103, a10), j,b,c ή print 10, j,b,c 10 format(i10, f103, a10) Η πρώτη μορφή χρησιμοποιείται συνήθως όταν υπάρχει μόνο μία αναφορά για την δεδομένη προδιαγραφή της μορφής ενώ η δεύτερη όταν υπάρχουν πολλές ή όταν η μορφή είναι περίπλοκη Το μέρος της δήλωσης προσδιορισμού των ποσοτήτων που θα εκτυπωθεί είναι γνωστή ως λίστα εξόδου (output list) και αποτελεί το αντικείμενο της επόμενης ενότητας Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Λίστα εξόδου Οι ποσότητες που πρέπει να διαβάσει ή να γράψει ένα πρόγραμμα διευκρινίζονται σε κατάλογο Ι/O Η έξοδος μπορεί να είναι εκφράσεις, αλλά για την είσοδο θα πρέπει να είναι μεταβλητές Και στις δύο περιπτώσεις τα στοιχεία της λίστας μπορεί να είναι λίστες με τα μεγέθη μέσω δομής do Παραδείγματα δείχνονται στο Σχήμα 91, όπου σημειώνουμε την χρήση μιας καταμέτρησης με επανάληψη μπροστά από τα εν λόγω χαρακτηριστικά επεξεργασίας που απαιτούνται κατ επανάληψη Μια καταμέτρηση με επανάληψη πρέπει να είναι θετικός ακέραιος και δεν πρέπει να έχει μια παράμετρο τύπου του είδους Δηλώσεις συναρτήσεων επιτρέπονται σε ένα κατάλογο Ι/O, υπό την προϋπόθεση ότι δεν θα προκαλέσουν περαιτέρω I/O Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Λίστα εξόδου Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Λίστα εξόδου Σε όλα αυτά τα παραδείγματα, εκτός από το τελευταίο, οι εκφράσεις αποτελούνται από επιμέρους μεταβλητές και θα ήταν εξίσου έγκυρες δηλώσεις εισόδου χρησιμοποιώντας τη δήλωση ανάγνωσης (read) όπως για παράδειγμα read (i10), i Τέτοιες δηλώσεις μπορούν να χρησιμοποιηθούν για να διαβάσετε τις τιμές οι οποίες στη συνέχεια αποδίδονται στις μεταβλητές με τη λίστα εισόδου Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Λίστα εξόδου Αν ένας πίνακας εμφανίζεται ως ένα στοιχείο, αυτός αντιμετωπίζεται με τα στοιχεία που να προσδιορίζονται με διάταξη στοιχείων του πίνακα Για παράδειγμα, η τρίτη από τις δηλώσεις εκτύπωσης στο Σχήμα 91 μπορούσε να έχει γραφτεί print (3f103), a(1:3) Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Λίστα εξόδου Ωστόσο κανένα στοιχείο της συστοιχίας δεν μπορεί να εμφανιστεί περισσότερες από μία φορές σε ένα στοιχείο εισόδου Έτσι, η περίπτωση στο Σχήμα 92 δεν επιτρέπεται Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Λίστα εξόδου Μια λίστα I/O μπορεί να περιλαμβάνει μια λίστα με do, όπως φαίνεται και από την πέμπτη δήλωση print του Σχ 91: print (5f103), (a(i), i=1,9,2) Η γενική μορφή είναι (do-object-list, do-var = expr, expr [, expr]) όπου κάθε do-object είναι μια μεταβλητή (για την είσοδο), μια έκφραση (για έξοδο), ή είναι η ίδια ένας κατάλογος do, do-var είναι βαθμωτή ακέραια μεταβλητή και κάθε expr είναι μια βαθμωτή ακέραια έκφραση Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Ορισμός μορφών Στις δηλώσεις print, read της προηγούμενης παραγράφου, η προδιαγραφή της μορφής (format specification) δόθηκε κάθε φορά ως ένας σταθερός χαρακτήρας αμέσως μετά τη λέξη-κλειδί Στην πραγματικότητα, υπάρχουν τρεις τρόποι με τους οποίους μπορεί να δοθεί μια προδιαγραφή της μορφής, ως εξής: προεπιλεγμένη έκφραση χαρακτήρα (default character expression), αστερίσκος (asterisk), ετικέτα δήλωσης (statement label) Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
1 Προεπιλεγμένη έκφραση χαρακτήρα Προεπιλεγμένη έκφραση χαρακτήρα η τιμή της οποίας ξεκινά με μια προδιαγραφή της μορφής στην παρένθεση: : print (f103), q ή character::carray(7)=(/ (, f, 1, 0,, 3, ) /) : print carray, q! Elements of an array expression! are concatenated : ή Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
1 Προεπιλεγμένη έκφραση χαρακτήρα Από αυτά τα παραδείγματα φαίνεται ότι είναι δυνατόν να προγραμματιστούν μορφές με ένα ευέλικτο τρόπο, και ειδικότερα ότι είναι δυνατό να χρησιμοποιηθούν εκφράσεις, πίνακες και συμβολοσειρές (substrings) κατά τρόπο που να επιτρέπει μία συγκεκριμένη μορφή να δημιουργηθεί δυναμικά κατά το χρόνο εκτέλεσης από διάφορα στοιχεία Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
2 Αστερίσκος Ο αστερίσκος είναι ένα είδος Ι/Ο γνωστός ως κατευθυνόμενη λίστα I/O (list-directed I/O), στο οποίο ορίζεται η μορφή από το σύστημα του υπολογιστή κατά τη στιγμή που η δήλωση εκτελείται, ανάλογα με το είδος και το μέγεθος των στοιχείων που περιλαμβάνονται, ως εξής: : print *, Square-root of q =, sqrt(q) Αυτό το παράδειγμα εξάγει μία έκφραση, ακολουθούμενη από την τιμή της έκφρασης Στην οθόνη αυτό θα εμφανίζεται ως : Square-root of q = 4392246 Αυτή η δυνατότητα είναι ιδιαίτερα χρήσιμη για μικρό πλήθος των τιμών εισόδου, εξόδου, ειδικά σε προσωρινό κώδικα που χρησιμοποιείται για τους σκοπούς μιάς δοκιμής, και ο οποίος αφαιρείται από την τελική έκδοση του προγράμματος Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
3 Ετικέτα δήλωσης Μία ετικέτα δήλωσης αναφέρεται σε μια δήλωση μορφής που περιέχει τη σχετική προδιαγραφή μεταξύ παρενθέσεων: : print 100, q : 100 format(f103) Η δήλωση μορφής πρέπει να εμφανίζεται στην ίδια μονάδα προγράμματος, πριν από δήλωση contain (εάν αυτή υπάρχει) Είναι σύνηθες, είτε να τοποθετείται κάθε δήλωση μορφής αμέσως μετά την πρώτη δήλωση στην οποία αναφέρεται, ή να υπάρχουν όλες μαζί λίγο πριν από δήλωση contain ή end Επίσης, είναι σύνηθες να υπάρχει ξεχωριστή ακολουθία αριθμών για τις ετικέτες (labels) στην δήλωση format Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Αριθμοί μονάδων I/O Οι λειτουργίες εισόδου/εξόδου χρησιμοποιούνται για τη μεταφορά δεδομένων μεταξύ των μεταβλητών ενός εκτελούμενου προγράμματος, όπως είναι αποθηκευμενές στον υπολογιστή ή/και σε ένα εξωτερικό μέσο Υπάρχουν πολλοί τύποι εξωτερικών μέσων: οθόνη, εκτυπωτής, σκληρός δίσκος, memory stick και CD, που είναι ίσως και τα πιο γνωστά Όποια και αν είναι η διάταξη, ένα πρόγραμμα Fortran θεωρεί το μέσο από το οποίο διαβάζει ή στο οποία γράφει ως μονάδα (unit) και κάθε μονάδα, με δύο εξαιρέσεις, σχετίζεται με έναν αριθμό μονάδας (unit number) Ο αριθμός αυτός δεν πρέπει να είναι αρνητικός Έτσι θα μπορούσαμε να συσχετίσουμε ένα CD από το οποίο διαβάζουμε με τον αριθμό μονάδας 10, και ένα σκληρό δίσκο στον οποίο γράφουμε τον αριθμό μονάδας 11 Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Αριθμοί μονάδων I/O Είδαμε μέχρι τώρα δύο δηλώσεις I/O, της εκτύπωσης (print) και μία παραλλαγή της ανάγνωσης (read), που δεν χρησιμοποιούν κάποιο αριθμό μονάδας, για χάρη απλότητας Μια δήλωση ανάγνωσης χωρίς αριθμό μονάδας κανονικά αναμένει να διαβάσει από το πληκτρολόγιο, εκτός εάν το πρόγραμμα λειτουργεί μη διαδραστικά αλλά σε παρτίδα (batch), στην οποία περίπτωση υπάρχει θα είναι ένα αρχείο δίσκου με ένα δεσμευμένο όνομα από το οποίο θα διαβάζει Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Αριθμοί μονάδων I/O Αντίστοιχα μια δήλωση εκτύπωσης κανονικά αναμένει για την έξοδο προς την οθόνη, εκτός εάν το πρόγραμμα είναι σε λειτουργία batch, στην οποία περίπτωση ένα άλλο αρχείο δίσκου με ένα δεσμευμένο όνομα θα λαμβάνει τα αποτελέσματα Τέτοια αρχεία δίσκου είναι συνήθως κατάλληλα για αποθήκευση σε μια συσκευή εξόδου Το σύστημα θέτει αριθμούς σε αυτές τις προεπιλεγμένες μονάδες (Συνήθως 5 για είσοδο και 6 για έξοδο) Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Αριθμοί μονάδων I/O Εκτός από αυτές τις δύο ειδικές περιπτώσεις, όλες οι δηλώσεις I/O πρέπει να αναφέρονται ρητά σε μια μονάδα, προκειμένου να αναγνωριστεί η συσκευή στην οποία / από την οποία τα δεδομένα πρόκειται να μεταφερθούν Η μονάδα μπορεί να δοθεί σε μία από τις τρεις μορφές όπως φαίνεται στα ακόλουθα παραδείγματα τα οποία χρησιμοποιούν την πλήρη μορφή του read, με μονάδα u, και προσδιορισμό μορφής fmt, σε παρένθεση και διαχωρισμένο με ένα κόμμα, όπου fmt είναι μια προδιαγραφή μορφής που περιγράφτηκε στην προηγούμενη ενότητα: : read (u, fmt) list Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Μονάδες I/O: Μορφές αριθμών 1 Βαθμωτή ακέραια έκφραση που δίνει τον αριθμό της μονάδας : : read (4, (f103) ) q read (nunit, (f103) ) q read (4*i+j, 100) a 2 Αστερίσκος, για παράδειγμα : : read (*, (f103) ) q 3 Μια προεπιλεγμένη μεταβλητή τύπου χαρακτήρα, για την αναγνώριση ενός εσωτερικού αρχείου (βλέπε επόμενη ενότητα) Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Μορφοποίηση εισόδου Στις προηγούμενες ενότητες δόθηκε πλήρης περιγραφή των τρόπων μορφοποίησης και των αριθμών μονάδων, με τη χρήση απλουστευμένων μορφών των δηλώσεων read, print Υπάρχουν στην πραγματικότητα δύο μορφές της δήλωσης μορφοποίησης read Έτσι έχουμε χωρίς μονάδα τη μορφή read fmt [,list] ενώ με μονάδα τη μορφή Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Μορφοποίηση εισόδου Για την περίπτωση μονάδας με τη μορφή ισχύουν: u και fmt είναι η μονάδα και οι προδιαγραφές μορφής που είδαμε, iostat =, err =, end= είναι προαιρετικά προσδιοριστικά τα οποία επιτρέπουν στο χρήστη να καθορίσει τον τρόπο ανάκτησης ελέγχου κατά τις διάφορες περιπτώσεις σφαλμάτων, και list είναι μια λίστα των μεταβλητών ή λίστα τύπου do με καταλόγους των μεταβλητών Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Μορφοποίηση εισόδου Για την περίπτωση σφάλματος κατά την ανάγνωση στο Σχ 94 προβλέπεται ανάκτηση: Για περισσότερες λεπτομέρειες για τις παραμέτρους iostat, err, end δείτε την παρ 97 του βιβλίου Μία καλή πρακτική περιλαμβάνει κάποιο είδος της ανάκτησης ελέγχου σε περίπτωση σφάλματος σε όλες δηλώσεις read, οι οποίες περιλαμβάνoνται μόνιμα σε ένα πρόγραμμα Εναλλακτικά, είσοδος δεδομένων για τους σκοπούς δοκιμής γίνεται επαρκώς με την απλή μορφή της εντολής ανάγνωσης χωρίς αριθμό μονάδας και χωρίς σφάλματα ανάκτησης Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Μορφοποίηση εξόδου Υπάρχουν δύο τύποι μορφοποίησης εξόδου, με την δήλωση print που έχει εμφανιστεί σε πολλά από τα παραδείγματα μέχρι στιγμής και η δήλωση write, της οποίας η σύνταξη είναι παρόμοια με της read: print fmt [,list] και write ([unit=]u,[fmt=]fmt [,iostat=ios][,err=error-label]) [list] όπου όλα τα στοιχεία έχουν την ίδια σημασία όπως περιγράφονται για τη δήλωση ανάγνωσης read Ένα παράδειγμα μιας δήλωσης εγγραφής write είναι η εξής: write (nout, (10f103), iostat=ios, err=110) a Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Μορφοποίηση εξόδου Ένα παράδειγμα δίνεται στο Σχ 95, το οποίο ενσωματώνει μια σειρά χαρακτήρων από αριθμητικά στοιχεία και στοιχεία χαρακτήρων Η τελική σειρά χαρακτήρων θα μπορούσε να περάσει σε μία άλλη υπορουτίνα για την παραγωγή, για παράδειγμα, λεζάντας σε μια οθόνη γραφικών: Μετά την εκτέλεση της δήλωσης εγγραφής, η line θα περιέχει την ακολουθία χαρακτήρων: Takings for day 3 are 432915 dollars Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Εξωτερικά αρχεία δεδομένων Μέχρι στιγμής έχουμε συζητήσει το θέμα των εξωτερικών αρχείων (external files) με απλό τρόπο Στα παραδείγματα των διαφόρων δηλώσεων I/O, υπήρξε πάντα έμμεση παραδοχή ότι το καθορισμένο αρχείο ήταν πράγματι διαθέσιμο, και ότι οι εγγραφές (records) θα μπορούσαν να γραφτούν σε αυτό και να διαβαστούν από αυτό Προκειμένου να καθοριστεί ρητά και να ελεγχθεί η κατάσταση του εξωτερικού αρχείου, υπάρχουν τρεις σχετικές δηλώσεις με αρχεία: άνοιγμα (open), κλείσιμο (close) και ερώτηση ( inquire) Πριν από την έναρξη περιγραφής τους ωστόσο, δύο νέοι ορισμοί απαιτούνται Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Εξωτερικά αρχεία δεδομένων-ορισμοί Στη ορολογία της Fortran, ένα αρχείο λέγεται ότι υπάρχει όταν υπάρχει ως ένα αρχείο στο οποίο το πρόγραμμα θα μπορούσε να έχει πρόσβαση Με άλλα λόγια, εάν το πρόγραμμα δεν επιτρέπεται να χρησιμοποιεί το αρχείο λόγω της προστασίας με κωδικό πρόσβασης συστήματος, είτε επειδή δεν έχει γίνει κάποια άλλη αναγκαία ενέργεια, το αρχείο «δεν υπάρχει» Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων
Βιβλιογραφία M Metcalf, J Reid, M Cohen, Modern Fortran Explained, Oxford, 4th Edition, 2011 κεφάλαιο 9 Data transfer, κεφάλαιο 10 Operations on external files Γ Παπαλάμπρου - FORTRAN Μάθημα 5 (Μ5) Μεταφορά δεδομένων, είσοδος/έξοδος, εξωτερικά αρχεία δεδομένων