Επικοινωνία Προγράμματος Περιβάλλοντος ΕΠΛ031 Εισαγωγή στον Προγραμματισμό Επικοινωνία Προγράμματος Περιβάλλοντος Λογικές Μονάδες Μεταφορά εδομένων Μορφοποίηση εδομένων Νέαρχος Πασπαλλής Επισκέπτης Ακαδημαϊκός (Λέκτορας) Χειρισμός Αρχείων nearchos@cs.ucy.ac.cy Γραφείο #B120, Τηλ. ext. 2744 9-2 Λογικές Μονάδες Προκαθορισμένες μονάδες (συσκευές) Εισόδου: Πληκτρολόγιο Εξόδου: Οθόνη Άλλες μονάδες Εκτυπωτής Αρχεία 9-3 Περιοχές μόνιμου αποθηκευτικού μέσου (π.χ. σκληρός δίσκος, δισκέτα, κτλ), με συγκεκριμένο όνομα και διεύθυνση. Κάθε αρχείο αποτελείται από πεδία. Πεδίο Μια ακολουθία τιμών (π.χ. Μια γραμμή στην οθόνη), με τελευταίο πάντα το πεδίο EOF (end of file) Αρχεία ύο ειδών ιαδοχικής πρόσβασης Η πρόσβαση στα πεδία είναι διαδοχική Πρέπει να διαβαστούν ή να γραφούν τα πρώτα x για να διαβαστεί ή να γραφεί το x+1 Άμεσης πρόσβασης Άμεση πρόσβαση σε οποιοσδήποτε πεδίο Πρέπει να γνωρίζουμε την ακριβή θέση του Ο μεταγλωττιστής της FORTRAN θεωρεί όλες τις συσκευές εισόδου/εξόδου (περιλαβ. πληκτρολόγιο, οθόνη) ως αρχεία. 9-4 Πανεπιστήμιο Κύπρου 1
Ονόματα Αρχείων Όποιο όνομα θέλουμε εκτός από CON, USER οθόνη COM1, AUX, LINE 1η σειριακή θύρα (serial port) 9-5 COM2, COM3, COM4 σειριακές θύρες LPT1, PRN 1η θύρα εκτυπωτή (printer/parallel port) LPT2, LPT3, LPT4 θύρες εκτυπωτή NUL ιαγράφει ότι σταλεί ERR δίνει τη τιμή του σφάλματος Συνηθίζεται να δίνεται η προέκταση.dat. σε αρχεία δεδομένων π.χ. input.dat, output.dat, exercise.dat Μεταφορά Δεδομένων Είσοδος READ Έξοδος PRINT (μόνο στην οθόνη) WRITE Πλήρης μορφή σύνταξης READ (λίστα ελέγχου) [λίστα δεδομένων] WRITE (λίστα ελέγχου) [λίστα δεδομένων] Απλουστευμένη μορφή σύνταξης 9-6 READ μορφή [, λίστα δεδομένων] δδ ] PRINT μορφή [, λίστα δεδομένων] Λίστα ελέγχου: έστε Πίνακα 6-2 (σελ. 169) Λίστα δεδομένων: μεταβλητές, σταθερές, εκφράσεις, κτλ Μεταφορά Δεδομένων (συνέχεια) Απαραίτητα στοιχεία πρότασης εισόδου/εξόδου Πλήρη σύνταξη: μονάδα και μορφή Απλουστευμένη σύνταξη: μορφή (μορφοποίηση) ί Αν αντί για μονάδα βάλουμε *, τότε έχουμε τη προκαθορισμένη μονάδα Αν αντί για μορφή βάλουμε *, τότε έχουμε ελεύθερη σύνταξη μορφή π.χ. READ *, A, B, C PRINT *, A, B, C READ (*,*) A, B, C WRITE (*,*) A, B, C Read Σύνταξη: READ(a,b) μτβ1, μτβ2,... Το a δηλώνει από ποια μονάδα θα διαβάσουμε τα δδ δεδομένα. Για είσοδο από το πληκτρολόγιο λό a=5 ή a=*. Αν b=* η μορφή της ανάγνωσης καθορίζεται από τον τύπο του αντίστοιχου δεδομένου. Αν το b είναι ένας φυσικός αριθμός, τότε παραπέμπει σε εντολή FORMAT που καθορίζει την ακριβή μορφή ανάγνωσης. 9-7 μονάδα μορφή 9-8 Πανεπιστήμιο Κύπρου 2
Write Σύνταξη: WRITE(a,b) εκφρ1,εκφρ2,... Το a δηλώνει σε ποια μονάδα θα εκτυπώσουμε τα δδ δεδομένα. Για έξοδο στην οθόνη a=6 6 ή a=*. * Αν b=* η μορφή της εκτύπωσης καθορίζεται από τον τύπο του αντίστοιχου δεδομένου. Αν το b είναι ένας φυσικός αριθμός, τότε παραπέμπει σε εντολή FORMAT που καθορίζει ρζ την ακριβή μορφή εκτύπωσης. Μορφοποίηση Δεδομένων Μπορούμε να καθορίζουμε τη μορφή παρουσίασης των δεδομένων Παρουσίαση αριθμών στη σωστή θέση (π.χ. χ τύπωση πινάκων ανά γραμμή) Παρουσίαση συγκεκριμένου αριθμού δεκαδικών ψηφίων (π.χ. 3.14 αντί 3.14159) Παρουσίαση επιθυμητής τάξης μεγέθους (π.χ. password αντί για την λέξη password Εντολή FORMAT ετικέτα FORMAT (λίστα μορφοποιητών) ([FMT=] (λίστα μορφοποιητών) στη λίστα ελέγχου) Λίστα μορφοποιητών: Βλέπε Πίνακες 6-3 μέχρι 6-6 (σελ. 171 175) 9-9 9-10 Κάποιοι Μορφοποιητές Μορφοποιητής Πραγματικών αριθμών F8.2 Συνολικός αριθμός ψηφίων (συμπεριλ. υποδιαστολής και πρόσημου) Μορφοποιητής Ακέραιων αριθμών Συνολικός αριθμός ακέραιων ψηφίων Ι4.22 Αριθμός κλασματικών ψηφίων Μικρότερος αριθμός ακέραιων ψηφίων format Αν θέλουμε να καθορίσουμε ακριβώς τη μορφή της εισόδου/εξόδου των δεδομένων χρησιμοποιούμε την εντολή FORMAT που συντάσσεται ως εξής: FORMAT (ακολουθία περιγραφής) Η περιγραφή των συνηθέστερων τύπων δεδομένων δίνεται στον παρακάτω πίνακα Τύπος δεδομένων Περιγραφή ργρ Ακέραιος Πραγματικός Χαρακτήρας Iw Fw.d A 9-11 9-12 Πανεπιστήμιο Κύπρου 3
format όπου w είναι το ολικό μήκος του πεδίου και d είναι το πλήθος των ψηφίων μετά την υποδιαστολή (ακρίβεια). (Πρέπει w d + 3). Επίσης με nx μετακινούμαστε n θέσεις προς τα δεξιά (αφήνοντας n κενά). Η εντολή FORMAT είναι μη εκτελέσιμη και χρησιμοποιείται σε συνδυασμό με κάποια READ ή WRITE, οπότε μπροστά από τη FORMAT (μεταξύ των στηλών 1 και 5) πρέπει να υπάρχει μία ετικέτα που να τη συνδέει με την αντίστοιχη READ ή WRITE. Κάποιοι Μορφοποιητές (συνέχεια) Μορφοποιητής Αλφαριθμητικών εδομένων Α5 Μορφοποιητής Κενής Θέσης Νx Συνολικός αριθμός χαρακτήρων N κενές θέσεις 9-13 9-14 Παραδείγματα REAL ::num=18.2345 WRITE (*, (1x, The number is, F7.2) ) num ή WRITE (*, 100) num 100 FORMAT (1x, The number is, F7.2) WRITE (*, 200) num, INT(num) 200 FORMAT (1x, To akeraio meros tou, F7.2, 2x, einai, I3) Example PI = 3.141593 WRITE(*,10) The number pi is:,pi 10 FORMAT(2X,A,F5.2) θα τυπώσουμε στην οθόνη τη γραμμή: (2 spaces) The number pi is: (space) 3.14 CHARACTER:: word*2 = Hi WRITE (*, (1x, I said, A3) ) word 9-15 9-16 Πανεπιστήμιο Κύπρου 4
Μορφοποιητές Γενικά Θα τους μελετήσετε πιο προσεκτικά στο εργαστήριο Είναι δύσκολο να γίνουν κατανοητοί χωρίς πρακτική εξάσκηση Χειρισμός Αρχείων Μπορούμε να δημιουργήσουμε τις δικές μας λογικές μονάδες (αρχεία) για να αποθηκεύσουμε και να ανακτήσουμε δεδομένα Χρησιμοποιούνται τα READ, WRITE με: OPEN: Ανοίγει το αρχείο CLOSE: Κλείνει το αρχείο ENDFILE: Σηματοδοτεί το τέλος του αρχείου (EΟF) INQUIRE: ίνει τις ιδιότητες μιας μονάδας BACKSPACE: Επιστρέφει στο προηγούμενο πεδίο REWIND: Επιστρέφει στο πρώτο πεδίο του αρχείου 9-17 9-18 Γενική σύνταξη OPEN και CLOSE OPEN( [UNIT=] αριθμός [,ACCESS=πρόσβαση] [, ACTION=ενέργεια] [, BLANK=κενά] [, DELIM=οριοθέτης] [, ERR=ετικέττα ε έ α σφάλματος] [,FILE=όνομα] [FILE όοα][ [, FORM=φόρμα] [, ΙOSTAT=κατάσταση] [, PAD=] [, POSITION=θέση] [, RECL=μήκος πεδίου] [, STATUS=κατάσταση αρχείου] ) OPEN & CLOSE OPEN (10, data.dat ) CLOSE (10) CLOSE( [UNIT=] αριθμός [, ERR=ετικέτα έ σφάλματος] ] [, IOSTAT=κατάσταση] [, STATUS=κατάσταση αρχείου] ) έστε Πίνακα 6-7 (σελ. 180) 9-19 9-20 Πανεπιστήμιο Κύπρου 5
Open-Close ΕΙΣΟ ΟΣ - ΕΞΟ ΟΣ ΑΠΟ ΑΡΧΕΙΟ Πολλές φορές ο όγκος των δεδομένων που πρέπει να διαβαστούν από ένα πρόγραμμα είναι μεγάλος, επομένως η πληκτρολόγηση τους κάθε φορά που εκτελείται το πρόγραμμα είναι κουραστική ή και πρακτικά αδύνατη, και φυσικά υπάρχει μεγάλη πιθανότητα να γίνει κάποιο λάθος. Επίσης συχνά θέλουμε να διατηρήσουμε τα αποτελέσματα ενός προγράμματος είτε για μελέτη, είτε για πιθανή χρήση τους ως δεδομένα εισόδου από κάποιο άλλο πρόγραμμα Στις περιπτώσεις αυτές χρησιμοποιούμε αρχεία για την είσοδο ή έξοδο των δεδομένων. 9-21 Open-Close Τα αρχεία εισόδου/εξόδου που θα χρησιμοποιήσουμε θα πρέπει να τα συνδέσουμε μέσα στο πρόγραμμα με κάποιαμονάδα εισόδου/εξόδου a (βλ. READ, WRITE). H σύνδεση γίνεται με χρήση της εντολής ΟΡΕΝ. Σύνταξη: OΡΕΝ(a, FILE='arxeio') Ένα αρχείο που συνδέθηκε στο πρόγραμμα με την εντολή ΟΡΕΝ θα πρέπει να αποσυνδεθεί δθίαπό την μονάδα a με την εντολή CLOSE. Σύνταξη: CLOSE(a) 9-22 Open-Close Παρατήρηση: εν μπορείτε να συνδέσετε το ίδιο αρχείο σε δύο μονάδες, αν δεν το έχετε πρώτα αποσυνδέσει με την εντολή CLOSE. Επίσης, δεν μπορείτε να συνδέσετε δύο αρχεία στην ίδια μονάδα. Παράδειγμα 1 REAL ::a = 2.0, b = 3.0, c, d OPEN (10, FILE= data.dat ) WRITE (10,*) a, b REWIND (10) READ (10,*) c, d PRINT *, c, d CLOSE(10) Τυπώνεται (στην οθόνη): 2. 000000 3.000000 9-23 9-24 Πανεπιστήμιο Κύπρου 6
Παράδειγμα 2 REAL ::A(5,5), x, y, z INTEGER ::count OPEN (20, FILE= matrix.dat ) DO count = 1, 5 A(count, :) = REAL(count) WRITE(20, *) A(count, :) END DO REWIND(20) READ(20, *) x, y READ(20, *) z Τυπώνεται (στην οθόνη): PRINT *, x, y, z 1. 000000 1.000000 2.000000 CLOSE(20) 9-25 input.dat τη διάσταση n, ένα (n n) πίνακα Α και ένα (n 1) διάνυσμα Χ, να υπολογίζει το διάνυσμα ΑΧ και να το αποθηκεύει σ ένα αρχείο με όνομα output.dat C234567 PROGRAM MATVEC REAL A(30,30), X(30), S OPEN(1,FILE= input.dat ) READ(1,*) N DO 10 I=1,N READ(1,*) (A(I,J), J=1,N) 10 CONTINUE READ(1,*) (X(I), I=1,N) CLOSE(1) OPEN(2,FILE= output.dat ) WRITE(2,*) Το διάνυσμα είναι: DO 20 I=1,N S=0.0 DO 30 J=1,N S = S + A(I,J)*X(J) 30 CONTINUE WRITE(2,*) S 20 CONTINUE STOP END 9-26 Input.dat 3 0 0 1 0 1 0 2-1 -2 1 0-0.5 0 0 1 0 0 05 0.5 0 0 N=3 N=3 9-27 9-28 Πανεπιστήμιο Κύπρου 7
9-29 9-30 Περίληψη Επικοινωνία Προγράμματος Περιβάλλοντος Λογικές μονάδες Αρχεία, πεδία Μεταφορά δεδομένων READ, PRINT, WRITE Μορφοποίηση δεδομένων FORMAT Χειρισμός αρχείων OPEN, CLOSE, REWIND 9-31 Πανεπιστήμιο Κύπρου 8