Fortran και Αντικειµενοστραφής προγραµµατισµός.

Σχετικά έγγραφα
Είσοδος -Έξοδος. Άνοιγµα αρχείου:

Fortran και Αντικειμενοστραφής προγραμματισμός.

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

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

Κεφάλαιο 8ο: Αρχεία. 8.1 Τι είναι αρχείο;

Ει αγωγή η Fortran.

Μετατροπή χαρακτήρων ASCII σε ακέραιο αριθµό (atoi) & Άνοιγµα αρχείου µέσα από τo QtSPIM, διάβασµα, και αποθήκευση του περιεχοµένου του στη µνήµη

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

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

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

ΦΥΣ 145 Μαθηµατικές Μέθοδοι στη Φυσική. Πρόοδος 28 Μαρτίου 2009 Οµάδα 1 η

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

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

Εισαγωγή στη χρήση Η/Υ. Αναγνωστοπούλου Χριστίνα Λέκτορας

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

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

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

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

Fortran και Αντικειμενοστραφής προγραμματισμός.

Αρχεία Ένα αρχείο αποτελείται από μία σειρά ομοειδών δεδομένων που ονομάζονται λογικές εγγραφές (logical record)

Το πλήθος των δεικτών και οι µεγαλύτερες τιµές που µπορούν να πάρουν ορίζεται µε µία δηλωτική εντολή που λέγεται Dimension.

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

8 FORTRAN 77/90/95/2003

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΚΑΙ ΕΦΑΡΜΟΣΜΕΝΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΦΥΣΙΚΗΣ ΦΥΣ 145: Υπολογιστικές Μέθοδοι στη Φυσική Εαρινό Εξάµηνο 2019

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

Ενότητα 1 Διάλεξη 4. Προγραμματισμός με Εφαρμογές στην Επιστήμη του Μηχανικού. Σιέττος Κωνσταντίνος

Πίνακες. (i) FORTRAN και Αντικειµενοστραφής Προγραµµατισµός

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

ΦΥΣ Διαλ.03. Ø Εντολές ελέγχου και λογικής. Ø Εντολές µεταφοράς. Ø Βρόγχοι επανάληψης εντολών. Ø Βρόγχοι επανάληψης µε λογικές σχέσεις

Περιεχόµενα. Ανασκόπηση - Ορισµοί. Ο κύκλος ανάπτυξης προγράµµατος. Γλώσσες Προγραµµατισµού Ασκήσεις

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

Εισαγωγή στον Προγραμματισμό Η/Υ για Χημικούς Μηχανικούς

Κεφάλαιο 5ο: Εντολές Επανάληψης

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

