Αναγνωστοπούλου Χριστίνα Λέκτορας
FORmulaTRANslation
Εγκατάσταση της Fortran g95 http://www.g95.org http://ftp.g95.org/g95-mingw.exe Save file as C:\fortran-g95
Κειμενογράφοι Notepad (Windows) Programmer s Notepad http://sourceforge.net/project/showfiles.php?group_id=45545 Editplus http://www.editplus.com
Ταξινόμηση αρχείων Πρόγραμμα <όνομα>.f95 Δεδομένα <όνομα>_data.txt Αποτελέσματα <όνομα>_res.txt
Παράδειγμα Πρόγραμμα askisi1.f95 Δεδομένα askisi1_data.txt Αποτελέσματα askisi1_res.txt
ΤΟ ΑΛΦΑΒΗΤΟ ΤΗΣ FORTRAN Τα 26 γράμματα του Λατινικού αλφαβήτου (κεφαλαία ή μικρά) Τα 10 ψηφία του δεκαδικού συστήματος ΠΡΟΣΟΧΗ Τα ειδικά σύμβολα: Όχι ελληνικούς χαρακτήρες! # $ % & ( ) * + - / >. ; ; < = \ [ ] ^ { }?,`
Κανόνες γραφής προγράμματος fortran 95 Ελεύθερη γραφή Γραφή σε σταθερή μορφή
Γραφή σε σταθερή μορφή Στήλες 1-5. Γράφονται οι αριθμοί των εντολών (LABELS) που είναι ακέραιοι θετικοί ή παραμένουν κενές Στήλη 6. Εάν περιέχει οποιοδήποτε άλλο σύμβολο πλην του κενού ή του μηδενός, θεωρείται συνέχεια της προηγουμένης εντολής. Στήλες 7-72. Περιέχουν την εντολή. Στήλες 73-80. Παραμένουν κενές ή φέρουν αρίθμηση των γραμμών. Στήλη 1. Αν στην θέση αυτή υπάρχει το «!» τότε το υπόλοιπο αποτελεί σχόλιο και όχι εντολή
Δημιουργία προγράμματος Notepad.. program askisi1!=================================! file name:askisi1.f95!================================= real a, b, sum_ab!data a=12.9 b=-4.5!ypologismos sum_ab=a+b!eggrafi write(6,*) "a=",a,"b=", b write(6,*) "sum=", sum_ab!----- end program askisi1
Αποθήκευση προγράμματος File -> Save as Save in -> fortran-g95 File name: <όνομα>.f95 Save as type: All files Encoding: ANSI
Μεταγλώττιση προγράμματος Μετάφραση Compiler : μεταγλωττιστής g95 c<όνομα>.f95 Εκτέλεση προγράμματος executable : εκτελέσιμο πρόγραμμα g95 <όνομα>.f95 a.exe g95 <όνομα>.f95 -o <όνομα>.exe
Ενεργοποίηση της g95 C:\\Command Prompt Start =>Programs=>Accessories=>Command Prompt C:\...\cd c:\fortran-g95 C:\fortran-g95> C:\fortran-g95>g95 askisi1.f95 o askisi1.exe
Κεφάλαιο 2 Αναγνωστοπούλου Χριστίνα Λέκτορας
Τα Δεδομένα στη FORTRAN Numbers-Αριθμοί Strings χαρακτήρες / συμβολοσειρές
Τα Δεδομένα στη FORTRAN ΑΡΙΘΜΟΙ (Νumbers) Ακέραιοι (Integer) Κινητής υποδιαστολής (Floating point) Απλής ακριβείας (Single precision) Διπλής ακριβείας (Double precision) Μιγαδικοί (Complex) Απλής ακριβείας (Single precision) Διπλής ακριβείας (Double precision) ΣΥΜΒΟΛΟΣΕΙΡΕΣ (Strings)
Αριθμοί στη FORTRAN Μέγεθος του αριθμού Αριθμοί Σημαντικά ψηφία
Μέγεθος Αριθμού Ακέραιοι αριθμοί (Integer): 128 έως και +127 32768 έως και +32767 μικρού μεγέθους ακέραιοι μεσαίου μεγέθους ακέραιοι 2147483648 έως και +2147483647 μεγάλου μεγέθους ακέραιοι Πραγματικοί αριθμοί (Real) Τα όρια για τους πραγματικούς αριθμούς είναι: Από -3,4028235x10 +38 έως και 1,754944x10-38 Από +1,754944x10-38 (αρνητικοί αριθμοί) έως και +3,4028235x10 +38 (θετικοί αριθμοί)
Σημαντικά ψηφία Για τους ακέραιους: Όλα τα ψηφία του αριθμού εκτός από τα τυχόν μηδενικά που υπάρχουν εμπρός από το πρώτο μη μηδενικό ψηφίο ή τα μηδενικά μετά από το τελευταίο μη μηδενικό ψηφίο μετά την υποδιαστολή. Για τους πραγματικούς: Παράδειγμα -120400 6 σημαντικά ψηφία 002240 10 σημαντικά ψηφία 7 σημαντικά ψηφία 4 σημαντικά ψηφία 0,000246083 6 σημαντικά ψηφία 04,001807600 8 σημαντικά ψηφία
Παράσταση ακεραίων αριθμών 123 +3258-659
Παράσταση αριθμών κινητής υποδιαστολής απλής ακριβείας 13.0148 +14.851-325.253 0.589.81 -.532 6.14Ε-01 = 6.14x10-1 -8.22E16 = -8.22x10 16
Παράσταση αριθμών κινητής υποδιαστολής διπλής ακριβείας 13.0148 +14.851-325.253 0.589.81 -.532 6.14D-01 = 6.14x10-1 -8.22D16 = -8.22x10 16
ΚΑΤΗΓΟΡΙΕΣ ΜΕΤΑΒΛΗΤΩΝ Τι είναι μεταβλητή; Μεταβλητή ή μεταβλητές είναι οι τιμές των συμβολικών ονομάτων που αλλάζουν ή μπορούν να αλλάξουν μέσα σε ένα πρόγραμμα Αριθμητικές μεταβλητές Απλές Με δείκτη Μεταβλητές συμβολοσειρών Απλές Με δείκτη
ΚΑΝΟΝΕΣ ΟΝΟΜΑΣΙΑΣ ΤΩΝ ΜΕΤΑΒΛΗΤΩΝ Πρέπει να αρχίζουν με γράμμα. Να μην περιέχει ειδικά σύμβολα. Εξαιρείται το σύμβολο της υπογράμμισης (π.χ ab_c). Να έχει ορισμένο πλήθος χαρακτήρων. Ένα πλήθος συνήθως 6 είναι αποδεκτό από όλους τους υπολογιστές. Να μην περιέχει γράμμα του Ελληνικού αλφαβήτου. Κενά μεταξύ των χαρακτήρων των μεταβλητών δεν επιτρέπονται.
ΔΗΛΩΤΙΚΕΣ ΕΝΤΟΛΕΣ Δηλωτικές εντολές είναι οι εντολές που καθορίζουν το είδος των μεταβλητών και τις διαστάσεις των πινάκων που χρησιμοποιούνται σε ένα πρόγραμμα
ΔΗΛΩΤΙΚΕΣ ΕΝΤΟΛΕΣ Δηλωτικές εντολές αριθμητικών μεταβλητών integer real double precision implicit Δηλωτικές εντολές μεταβλητών συνβολοσειρών CHARACTER Δηλωτικές εντολές πινάκων integer real dimension
ΔΗΛΩΤΙΚΕΣ ΕΝΤΟΛΕΣ Αριθμητικών μεταβλητών-ακέραιοι Εντολή : integer*1 integer(1) integer(kind=1) integer*2 integer(2) integer(kind=2) integer*4 integer(4) integer(kind=4) integer για μικρούς ακέραιους αριθμούς για μεσαίους ακέραιους αριθμούς για μεγάλους ακέραιους αριθμούς
ΔΗΛΩΤΙΚΕΣ ΕΝΤΟΛΕΣ Αριθμητικών μεταβλητών-πραγματικοί Εντολή για μεταβλητές πραγματικών αριθμών: real real*4 real(4) real (kind=4) Εντολή για μεταβλητές διπλής ακρίβειας: real*8 real(8) real (kind=8) double precision
ΚΑΝΟΝΕΣ ΟΝΟΜΑΣΙΑΣ ΑΡΙΘΜΗΤΙΚΩΝ ΜΕΤΑΒΛΗΤΩΝ Ακέραιες μεταβλητές Εάν ο πρώτος χαρακτήρας είναι ένας από τους: I, J, K, L, M, N Πραγματικές μεταβλητές απλής ή διπλής ακριβείας: Εάν αρχίζουν με οποιονδήποτε άλλον χαρα-κτήρα, πλην των παραπάνω.
ΔΗΛΩΤΙΚΕΣ ΕΝΤΟΛΕΣ Αριθμητικών μεταβλητών Εντολή : IMPLICIT Παράδειγμα: IMPLICIT REAL (I-L) Ενέργεια: Θεώρησε ως πραγματικές μεταβλητές όλες όσες αρχίζουν με τα γράμματα I, J, K και L. Θέση: Στην αρχή του προγράμματος και πριν από κάθε άλλη δηλωτική εντολή.
ΔΗΛΩΤΙΚΕΣ ΕΝΤΟΛΕΣ Αριθμητικών μεταβλητών Εντολή : implicit none Ενέργεια: Ακύρωση του κανόνα «πρώτου γράμματος». Η ύπαρξη της όμως απαιτεί όλες οι μεταβλητές του προγράμματος να δηλωθούν Θέση: Στην αρχή του προγράμματος και πριν από κάθε άλλη δηλωτική εντολή.
ΔΗΛΩΤΙΚΕΣ ΕΝΤΟΛΕΣ Μεταβλητών συμβολοσειρών Εντολή : Character*n μ1, μ2,...μν Character μ1* n1, μ2* n2,...μν* nν Character (len=n):: μ1, μ2,...μν Character(n):: μ1, μ2,...μν όπου μ1, μ2,...μν = Τα ονόματα μεταβλητών n1, n2,...nν = Καθορίζουν το πλήθος των χαρακτήρων
ΔΗΛΩΤΙΚΕΣ ΕΝΤΟΛΕΣ Πινάκων Εντολή : Real A(i) Real X(i, j) Integer A(i) Integer X(i, j) Dimension A(i) Dimension X(i, j) Ενέργεια:Ορίζει ότι ο μονοδιάστατος πίνακας Α καταλαμβάνει i θέσεις και ο δισδιάστατος πίνακας Μ, ixj θέσεις Θέση: Στην αρχή του προγράμματος μετά από την εντολή IMPLICIT (άν υπάρχει)
ΔΗΛΩΤΙΚΕΣ ΕΝΤΟΛΕΣ Πινάκων Παράδειγμα real x(5) μονοδιάστατος πίνακας x, 5 θέσεων integer A(100) μονοδιάστατος πίνακας A, 100 θέσεων dimension ab(100) μονοδιάστατος πίνακας ab, 100 θέσεων. Δεν έχει δηλωθεί ο τύπος των δεδομένων real x(5,5) δισδιάστατος πίνακας x, 5x5=25 θέσεων integer A(30,40) μονοδιάστατος πίνακας A, 30x40=1200 θέσεων dimension ab(10,20) μονοδιάστατος πίνακας ab, 10x20=200 θέσεων. Δεν έχει δηλωθεί ο τύπος των δεδομένων
Αριθμητικές Πράξεις Πράξη Σύμβολο Αλγεβρική Ενέργεια Παράσταση Στο πρόγραμμα Πρόσθεση + α+β a+b Αφαίρεση - α-β a-b Πολλαπλασιασμός * αβ a*b Διαίρεση / a a/b Δύναμη ** a a**b
ΠΡΟΤΕΡΑΙΟΤΗΤΑ ΤΩΝ ΠΡΑΞΕΩΝ 1. Ύψωση σε δύναμη 2. Πολλαπλασιασμοί και διαιρέσεις 3. Προσθέσεις και αφαιρέσεις Σε πράξεις ίσης προτεραιότητας οι σειρά των πράξεων είναι από αριστερά προς τα δεξιά. Η προτεραιότητα των πράξεων αλλάζει με την χρήση παρενθέσεων. Πρώτα γίνονται οι πράξεις μέσα στις παρενθέσεις
ΠΡΟΤΕΡΑΙΟΤΗΤΑ ΤΩΝ ΠΡΑΞΕΩΝ Παρατηρήσεις Δεν μπορούμε να έχουμε δύο συνεχόμενα σύμβολα πράξεων Χρησιμοποιούμε παρενθέσεις οπουδήποτε αμφιβάλλουμε, σε ότι αφορά τη σειρά εκτέλεσης των πράξεων Η ύψωση σε δύναμη του a δεν επιτρέπεται όταν: a < 0 και η δύναμη e=πραγματικός a = 0 και η δύναμη e < 0 Δεν επιτρέπεται να διαιρέσουμε μία σταθερά ή μία μεταβλητή με το μηδέν ή με μεταβλητή της οποίας η τιμή είναι μηδέν
ΠΡΟΤΕΡΑΙΟΤΗΤΑ ΤΩΝ ΠΡΑΞΕΩΝ Παρατηρήσεις Η διαίρεση δύο ακεραίων δίνει ως αποτέλεσμα το ακέραιο μέρος της διαίρεσης, τα δεκαδικά χάνονται Παράδειγμα 3/2 δίνει 1 (όχι 1.5) 15/4 δίνει 3 (όχι 3.75) Η διαίρεση με ένα από τα δύο μέλη της να είναι πραγματικός αριθμός ή μεταβλητή δίνει ως αποτέλεσμα το και τα δεκαδικά Παράδειγμα 3.0/2 δίνει 1.5 21.5/5 δίνει 4.3
Μετατροπή αλγεβρικών παραστάσεων σε παραστάσεις FORTRAN Να μετατραπεί σε παράσταση FORTRAN η αλγεβρική παράσταση: x 1 z b 4z 2 3 1 Παράσταση FORTRAN: X=1.0/Z+B**2/(4*Z**3) 1 X=1.0/Z+B**2/4/Z**3-1
ΣΥΝΑΡΤΗΣΕΙΣ ΒΙΒΛΙΟΘΗΚΗΣ Μ Α Θ Η Μ Α Τ Ι Κ Η Ο Ν Ο Μ Α Σ Τ Η Τ ιμ ή Ε ισ ό δ ο υ Τ ιμ ή ε ξ ό δ ο υ Σ Υ Ν Α Ρ Τ Η Σ Η F O R T R A N Α π ό λ υ τ ο ς τ ιμ ή α ρ ιθ μ ο ύ A B S (X ) Α κ ε ρ α ία /Π ρ α γ μ α τ ικ ή Α κ ε ρ α ία /Π ρ α γ μ α τ ικ ή Τ ε τ ρ α γ ω ν ικ ή ρ ίζ α α ρ ιθ μ ο ύ S Q R T (X ) Α κ ε ρ α ία /Π ρ α γ μ α τ ικ ή Α κ ε ρ α ία /Π ρ α γ μ α τ ικ ή Φ υ σ ικ ό ς λ ο γ ά ρ ιθ μ ο ς α ρ ιθ μ ο ύ A L O G (X ) Α κ ε ρ α ία /Π ρ α γ μ α τ ικ ή Α κ ε ρ α ία /Π ρ α γ μ α τ ικ ή Δ ε κ α δ ικ ό ς λ ο γ ά ρ ιθ μ ο ς A L O G 1 0 (X ) Α κ ε ρ α ία /Π ρ α γ μ α τ ικ ή Α κ ε ρ α ία /Π ρ α γ μ α τ ικ ή α ρ ιθ μ ο ύ Ε κ θ ε τ ικ ή σ υ ν ά ρ τ η σ η E X P (X ) Α κ ε ρ α ία /Π ρ α γ μ α τ ικ ή Α κ ε ρ α ία /Π ρ α γ μ α τ ικ ή Η μ ίτ ο ν ο S IN (X ) Α κ τ ίν ια (Π ρ α γ μ α τ ικ ή ) Α κ ε ρ α ία /Π ρ α γ μ α τ ικ ή Σ υ ν η μ ίτ ο ν ο C O S (X ) Α κ τ ίν ια (Π ρ α γ μ α τ ικ ή ) Α κ ε ρ α ία /Π ρ α γ μ α τ ικ ή Ε φ α π τ ο μ έ ν η T A N ( X ) Α κ τ ίν ια (Π ρ α γ μ α τ ικ ή ) Α κ ε ρ α ία /Π ρ α γ μ α τ ικ ή Τ ό ξ ο η μ ιτ ό ν ο υ A S IN ( X ) Α κ ε ρ α ία /Π ρ α γ μ α τ ικ ή Α κ τ ίν ια ( Π ρ α γ μ α τ ικ ή ) Τ ό ξ ο σ υ ν η μ ιτ ό ν ο υ A C O S ( X ) Α κ ε ρ α ία /Π ρ α γ μ α τ ικ ή Α κ τ ίν ια ( Π ρ α γ μ α τ ικ ή ) Τ ό ξ ο ε φ α π τ ο μ έ ν η ς A T A N (X ) Α κ ε ρ α ία /Π ρ α γ μ α τ ικ ή Α κ τ ίν ια ( Π ρ α γ μ α τ ικ ή ) Σ υ ν ο λ ικ ό Μ ή κ ο ς σ υ μ β ο λ ο σ ε ιρ ά ς Π ρ α γ μ α τ ικ ό Μ ή κ ο ς σ υ μ β ο λ ο σ ε ιρ ά ς Μ ε τ α τ ρ ο π ή α ρ ιθ μ ο ύ α π ό π ρ α γ μ α τ ικ ό σ ε α κ έ ρ α ιο Μ ε τ α τ ρ ο π ή α ρ ιθ μ ο ύ α π ό α κ έ ρ α ιο σ ε π ρ α γ μ α τ ικ ό L E N (X ) Σ υ μ β ο λ ο σ ε ιρ ά Α κ ε ρ α ία L E N _ T R IM ( X ) Σ υ μ β ο λ ο σ ε ιρ ά Α κ ε ρ α ία IF IX (X ) Π ρ α γ μ α τ ικ ή Α κ ε ρ α ία F L O A T (X ) Α κ ε ρ α ία Π ρ α γ μ α τ ικ ή
Συναρτήσεις βιβλιοθήκης Εντολή: ifix Ενέργεια: Μετατροπή ενός πραγματικού αριθμού ή την τιμή μίας πραγματικής μεταβλητής σε ακέραια Παράδειγμα: a=12.42 k=ifix(-27.88) η τιμή του k θα είναι -27 m=ifix(a*2-3.5) η τιμή του m θα είναι 21
Συναρτήσεις βιβλιοθήκης Εντολή: float ή real Ενέργεια: Μετατροπή ενός ακεραίου αριθμού ή την τιμή μίας μεταβλητής σε πραγματική Παράδειγμα: k=15 m=3 a=float(k+m)+real(m)/2 η τιμή του m θα είναι 19.5
Κεφάλαιο 3 Αναγνωστοπούλου Χριστίνα Λέκτορας
Είσοδος - Έξοδος Δεδομένων Είσοδος δεδομένων Με την ενσωμάτωση τους στο πρόγραμμα όταν το γράφουμε Με την είσοδο τους εκτός προγράμματος (από το πληκτρολόγιο ή άλλη πηγή) κατά τη διάρκεια της εκτέλεσης του
Ενσωμάτωση μέσα στο πρόγραμμα program askisi2!========================== =======! file name:askisi2.f95!========================== ======= implicit none real xa2 character ch1*6!data xa2=2.45 ch1= δεδομένα!ypologismos!eggrafi!----- end program askisi2 program askisi2!=================================! file name:askisi2.f95!================================= implicit none integer(2), parameter:: a1=12, a2=120 real(4), parameter :: r1=-24.22 real(8), parameter :: dpr=4567.876e-8 character(10) :: ch1= δεδομένα!data!ypologismos!eggrafi!----- end program askisi2
Εισαγωγή δεδομένων στο πρόγραμμα την ώρα που εκτελείται Μονάδες εισόδου -Πληκτρολόγιο -Οθόνη -Μαγνητικές Δισκέτες -CD (συμπαγείς μαγνητικοί δίσκοι) -Flash (Μνήμη)
Έξοδος Αποτελεσμάτων ή και Δεδομένων
Κανόνας ορισμού των περιφερειακών μονάδων μέσα στο πρόγραμμα Πληκτρολόγιο Τους αριθμούς 0 ή το 5 ή το * Οθόνη Τους αριθμούς 0 ή το 6 ή το * Εκτύπωση Έναν ακέραιο και θετικό αριθμό εκτός των 0, 5, 6
ΕΝΤΟΛΕΣ ΕΙΣΟΔΟΥ-ΕΞΟΔΟΥ ΧΩΡΙΣ FORMAT ΕΝΤΟΛΕΣ ΕΙΣΟΔΟΥ (Πληκτρολόγιο) ΕΝΤΟΛΕΣ ΕΞΟΔΟΥ (Οθόνη) READ *, a, b READ (*,*) a, b READ (0,*) a, b READ (5,*) a, b PRINT *, a, b WRITE (*,*) a, b WRITE (0,*) a, b WRITE (6,*) a, b
Παράδειγμα program askisi_embadon!=================================! file name:askisi_em.f95!================================= implicit none integer a real b, basi, ypsos, em character*10 c1!data a=125 b=200.0 c1="αξία" basi=20 ypsos=15!ypologismos em=(basi*ypsos)/2.0!eggrafi write(6,*) "παλιά τιμή=",a,"νέα τιμή=", b write(6,*) "Βάση=", basi write(6,*) "ύψος=", ypsos write(6,*) "εμβαδόν=", em write(6,*) c1, em*b!----- end program askisi_embadon
Πρόγραμμα 3.1 Να υπολογιστεί η τετραγωνική ρίζα και ο δεκαδικός λογάριθμος των αριθμών 100 και 200. Τα δεδομένα να δίνονται από το πληκτρολόγιο και τα αποτελέσματα να εμφανίζονται στην οθόνη
Πρόγραμμα program askisi_sqrt!=================================! file name:askisi_sqrt.f95!================================= implicit none real a1, a2, sq1, sq2, lg1, lg2 character*10 sq, lg!data read(5,*) a1, a2!ypologismos sq1=sqrt(a1) sq2=sqrt(a2) lg1=alog10(a1) lg2=alog10(a2)!eggrafi write(6,*) "a1=", a1, "tetragoniki riza=",sq1,"logarithos=", lg1 write(6,*) "a2=", a2, "tetragoniki riza=",sq2,"logarithos=", lg2!----- end program askisi_sqrt
Πρόγραμμα program askisi_sqrt!=================================! file name:askisi_sqrt2.f95!================================= implicit none real a1, a2, sq1, sq2, lg1, lg2 character*10 sq, lg!data write(6,*) "Dwse tous 2 arithous" read(5,*) a1, a2!ypologismos sq1=sqrt(a1) sq2=sqrt(a2) lg1=alog10(a1) lg2=alog10(a2)!eggrafi write(6,*) "a1=", a1, "tetragoniki riza=",sq1,"logarithos=", lg1 write(6,*) "a2=", a2, "tetragoniki riza=",sq2,"logarithos=", lg2!----- Χ. end Αναγνωστοπούλου program askisi_sqrt
Πρόγραμμα 3.2 Να γίνει ένα πρόγραμμα όπου να δίνεται το όνομα, το επίθετο το όνομα πατρός και τον αριθμό ειδικού μητρώου σας. Τα δεδομένα να δίνονται από το πληκτρολόγιο και τα αποτελέσματα να εμφανίζονται στην οθόνη
program askisi_onoma!=================================! file name:askisi_onoma.f95!================================= implicit none integer aem character*10 name1, name2, name3!data write(6,*) "Dwse to onoma sou" read(5,*) name1 write(6,*) "Dwse to epitheto sou" read(5,*) name2 write(6,*) "Dwse to onoma patros" read(5,*) name3 write(6,*) "Dwse to aem sou" read(5,*) aem!ypologismos!eggrafi write(6,*) "ONOMA=", name1, name2, "tou ", name3 write(6,*) "AEM=", aem!----- end program askisi_onoma
ΕΝΤΟΛΕΣ ΕΙΣΟΔΟΥ-ΕΞΟΔΟΥ ΜΕ FORMAT ΕΝΤΟΛΕΣ ΕΙΣΟΔΟΥ (Πληκτρολόγιο) ΕΝΤΟΛΕΣ ΕΞΟΔΟΥ (Οθόνη) READ f, a, b READ (*,f) a, b READ (0,f) a, b READ (5,f) a, b PRINT f, a, b WRITE (*,f) a, b WRITE (0,f) a, b WRITE (6,f) a, b
Η ΕΝΤΟΛΗ FORMAT Label FORMAT (περιγραφή μεταβλητών) Label: Ο αριθμός εντολής, στις θέσεις 1-5 FORMAT: Η εντολή Περιγραφή: Ο τρόπος εισαγωγής ή εξαγωγής των δεδομένων. ΕΝΑΛΛΑΚΤΙΚΗ ΜΟΡΦΗ (περιγραφή μεταβλητών)
ΕΙΣΑΓΩΓΗ-ΕΞΑΓΩΓΗ ΑΚΕΡΑΙΩΝ ΑΡΙΘΜΩΝ ΓΕΝΙΚΗ ΜΟΡΦΗ: Iw I: ΑΚΕΡΑΙΟΣ ΑΡΙΘΜΟΣ (Integer) w: Το πλήθος των ψηφίων του αριθμού. Στο πλήθος των ψηφίων υπολογίζεται και το πρόσημο. Στην περίπτωση θετικού αριθμού παραλείπεται. Παράδειγμα: Με Ι3 μπορούν να παρασταθούν αριθμοί από 99 έως 999
ΕΙΣΑΓΩΓΗ-ΕΞΑΓΩΓΗ ΑΡΙΘΜΩΝ ΑΠΛΗΣ ΑΚΡΙΒΕΙΑΣ (δεκαδική μορφή) ΓΕΝΙΚΗ ΜΟΡΦΗ: Fw.d F: ΑΡΙΘΜΟΣ ΑΠΛΗΣ ΑΚΡΙΒΕΙΑΣ (Floating) w: Το συνολικό πλήθος των ψηφίων του αριθμού. Στο πλήθος των ψηφίων υπολογίζεται η υποδιαστολή και το πρόσημο, που στην περίπτωση θετικού αριθμού παραλείπεται. d: Το πλήθος των δεκαδικών ψηφίων Παράδειγμα: Με F4.1 μπορούν να παρασταθούν αριθμοί από 9.9 έως 99.9
Παράδειγμα a = -128.344 b=127.85 c=12.306 d= -25.4 e = 57.34 f = 127.85 write (6, 4) a, b, c, d, e, f 4 format(f9.2, f7.1, f8.2, f8.3, f4.0, f10.5) -128.34 127.9 12.31-25.400 57. 127.85000
ΕΙΣΑΓΩΓΗ-ΕΞΑΓΩΓΗ ΑΡΙΘΜΩΝ ΑΠΛΗΣ ΑΚΡΙΒΕΙΑΣ (εκθετική μορφή) ΓΕΝΙΚΗ ΜΟΡΦΗ: Εw.d Ε: ΑΡΙΘΜΟΣ ΑΠΛΗΣ ΑΚΡΙΒΕΙΑΣ (Expotential) w: Το συνολικό πλήθος των ψηφίων του αριθμού. Στο πλήθος των ψηφίων υπολογίζεται η υποδιαστολή και το πρόσημο, που στην περίπτωση θετικού αριθμού παραλείπεται. d: Το πλήθος των δεκαδικών ψηφίων
Ew.d w=αριθμός θέσεων στην εκτύπωση d= πλήθος των δεκαδικών w ----------------- ±0.xxxxxx+ee --------- d Περιορισμός: w d + 6
npew.d w=αριθμός θέσεων στην εκτύπωση d= πλήθος των δεκαδικών N= πλήθος των ακεραίων ψηφίων w ----------------- ±xxx.xxxxxx+ee ---- --------- n d
παράδειγμα 0.00245 2PE10.1 24.5E-04
ΕΙΣΑΓΩΓΗ-ΕΞΑΓΩΓΗ ΑΡΙΘΜΩΝ ΔΙΠΛΗΣ ΑΚΡΙΒΕΙΑΣ (εκθετική μορφή) ΓΕΝΙΚΗ ΜΟΡΦΗ: Dw.d D: ΑΡΙΘΜΟΣ ΔΙΠΛΗΣ ΑΚΡΙΒΕΙΑΣ (Double precision) w: Το συνολικό πλήθος των ψηφίων του αριθμού. Στο πλήθος των ψηφίων υπολογίζεται η υποδιαστολή και το πρόσημο, που στην περίπτωση θετικού αριθμού παραλείπεται. d: Το πλήθος των δεκαδικών ψηφίων Περιορισμός: w d + 6
ΕΙΣΑΓΩΓΗ-ΕΞΑΓΩΓΗ ΣΥΜΒΟΛΟΣΕΙΡΩΝ ΓΕΝΙΚΗ ΜΟΡΦΗ: Αw Α: ΣΥΜΒΟΛΟΣΕΙΡΑ (Alphanumeric) w: Το συνολικό πλήθος των ψηφίων του αριθμού.
ΕΙΣΑΓΩΓΗ-ΕΞΑΓΩΓΗ ΚΕΝΩΝ ΘΕΣΕΩΝ ΣΕ ΜΙΑ ΓΡΑΜΜΗ ΓΕΝΙΚΗ ΜΟΡΦΗ: nx X: ΣΥΜΒΟΛΙΖΕΙ ΤΟ ΚΕΝΟ n: Το πλήθος των κενών
Παράδειγμα read(*, 9) a1, a2, k 9 format(f7.2,f8.1, 4x, i5) write (6, 5) a1, a2 5 format(f7.2,4x, i3)
ΕΙΣΑΓΩΓΗ-ΕΞΑΓΩΓΗ ΑΛΛΑΓΗ ΓΡΑΜΜΩΝ ΓΕΝΙΚΗ ΜΟΡΦΗ: / /: ΣΥΜΒΟΛΙΖΕΙ ΤΗΝ ΑΛΛΑΓΗ ΤΗΣ ΓΡΑΜ- ΜΗΣ
ΕΛΕΓΧΟΣ ΕΚΤYΠΩΣΗΣ Χαρακτήρας Το κενό Συμβολισμός στη fortran 1Η, ή ή 1x Ενέργειες Αλλάζει γραμμή και μετά τυπώνει Το μηδέν Το ένα Το συν 1H0 ή 0 1H1 ή 1 1H+ ή + Αφήνει μία κενή γραμμή και μετά τυπώνει Αλλάζει σελίδα και η εκτύπωση αρχίζει από την αρχή της νέας σελίδας Σημαίνει ότι δεν γίνεται αλλαγή γραμμής (Τυπώνει στην ίδια γραμμή)
Παράδειγμα write (*, 2) a, b 2 format(1h0, i10, 3x, f7.1)
Αρχεία - Φάκελοι Αρχείο δεδομένων Αρχείο αποτελεσμάτων
ΕΝΕΡΓΟΠΟΙΗΣΗ ΣΕΙΡΙΑΚΟΥ ΑΡΧΕΙΟΥ Εντολή: OPEN Γενική μορφή: OPEN(unit=n, file= fn, form= f, access= a ) όπου: n : Ο αριθμός του αρχείου fn : Το όνομα του αρχείου f : formatted ή unformatted a : sequential ή append
Πρόγραμμα program askisi_embadon!=================================! file name:askisi_em_arxeio.f95!================================= implicit none integer a real b, basi, ypsos, em character*10 c1 open(8, file='askisi_em_data.txt') open(9, file='askisi_em_res.txt')
Πρόγραμμα!data a=125 b=200.0 c1="αξία" read(8,*)basi, ypsos!ypologismos em=(basi*ypsos)/2.0!eggrafi write(9,*) "Αποτελέσματα προγράμματος" write(9,*) "--------------------------" write(9,*) "παλιά τιμή=",a,"νέα τιμή=", b write(9,*) "Βάση=", basi write(9,*) "ύψος=", ypsos write(9,*) "εμβαδόν=", em write(9,*) c1, em*b!----- end program askisi_embadon
Πρόγραμμα 3.3 Να υπολογιστεί η τιμή του z αν α=2.0 και b=3.0 Α) τα a, b δίνονται από αρχείο και τα αποτελέσματα να γραφούν σε αρχείο B) Το αποτέλεσμα να τυπωθεί από τη δεύτερη γραμμή να έχει τέσσερα δεκαδικά ψηφία και να ακολουθεί την φράση η τιμή του z είναι μετά από 3 κενά. z 5 6 3 a b a 1 2 3a 6 a b 1 1 2a a 1 3 b a 3
Κεφάλαιο 4 Αναγνωστοπούλου Χριστίνα Λέκτορας
Εντολές Ροής - Λογικές Πράξεις
ΕΝΤΟΛΕΣ ΕΛΕΓΧΟΥ ΟΙ ΕΝΤΟΛΕΣ CALL CONTINUE DO DO WHILE ELSE ELSE IF END END IF END DO GO TO IF PAUSE RETURN STOP
Εντολή Ροής Η εντολή GO TO GO TO n Όπου n = Αριθμός εντολής
Πρόγραμμα program goto!=========================! file name:goto.f95!========================= implicit none integer n real b, a, x, r, z xa, yy! data read (5, *) a, b!=======================! Ypologismoi x=a+b go to 5 4 z=a/b r=z-a/(n-1) Δεν εκτελείται yy=(n+1)/(a+1) 5 xa=8.2-x!==============================! Egraffi write (6, *) a, b, xa End program goto
Εντολή Ροής Η εντολή GO TO με όρους GO TO (n 1, n 2, n k ), m Όπου n1, n2, nk = αριθμοί εντολών στο πρόγραμμα m = ακέραια μεταβλητή με θετική τιμή που καθορίζει σε ποια ετικέτα (n1, n2, nk) θα πάει ο υπολογιστής
Πρόγραμμα 4.1 program goto!=========================! file name:goto.f95!========================= implicit none integer n real b, a, x, r, z xa, yy! data read (5, *) a, b!=======================! Ypologismoi x=a+b go to (4, 5, 6), 3 4 z=a/b r=z-a/(n-1) yy=(n+1)/(a+1) 5 xa=8.2-x!==============================! Egraffi write (6, *) a, b, xa 6 write (6, *) a, b, x End program goto
Πρόγραμμα 4.2 program goto!=========================! file name:goto.f95!========================= implicit none integer n, ik real b, a, x, r, z xa, yy, k! data read (5, *) a, b, n write (6, *) give the label read (5, *) ik go to (50, 100, 150, 200), ik!=======================! Ypologismoi 50 x=a+b k=x go to 10 100 z=a/b r=z-a/(n-1) k=r go to 10 150 yy=(n+1)/(a+1) k=yy go to 10 200 xa=8.2-(a+b) k=xa go to 10!==============================! Egraffi 10 write (6, *) a, b, k End program goto
Εντολές Σύγκρισης Αριθμητική IF Λογική IF Δομημένη IF
Εντολή Σύγκρισης Η αριθμητική εντολή if if (a) n1, n2, n 3 Όπου a = Μια μεταβλητή ή μια παράσταση FORTRAN Αν α < 0 πηγαίνει στην εντολή n1 Αν α = 0 πηγαίνει στην εντολή n2 Αν α > 0 πηγαίνει στην εντολή n3 n1, n2, n3 = αριθμοί εντολών στο πρόγραμμα
Πρόγραμμα 4.3 program if!=========================! file name:if.f95!========================= implicit none real a,b! data read (5, *) a!=======================! Ypologismoi if (a-1.0) 10, 20, 30 10 b= -1.0 go to 5 20 b= 0 go to 5 10 b= 1.0 go to 5! Egraffi 5 write (6, *) a, b, xa End program if
Εντολή Σύγκρισης Η λογική εντολή if Σχέση Περιγραφή Τελεστές σύγκρισης Υλοποίηση στις IF a=b Ίσον.EQ. if(a.eq.b) If(a==b) a<b Μικρότερο.LT. if(a.lt.b) If(a<b) a>b Μεγαλύτερο.GT. if(a.gt.b) If(a>b) a b Μεγαλύτερο ή ίσον.ge. if(a.ge.b) If(a>=b) a b Μικρότερο ή ίσον.le. if(a.le.b) If(a<=b) a b Διάφορο (όχι ίσον).ne. if(a.ne.b) If(a/=b)
Παράδειγμα if(x < 1.0) y=-1.0 if(x == 1.0) y=0.0 if(x > 1.0) y=1.0 if(x.lt.1.0) y=-1.0 if(x.eq.1.0) y=0.0 if(x.gt.1.0) y=1.0 if (k+z <= 0.0) y=r+10.0 if (k+z > 0.0) y=r-10.0
Λογικό KAI (.AND.) if (x >2.0.AND. x < 5.0) y=100.0 Λογικό ή (.OR.) if (A.LT.Y.OR. B+C/(D-A).GT.0.0) go to 120 Λογικό OXI (.NOT.) if (.NOT. (x < 5.0)) y=100.0
BLOCK IF ΕΝΤΟΛΗ: IF (συνθήκη) THEN ENDIF Όπου Α, B: Μεταβλητή, απλή ή με δείκτη ή μια παράσταση FORTRAN
BLOCK IF ΕΝΤΟΛΗ: IF ( συνθήκη) THEN ELSE END IF Όπου Α, B: Μεταβλητή, απλή ή με δείκτη ή μια παράσταση FORTRAN
ΣΥΝΘΕΤΗ BLOCK IF IF (συνθήκη) THEN ELSE IF (συνθήκη) THEN ELSE IF (συνθήκη) THEN. ELSE ENDIF
Πρόγραμμα 4.4 Να υπολογιστεί ο αριθμός z αν z x x 2 2 1 2b 1 2 b 0 x x b b Α) Να δίνονται από το πληκτρολόγιο οι μεταβλητές x και b, αν το x έχει τιμή μικρότερη από μηδέν τότε το πρόγραμμα να σταματά και να εμφανίζεται η ένδειξη «το x είναι μικρότερο από το 0» Β) τα αποτελέσματα να εμφανίζονται στην οθόνη με τις κατάλληλες ενδείξεις
Πρόγραμμα 4.5 Να γραφεί ένα πρόγραμμα που να εντοπίζεται η μεγαλύτερη και η μικρότερη τιμή των Ν σε πλήθος αριθμών. Τα δεδομένα να δίνονται από αρχείο και τα αποτελέσματα να γραφούν στην οθόνη με τις σχετικές ενδείξεις
ΕΝΤΟΛΕΣ ΕΛΕΓΧΟΥ Εντολή Do do i=m1, m2,m3.... (ομάδα εντολών).. end do do n i=m1, m2,m3.... (ομάδα εντολών).. n.. Όπου m1= η αρχική τιμή initial value m2= η τελική τιμή last value m3= το βήμα (θετικό ή αρνητικό) step
Παράδειγμα do i=1, 100 read (5,*) a x=a**2 write(6,*) a, x end do do i=1, 100, 10 read (5,*) a x=a**2 write(6,*) a, x end do
ΕΝΤΟΛΕΣ ΕΛΕΓΧΟΥ Άδηλη Do write (6,*) (pin(i), i=1,20) Εντολή Do do n i=m1, m2,m3.... (ομάδα εντολών).. n continue
CONTINUE Η εντολή αυτή δεν κάνει τίποτα. Απλώς δίδει εντολή να συνεχισθεί η εκτέλεση του προγράμματος. Συνήθως είναι το κάτω όριο μιάς εντολής ανακυκλώσεως DO
Πολλαπλή Do Όταν έχουμε πολλαπλές Do, τότε θα πρέπει οι εσωτερικές Do να βρίσκονται ολόκληρες μέσα στις εξωτερικές. Η τελευταία εντολή μιας Do μπορεί να είναι μία οποιαδήποτε εκτελέσιμη εντολή Μπορούμε να χρησιμοποιήσουμε το δείκτη της Do, καθώς και τα m1, m2, m3 μέσα στη περιοχή της. Δεν επιτρέπεται η αλλαγή των τιμών τους.
Πολλαπλή Do Σωστό Σωστό Λάθος
Πολλαπλή Do Δεν επιτρέπεται να αρχίσουμε την εκτέλεση μίας Do από οπουδήποτε αλλού εκτός από την αρχή της. Είναι προτιμότερο κάθε εντολή Do να κλείνει με δικό της τέλος και όχι κοινό τέλος.
Εντολή Do while do while (συνθήκη).... (ομάδα εντολών).. end do
Παράδειγμα do while(a>=50.0) read (5,*) a x=a**2 write(6,*) a, x end do
Πρόγραμμα 4.6 Να υπολογιστεί η τιμή του α από τον τύπο α=α+0.1. Να γίνουν 10000 επαναλήψεις. Να συγκριθεί το α με το 1000.0 και να τυπωθεί η τιμή του α με τις ανάλογες ενδείξεις.
Πρόγραμμα 4.7 Να υπολογιστούν οι τιμές της συνάρτησης y e x2 Για x=1 μέχρι x=10 και βήμα 0.2. Να τυπωθούν οι τιμές του x και y σε δύο κατακόρυφες στήλες (σε αρχείο) και κάθε στήλη να έχει την κατάλληλη επικεφαλίδα
Πρόγραμμα 4.8 Από τα δεδομένα του αρχείου program4_8_data.txt, vα υπολογιστούν Η μέγιστη τιμή Η ελάχιστη τιμή Το πλήθος των τιμών Η μέση τιμή