Μετατροπή χαρακτήρων ASCII σε αριθμό (atoi) & διάβασμα, και αποθήκευση του περιεχομένου του στη μνήμη. (Διάλεξη. Πανεπιστήμιο Κύπρου

Διαφάνειες παρουσιάσεων Αρχικές Διαφάνειες σε Pascal: Σ.Ζάχος, Ν.Παπασπύρου Προσαρμογή σε Fortran: Α.Παγουρτζής, Δ.Σούλιου

Μονοδιάστατοι πίνακες

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

Μορφοποίηση της εξόδου

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

Κεφάλαιο 4ο: Εντολές επιλογής

Πρόβληµα : Πώς θα λύναµε αυτό το πρόβληµα αν είχαµε µόνο χαρτί και µολύβι, και κάποιος µας έλεγε τους αριθµούς προφορικά?

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Διδάσκουσα Δρ Β.

ΚΕΦΑΛΑΙΟ 4ο. Α. Το περιβάλλον της Microsoft Fortran Powerstation

ΑΡ Χ Ε Ι Α Κ Ε Ι Μ Ε Ν Ο Υ (text files)

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

Τμήμα Φυσικής Πανεπιστημίου Κύπρου Εαρινό Εξάμηνο 2015/2016. ΦΥΣ145 Υπολογιστικές Μέθοδοι στην Φυσική

IMPLICIT NONE INTEGER :: a, b, c

Ενότητα 3: «Εισαγωγή στην Αλγοριθμική και στον Προγραμματισμό: loops, subroutines, tables»

Ο τελεστής ανάθεσης και οι εντολές εισόδουεξόδου

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

Ενότητα 1 Διάλεξη 3. Προγραμματισμός με Εφαρμογές στην Επιστήμη του Μηχανικού. Σιέττος Κωνσταντίνος

ιαφάνειες παρουσίασης #5

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 24/3/2007

Κεφάλαιο VΙ: Προσπέλαση Αρχείων. 5.1 Αρχεία δεδομένων.

Άσκηση 1. Α. Υπολογίστε χωρίς να εκτελέσετε κώδικα FORTRAN τα παρακάτω: Ποιά είναι η τελική τιμή του Z στα παρακάτω κομμάτια κώδικα FORTRAN:

ιδάσκων: ηµήτρης Ζεϊναλιπούρ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 10 : Εντολές επιλογής και αποφάσεων

Work12 REMARKS script file lab10 ask1-5 tabbing, ls2, urlparse, times, dates_correct

C Programming EPL032 Maria Stavrinou Ioannou Εισαγωγή στη Γλώσσα C

Χρονικές σειρές 8 o μάθημα: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΤΗ MATLAB (2)

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

ΕΙ ΑΓΩΓΉ ΣΗΝ FORTRAN

ΜΑΘΗΜΑ 2, Έλεγχος ροής προγράμματος ΒΑΣΙΚΗ ΣΥΝΤΑΞΗ:

Αρχεία κειμένου και η VB.NET

- program p_name(input) - uses crt

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. ( ιάλεξη 13) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Μεθόδων Επίλυσης Προβλημάτων

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Προγραμματισμός Ι. Ενότητα 12 : Ασκήσεις Επανάληψης Β. Αλέξανδρος Τζάλλας

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

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 11/3/2006

ιαφάνειες παρουσίασης #4

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

ΑΣΚΗΣΗ 3: ΠΡΟΤΑΣΕΙΣ, ΕΚΦΡΑΣΕΙΣ ΚΑΙ ΤΕΛΕΣΤΕΣ

ΚΕΦΑΛΑΙΟ 9 ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ

Μονοδιάστατοι πίνακες

Κεφάλαιο 12: Είσοδος και έξοδος δεδομένων σε αρχεία

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

Παράδειγμα #5 EΠΙΛΥΣΗ ΜΗ ΓΡΑΜΜΙΚΩΝ ΑΛΓΕΒΡΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΜΕ ΜΕΘΟΔΟ NEWTON ΕΠΙΜΕΛΕΙΑ: Ν. Βασιλειάδης. ( k ) ( k)

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΚΑΙ ΕΦΑΡΜΟΣΜΕΝΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΦΥΣΙΚΗΣ ΦΥΣ 145: Υπολογιστικές Μέθοδοι στη Φυσική Εαρινό Εξάµηνο 2019

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

Πίνακες. (i) FORTRAN και Αντικειµενοστραφής Προγραµµατισµός

ΦΥΣ 145 Μαθηµατικές Μέθοδοι στη Φυσική. Πρόοδος 20 Μαρτίου 2011 Οµάδα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Κανονική εξέταση, Φεβρουάριος 2005

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 5 - Editor

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

EΒ ΟΜΑ Α 4 Η. οµές επανάληψης while και do while

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

Εισαγωγή στον Προγραμματισμό Η/Υ (Fortran 90/95/2003)

Λογικό "και" (AND) μας επιστρέφει 1 αν και οι δύο operands είναι όχι μηδέν, διαφορετικά 0)

ΦΥΣ 145 Υπολογιστικές Μέθοδοι στη Φυσική. Πρόοδος 26 Μαρτίου 2007 Ομάδα 1 η

Πως θα αποθηκεύσει τη λίστα με τα ψώνια του και θα την ανακτήσει στο Σ/Μ; και πως θα προσθέσει στη λίστα του επιπλέον προϊόντα;

ΦΥΣ 145 Λύσεις Ενδιάμεσης Εξέτασης Χ. Παναγόπουλος 12/3/2015

Εισαγωγή στον Προγραμματισμό Python Μάθημα 3: πίνακες και βρόγχος επανάληψης for (για) Νοέμβριος 2014 Χ. Αλεξανδράκη, Γ.

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

ΚΥΠΡΙΑΚΟΣ ΣΥΝΔΕΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY 21 ος ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Δεύτερος Γύρος - 30 Μαρτίου 2011

Transcript:

Fortran και Αντικειµενοστραφής προγραµµατισµός www.corelab.ntua.gr/courses/fortran_naval/naval δάσκοντες: ΆρηςΠαγουρτζής (pagour@cs.ntua.gr) (Επίκουρος Καθηγητής ΣΗΜΜΥ ) ώρασούλιου (dsouliou@mail.ntua.gr) (Ε ΙΠ ΣΗΜΜΥ) 7η ενότητα Είσοδος Έξοδος Άνοιγµα αρχείου Κλείσιµο αρχείου ιάβασµα από αρχείο Γράψιµο σε αρχείο 1

Είσοδος Έξοδος (1) Άνοιγµα αρχείου: open (unit = αριθµός, file = "όνοµα_αρχείου") Αριθµός: θετικός ακέραιος (εκτός του 6) µε τον οποίο αναφερόµαστε στο αρχείο Όνοµα αρχείου: το όνοµα του αρχείου (καλύτερα µε όλο το path) open (unit = 3, file = "dedomena") open (unit = 1, file = "a:keimeno.txt") open (11, file = "c:\\fortran\\data\\bathmoi.dat") Κλείσιµο αρχείου: close (αριθµός) close (11) 2

Είσοδος Έξοδος (2) ιάβασµα από αρχείο: read (αριθµός, µορφοποιητής) ορίσµατα read (7,*) a, b read (7,5) n, x, y 5 format (i3,f4.1,f5.2) Γράψιµο σε αρχείο: write (αριθµός, µορφοποιητής) ορίσµατα write (3,*) "Oi lyseis einai ", x, " and ", y write (3,5) "Oi lyseis einai ", x, " and ", y 5 format (a,f14.5,a,f14.5) 3

ΑριθµόςΜονάδας Αριθµός Μονάδας είναι ο ακέραιος αριθµός ή η ακέραια έκφραση που αντιστοιχούµε στις συσκευές από τις οποίες διαβάζονται ή στις οποίες γράφονται τα δεδοµένα. Στα περισσότερα συστήµατα το πληκτρολόγιο και η οθόνη έχουν έναν προκαθορισµένο αριθµό µονάδας (συνήθως 5 για το πληκτρολόγιο και 6 για την οθόνη) Έτσι όταν γράφουµε read(*,*) είναι το ίδιο µε το read*, ή read(5,*) ή read(unit=*,fmt=*) write(*,*) είναι το ίδιο µε το print* ή write(unit=*,fmt=*) 4

Είσοδος Έξοδος : παράδειγµα program diairetes! To programma vriskei tous diairetes enos arithmou! kai tous grafei sto arxeio 'diairetes.dat'. integer n, k, d(10) open (unit = 1, file = "diairetes.dat") print *, "Dwse thetiko akeraio :" read (*,*) n write (1,*) "Oi diairetes tou ", n, "einai :" k = 0 do i = 1, n if (mod(n,i) == 0) then k = k + 1 d(k) = i end if end do write (1,*) (d(j), j = 1, k) close (1) print *, "Oi diairetes vriskontai sto arxeio 'diairetes.dat'" end 5

Αρχικοποίησηαρχείων Αρχικοποίηση ενός αρχείου είναι η δηµιουργία και το άνοιγµα όταν πρόκειταιγιανέοαρχείοήτοάνοιγµαανπρόκειταιγιααρχείοπου υπάρχει ήδη. open(unit=unit_number, λίστα επιλογών) Η λίστα επιλογών µπορεί να είναι αρκετά εκτεταµένη αλλά συνήθως περιλαµβάνειτοόνοµατουαρχείου, το status µετιµές old, new, replace, το formµετιµές formatted, unformatted, το access µετιµές read, write, readwrite και καθορίζει αν το αρχείο θα συνδεθεί µε µορφοποιηµένη ή µη είσοδο/έξοδο Αντοαρχείοάνοιξεσωστάστηνεπιλογή IOSTAT έχωτηντιµή 0. Τα αρχεία κλείνουν αυτόµατα µετά το τέλος του προγράµµατος αλλά προεραιτικάχρησιµοποιείταιηεντολή close close(unit=unit_number, λίστα επιλογών) Η λίστα επιλογών εδώ είναι πολύ µικρότερη 6

Έξοδοςσεαρχείο:παράδειγµα program exodos_se_arxeio implicit none integer :: unit_number=12, in_out_status real, dimension(5) :: dianysma=(/1.1, 2.2, & 3.3, 4.4, 5.5 /) open(unit=unit_number, file='eisodos_exodos.txt', & status='replace', action='write', iostat=in_out_status) write(*,*) in_out_status if (in_out_status==0) then write(unit_number, '(5f10.5)') & dianysma close(unit_number) else print '(a70)', 'sfalma den anoigei & to arxeio' end if END program 1.10000 2.20000 3.30000 4.40000 5.50000 7

Program ReadFILE implicit none integer :: i,small(5), big(15),unit_number open(unit=unit_number,file='----.txt',access='sequential',& status='old') write(*,*) write(*,'(6x,a)') "Reading less than a record " write(*,'(6x,a)') "===========================" DΟ i=1,3 read(unit_number, *) SMALL write(unit=*, fmt='(6x,5i4)' ) SMALL rewind (unit=unit_number) write(*,*) write(*,'(6x,a)') "Reading more than a record " write(*,'(6x,a)') "===========================" DΟ i=1,3 read(unit_number, *) BIG write(unit=*, fmt='(6x,15i4)' ) BIG rewind (unit=unit_number) END 8

To αρχείο εισόδου : 11 12 13 19 21 22 23 29 31 32 33 39 41 42 43 49 51 52 53 59 61 62 63 69 71 72 73 79 81 82 83 89 91 92 93 99 Στην έξοδο τυπώνεται: Reading less than a record =========================== 11 12 13 14 15 21 22 23 24 25 31 32 33 34 35 Reading more than a record =========================== 11 12 13 14 15 16 17 18 19 21 22 23 24 25 26 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 51 52 53 54 55 56 57 58 59 61 62 63 64 65 66 9

!διάβασµα από αρχείο χωρίς µορφοποίηση, εκτύπωση σε αρχείο Program ReadWriteFILE implicit none integer :: i,small(5), big(15),unit_number1,unit_number2 unit_number1=10 unit_number2=15 open(unit=unit_number1,file='readfile.txt',access='sequential',status='old' open(unit=unit_number2,file='writefile.txt',access='sequential',status='new write(unit_number2,*) write(unit_number2,'(6x,a)') "1 Reading less than a record & (list-directed):" write(unit_number2,'(6x,a)') "===============================" DΟ i=1,3 read(unit_number1, *) SMALL write(unit_number2, fmt='(6x,5i4)' ) SMALL rewind (unit_number1) write(unit_number2,*) write(unit_number2,'(6x,a)') "2 Reading more than a record & (list-directed):" write(unit_number2,'(6x,a)') "================================" DΟ i=1,3 read(unit_number1, *) BIG write(unit_number2, fmt='(6x,15i4)' ) BIG rewind (unit_number1) END 10

1 Reading less than a record (list-directed): =============================== 11 12 13 14 15 21 22 23 24 25 31 32 33 34 35 2 Reading more than a record (list-directed): ================================ 11 12 13 14 15 16 17 18 19 21 22 23 24 25 26 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 51 52 53 54 55 56 57 58 59 61 62 63 64 65 66 11

Program ReadFILE2 implicit none integer :: i,small(5), big(15),unit_number1,unit_number2 open(unit=unit_number1,file='readfile.txt',access='sequential', & status='old',form='formated') write(*,*) write(*,'(6x,a)') "1 Reading less than a record (formatted):" write(*,'(6x,a)') "=============================" DΟ i=1,3 read(unit_number1, FMT='(5I4)') SMALL write(*, fmt='(6x,5i4)' ) SMALL rewind (unit_number1) write(*,*) write(*,'(6x,a)') "2 Reading less than a record (list-directed):" write(*,'(6x,a)') "===============================" DΟ i=1,3 read(unit_number1, *) SMALL write(*, fmt='(6x,5i4)' ) SMALL rewind (unit_number1) 12

write(*,*) write(*,'(6x,a)') "3 Reading more than a record (formatted):" write(*,'(6x,a)') "==============================" DΟ i=1,3 read(unit_number1, FMT='(15I4)') BIG write(*, fmt='(6x,15i4)' ) BIG rewind (unit_number1) write(*,*) write(*,'(6x,a)') "4 Reading more than a record (list-directed):" write(*,'(6x,a)') "================================" DΟ i=1,3 read(unit_number1, *) BIG write(*, fmt='(6x,15i4)' ) BIG rewind (unit_number1) END 13

1 Reading less than a record (formatted): ============================ 11 12 13 14 15 21 22 23 24 25 31 32 33 34 35 2 Reading less than a record (list-directed): ============================= 11 12 13 14 15 21 22 23 24 25 31 32 33 34 35 3 Reading more than a record (formatted): ============================= 11 12 13 14 15 16 17 18 19 0 0 0 0 0 0 21 22 23 24 25 26 27 28 29 0 0 0 0 0 0 31 32 33 34 35 36 37 38 39 0 0 0 0 0 0 4 Reading more than a record (list-directed): =============================== 11 12 13 14 15 16 17 18 19 21 22 23 24 25 26 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 51 52 53 54 55 56 57 58 59 61 62 63 64 65 66 14

PROGRAM create_new_file IMPLICIT NONE CHARACTER(20), DIMENSION(2) :: FILE INTEGER, DIMENSION(2) :: OPENSTATUS CHARACTER(20), DIMENSION(1) :: STUDENTNAME INTEGER :: INPUTSTATUS, STUDENTNUMBER INTEGER :: GPA INTEGER :: I!Diavase ta onomata arxeiwn pou dinei o xrhshts WRITE(*,*) "ENTER THE FILENAME AND THE PRODUCED FILE" READ *, FILE!arxeio me dedomena create_new_file1.txt!arxeio gia eggrafi apotelesmatwn create_new_file2.txt OPEN (UNIT=10, FILE=FILE(1), STATUS="OLD", ACTION="READ", & POSITION ="REWIND", ACCESS="SEQUENTIAL", IOSTAT=OPENSTATUS(1)) IF (OPENSTATUS(1) >0) THEN WRITE(*,*) "*** FILE #", 1, "CAN NOT BE OPENED ***" STOP END IF OPEN (UNIT=30, FILE=FILE(2),STATUS="REPLACE", ACTION="WRITE",& ACCESS="SEQUENTIAL",IOSTAT=OPENSTATUS(2)) Τιµές του IOSTAT 0 ανδενυπάρχεισφάλµακαιδενέχουµεφτάσειστοτέλοςτουαρχείου >0 αν υπάρχει σφάλµα <0 αν έχουµε FORTRAN φτάσει στο και Αντικειµενοστραφής τέλος του αρχείουπρογραµµατισµός 15

IF (OPENSTATUS(2) >0) THEN WRITE(*,*) "*** FILE #", 2, "CAN NOT BE OPENED ***" STOP END IF!Diavase kathe eggrafi kai typwse th DO READ (UNIT=10, FMT=100, IOSTAT=INPUTSTATUS) STUDENTNUMBER, & STUDENTNAME, GPA IF (INPUTSTATUS >0) THEN WRITE(*,*) "*** INPUT ERROR***" END IF IF (INPUTSTATUS<0) THEN WRITE(*,*) "End of input file" EXIT ELSE WRITE(30, FMT=100) STUDENTNUMBER, STUDENTNAME, GPA & 100 FORMAT (I5, 1X, A, 1X, I5) END IF PRINT * PRINT *, "FILE WRITING IS COMPLETE" END PROGRAM create_new_file 16

PROGRAM create_new_file2!anoigei arxeio me code name vathmo_ptyxiou etos kai ta grafei se!neo kai ypologizei meso oro ana etos kai megalutero ana etos IMPLICIT NONE CHARACTER(20), DIMENSION(2) :: FILE INTEGER, DIMENSION(2) :: OPENSTATUS CHARACTER(20), DIMENSION(1) :: STUDENTNAME INTEGER :: INPUTSTATUS, STUDENTNUMBER, ETOS INTEGER, DIMENSION(5) :: A,D,B!pinakes gia meso oro, plhthos, INTEGER :: GPA INTEGER :: I!Diavase ta onomata arxeiwn pou dinei o xrhshts WRITE(*,*) "ENTER THE FILENAME AND THE PRODUCED FILE" READ *, FILE!onoma arxeiou me dedomena file.txt!onoma arxeiou gia eggrafi apotelesmatwn...txt OPEN (UNIT=10, FILE=FILE(1), STATUS="OLD", ACTION="READ", & POSITION ="REWIND", ACCESS="SEQUENTIAL", IOSTAT=OPENSTATUS(1)) A=0 B=0 D=0 IF (OPENSTATUS(1) >0) THEN WRITE(*,*) "*** FILE #", 1, "CAN NOT BE OPENED ***" STOP END IF 17

OPEN (UNIT=30, FILE=FILE(2),STATUS="REPLACE", ACTION="WRITE", & ACCESS="SEQUENTIAL", IOSTAT=OPENSTATUS(2)) IF (OPENSTATUS(2) >0) THEN WRITE(*,*) "*** FILE #", 2, "CAN NOT BE OPENED ***" STOP END IF DO!Diavase kathe eggrafi kai typwse th READ (UNIT=10, FMT=100, IOSTAT=INPUTSTATUS) STUDENTNUMBER, & STUDENTNAME, GPA, ETOS IF (INPUTSTATUS >0) THEN WRITE(*,*) "*** INPUT ERROR***" END IF IF (INPUTSTATUS<0) THEN WRITE(*,*) "End of input file" EXIT ELSE IF (B(ETOS)<GPA) THEN ; B(ETOS)=GPA ; END IF A(ETOS)=A(ETOS)+GPA D(ETOS)=D(ETOS)+1 WRITE(30, FMT=100) STUDENTNUMBER, STUDENTNAME, GPA, & ETOS 100 FORMAT (I5, 1X, A, 1X, I5, 1X, I1) END IF 18

A=A/D WRITE(*,*) "O pinakas meswn wrwn einai", A WRITE(*,*) "O pinakas megistwn einai", B WRITE(*,*) "O pinakas foithtvn ana etos einai", D PRINT * PRINT *, "FILE WRITING IS COMPLETE" END PROGRAM create_new_file2 19

PROGRAM MERGING_FILES IMPLICIT NONE CHARACTER(20), DIMENSION(3) :: FILE INTEGER, DIMENSION(3) :: OPENSTATUS CHARACTER(20), DIMENSION(2) :: STUDENTNAME INTEGER, DIMENSION(2) :: INPUTSTATUS, STUDENTNUMBER REAL, DIMENSION(2) :: GPA INTEGER :: I! ιάβασε τα ονόµατα των αρχείων και άνοιξέ τα PRINT *, ENTER THE FILENAMES TO BE MERGED & AND THE PRODUCED FILE. READ *, FILE DO I=1,2 OPEN (UNIT=10*I, FILE=FILE(I), STATUS= OLD, & ACTION= READ, POSITION = REWIND, & ACCESS= SEQUENTIAL, IOSTAT=OPENSTATUS(I)) OPEN (UNIT=30, FILE=FILE(3),STATUS= NEW,& ACTION= WRITE,ACCESS= SEQUENTIAL,& IOSTAT==OPENSTATUS(3)) DO I=1,3 IF (OPENSTATUS(I) >0) THEN PRINT *, *** FILE #, I, CAN NOT BE OPENED *** STOP END IF 20

! ιάβασε την πρώτη εγγραφή από κάθε αρχείο DO I=1,2 READ (UNIT=10*I, FMT=100, IOSTAT=INPUTSTATUS(I))& STUDENTNUMBER(I), STUDENTNAME(I), GPA(I) IF (INPUTSTATUS(I) >0) STOP *** INPUT ERROR*** 100 FORMAT (I5, 1X, A, F4.2)!Αν δεν έχει τελειώσει ούτε το ένα (FILE(1)) ούτε το άλλο αρχείο (FILE(2)) συνέχισε DO IF(INPUTSTATUS(1)<0.OR. INPUTSTATUS(2)<0) EXIT!IF AT THE END OF EITHER FILE TERMINΑTE THE REPETITION!OTHERWISE CONTINUE IF(STUDENTNUMBER(1)< STUDENTNUMBER(2)) THEN I=1 ELSE I=2 END IF WRITE(UNIT=30, FMT=100) STUDENTNUMBER(I), STUDENTNAME(I),& GPA(I) READ (UNIT=10*I, FMT=100, IOSTAT=INPUTSTATUS(I))& STUDENTNUMBER(I), STUDENTNAME(I), GPA(I) 21

!Αν έχουν αποµείνει εγγραφές σε κάποιο από τα δύο αρχεία αντέγραψέ τες στο τρίτο αρχείο DO I=1,2 DO IF (INPUTSTATUS(I)<0) EXIT WRITE(UNIT=30, FMT=100) STUDENTNUMBER(I), & STUDENTNAME(I), GPA(I) READ (UNIT=10*I, FMT=100, IOSTAT=INPUTSTATUS(I))& STUDENTNUMBER(I), STUDENTNAME(I), GPA(I) PRINT * PRINT *, "FILE MERGING IS COMPLETE" END PROGRAM MERGING FILES 22