Η Fortran υποστηρίζει τους παρακάτω τύπους δεδομένων:
1.2 ΣΤΑΘΕΡΕΣ
ΚΑΙ ΜΕΤΑΒΛΗΤΕΣ
Μια σταθερά τύπου INTEGER είναι
ένας ακέραιος αριθμός (θετικός, αρνητικός ή μηδέν).
Στην Fortran οι ακέραιες σταθερές αναπαρίστανται σαν μιά
σειρά από ψηφία, χωρίς κόματα ή δεκαδικές τελείες.
Οι αρνητικοί ακέραιοι αρχίζουν απαραίτητα με το πρόσημο "μείον" (-).
Οι θετικοί αριθμοί μπορεί να αρχίζουν (αλλά όχι απαραίτητα) με το πρόσημο
"συν" (+).
Οι παρακάτω ακέραιες σταθερές είναι γραμμένες σύμφωνα με τους κανόνες της Fortran.
0 137 -1520 +17890Οι παρακάτω σταθερές είναι γραμμένες με τρόπο που δεν ακολουθεί τους κανόνες της Fortran για τους λόγους που σημειώνονται.
77,900
Η σταθερά περιέχει κόμα.
13.7
H σταθερά περιέχει δεκαδική τελεία.
--1520
H σταθερά έχει δύο πρόσημα.
17890-
H σταθερά έχει το πρόσημο στο τέλος.
Μιά σταθερά τύπου REAL αναπαριστά έναν πραγματικό αριθμό. Υπάρχουν δύο τρόποι γραφής:
|
|
33.25 x 102 = 332.5 x 10 = 3325. | 33.25E2 = 332.5E1 = 3325E0 |
33.25 x 10-2 = 3.325 x 10-1 = 0.3325 | 33.25E-2 = 3.325E-1 = 0.3325E0 |
Μιά σταθερά τύπου DOUBLE PRECISION αναπαριστά
επίσης έναν πραγματικό αριθμό. Η διαφορά με τον τύπο REAL
έγκειται στο πλήθος των σημαντικών ψηφίων που υποστηρίζονται. Ο τύπος DOUBLE
PRECISION υποστηρίζει σχεδόν διπλάσια σημαντικά ψηφία.
Για να επιτευχθεί αυτό, δύο "λέξεις" ενώνονται μαζί και χρησιμοποιούνται
σαν μια "λέξη" διπλασίου μήκους.
Το σύμβολο που χρησιμοποιείται για την εκθετική γραφή σταθερών
DOUBLE PRECISION είναι το D
και όχι το E. Δηλαδή ο
αριθμός 3.14159265358 γράφεται
ώς: 0.314159265358D1 ή ως: 314159265358D-11
κλπ.
Ο τύπος DOUBLE PRECISION χρησιμοποιείται
σε σύνθετους επιστημονικούς υπολογισμούς, όπου η ύπαρξη πολλών σημαντικών
ψηφίων είναι πολλές φορές επιβεβλημένη λόγω της αυξημένης απαίτησης σε
ακρίβεια.
(Πολλοί κατασκευαστές χρησιμοποιούν επιπλέον
τον τύπο REAL*4 αντί του REAL
και τον REAL*8 αντί του DOUBLE
PRECISION. Οι τύποι
αυτοί δεν ανήκουν στην ANSI-Fortran 77,
και θα πρέπει να αποφεύγεται η χρήση τους.)
Μια σταθερά τύπου COMPLEX αναπαριστά έναν μιγαδικό αριθμό. Ενας μιγαδικός αριθμός αλγεβρικά γράφεται ως:
|
|
(1.0, 1.0) | 1 + i |
(-7.6, 1.2) | -7.6 + 1.2i |
(1.887, -199.022) | 1.887 - 199.022i |
Μια σταθερά τύπου CHARACTER αναπαριστά
ένα σύνολο χαρακτήρων (πχ γραμμάτων κεφαλαίων ή μικρών, αριθμών και άλλων
ειδικών χαρακτήρων που παραθέτονται στον παρακάτω πίνακα).
|
|
|
|
|
Ψηφία |
|
’νω κάτω τελεία |
|
Κεφαλαία γράμματα |
|
Ίσον |
|
Μικρά γράμματα |
|
Θαυμαστικό |
|
Απόστροφος |
|
Εμπορικό "και" |
|
Εισαγωγικά |
|
Δολλάριο |
|
Αριστερή παρένθεση |
|
Ελληνικό ερωτηματικό |
|
Δεξιά παρένθεση |
|
Μικρότερο |
|
Αστερίσκος |
|
Μεγαλύτερο |
|
Συν |
|
Επί τοις εκατό |
|
Πλην |
|
Λατινικό ερωτηματικό |
|
Κάθετος |
|
Κόμα |
|
Κενός χαρακτήρας |
|
Τελεία |
Για παράδειγμα η σταθερά: 'CS-123.0$a'είναι τύπου CHARACTER μήκους 10.
Εάν ένας από τους χαρακτήρες μιας σταθεράς είναι ή απόστροφος (που είναι το ειδικό σύμβολο για τον καθορισμό της αρχής και του τέλους της σταθεράς) πρέπει να γραφεί δύο φορές.
Πχ η παράσταση: Don' t do it γράφεται ως: 'Don'' t do it'
Προσοχή: Έχει γραφτεί το σύμβολο της αποστρόφου δύο φορές αλλά στο μήκος της λέξης μετράται ώς ένας χαρακτήρας. Δηλαδή η παραπάνω σταθερά έχει μήκος 12.
Μια σταθερά τύπου LOGICAL μπορεί
να πάρει μία από τις δύο συμβολικές τιμές : .TRUE.
ή .FALSE.
Προσέξτε τις τελείες που περικλείουν τις
λέξεις TRUE και FALSE
και οι οποίες είναι μέρος της "τιμής".
Η τιμή .TRUE. αντιστοιχεί
(όπως προφανώς αναμένεται) στο "λογικό
αληθές",
Η τιμή .FALSE. αντιστοιχεί
στο "λογικό
ψευδές".
Ο τύπος LOGICAL είναι
χρήσιμος για επεξεργασία λογικών προτάσεων, για προβλήματα
άλγεβρας Boole, για εφαρμογές λογικών κυκλωμάτων
κλπ.
Η Fortran χρησιμοποιεί συμβολικά ονόματα για να αναφέρεται στα προγράμματα, υποπρογράμματα, στίς απλές μεταβλητές, στους πίνακες ακόμα και σε σταθερές. Τα ονόματα αυτά πρέπει να συμορφώνονται με τους παρακάτω κανόνες:
xal
A1i2h0
jEriho
A
είναι όλα σωστά ονόματα Fortran.
Τα παρακάτω ονόματα δεν είναι σωστά για τους λογους που σημειώνονται:
x_al
Tο σύμβολο _ δεν είναι επιτρεπτό.
A1i2hei1
Tο όνομα απαρτίζεται από 8
χαρακτήρες (>6).
2Eriho
Tο όνομα αρχίζει από αριθμό
και όχι από γράμμα.
A$422
Tο σύμβολο $ δεν
είναι επιτρεπτό.
Κάθε μεταβλητή είναι "συνδεδεμένη" με
κάποια διεύθυνση μνήμης. Η τιμή που είναι αποθηκευμένη στην διεύθυνση αυτή
είναι η τιμή που έχει η εν λόγω μεταβλητή ανά πάσα στιγμή. O τύπος
της μεταβλητής καθορίζει και το είδος των επιτρεπτών της τιμών.
Η δήλωση του τύπου κάθε μεταβλητής γίνεται χρησιμοποιώντας κατάλληλες
εντολές, τις ΕΝΤΟΛΕΣ ΤΥΠΟΥ.
Εάν για παράδειγμα οι μεταβλητές x, y, z
πρόκειται να χρησιμοποιηθούν ώς μεταβλητές τύπου
REAL θα πρέπει να δηλωθούν ως εξής:
REAL X,Y,Z
Αντίστοιχα εάν οι μεταβλητές I, J, K πρόκειται να χρησιμοποιηθούν ώς μεταβλητές τύπου INTEGER θα πρέπει να δηλωθούν ως:
INTEGER I,J,K
Αντίστοιχες είναι οι δηλώσεις και για τους άλλους τύπους DOUBLE PRECISION, COMPLEX, LOGICAL.
Για τον τύπο CHARACTER υπάρχει
μια διαφοροποίηση γιατί έχει την ιδιαιτερότητα
ότι πέραν του τύπου να δηλώνει και το "μήκος" της μεταβλητής.
Για παράδειγμα η εντολή:
CHARACTER*8 NAME, MYNAME
δηλώνει ότι οι μεταβλητές NAME, MYNAME
είναι τύπου CHARACTER και εχουν
μήκος 8.
Η εντολή :
CHARACTER*8 NAME, MYNAME*10, LAST
δηλώνει ότι οι μεταβλητές NAME, MYNAME,
LAST είναι τύπου CHARACTER
και οι μεν NAME και
LAST έχουν μήκος 8, η δε MYNAME
έχει μήκος 10. Παρατηρούμε ότι υπερισχύει ο καθορισμός
του μήκους που γίνεται άμεσα σε κάποια μεταβλητή, απο τον γενικό καθορισμό
που ακολουθεί την εντολή CHARACTER.
Εάν στο τέλος της εντολής CHARACTER δεν
υπάρχει καθορισμός του μήκους, εκλαμβάνεται ως δήλωση μοναδιαίου μήκους.
Δηλαδή οι παρακάτω δηλώσεις είναι ισοδύναμες:
CHARACTER*1 NAME, MYNAME*10, LAST
CHARACTER NAME, MYNAME*10, LAST
Μια διαφορετική εντολή τύπου στην Fortran
είναι η εντολή IMPLICIT.
Η χρήση της επιδυκνείεται με ορισμένα παραδείγματα.
IMPLICIT REAL J,X,P
Δηλώνει ότι όλες οι μεταβλητές που το συμβολικό τους όνομα αρχίζει
από J ή X
ή P είναι τύπου REAL
.
Όσες μεταβλητές εμπίπτουν στην περίπτωση αυτή δεν χρειάζεται
να δηλωθούν ξεχωριστά.
Για παράδειγμα μεταβλητές με ονόματα JACK,
JOE, XEN
ή PACK κλπ,
είναι τύπου REAL συνεπεία της
παραπάνω εντολής.
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
Δηλώνει ότι οποιαδήποτε μεταβλητή που το όνομά της αρχίζει με
ένα από τα γράμματα: A,B,C,D,E,F,G,H
ή με ένα από τα γράμματα: O,P,Q,...,X,Y,Z
είναι τύπου DOUBLE PRECISION.
Εάν σε κάποιο πρόγραμμα δεν υπάρχουν δηλώσεις που να καθορίζουν τον τύπο των μεταβλητών, χρησιμοποιείται αυτόματα από τον μεταγλωτιστή μια προκαθορισμένη αντιστοιχία που είναι ισοδύναμη με τις εξής δύο εντολές:
IMPLICIT REAL (A-H,O-Z)
IMPLICIT INTEGER (I-N)
Εάν δηλαδή σε κάποιο πρόγραμμα χρησιμοποιούνται μεταβλητές που ο τύπος
τους δεν είναι δηλωμένος μέσω των εντολών τύπου, τότε ο τύπος τους απορρέει
αυτόματα από την παραπάνω αντιστοιχία.
Για τον παραπάνω αυτόματο καθορισμό η Fortran έχει
δεχτεί σκληρή κριτική από προγραμματιστές και από σχεδιαστές μεταγλωτιστών
άλλων γλωσσών που δεν έχουν αυτό το χαρακτηριστικό. Το επιχείρημα που προβάλεται
είναι ότι εάν κατά λάθος δεν δηλωθούν κάποιες μεταβλητές οι άλλοι μεταγλωτιστές
θα εντοπίσουν την παράλειψη κατα την μεταγλώτιση και θα εκδώσουν προειδοποιητικά
βοηθητικά μυνήματα, ενώ ο μεταγλωτιστής της Fortran θα αντιστοιχίσει
την μεταβλητή σε κάποιο (πιθανώς λανθασμένο) τύπο αυτόματα, γεγονός που
θα δυσκολέψει την διαδικασία εύρεσης του λάθους (εάν αυτό ποτέ εντοπισθεί).
Παρόλα αυτά, έμπειροι προγραμματιστές βρίσκουν αυτή την δυνατότητα
ιδιαίτερα χρήσιμη διότι αποφεύγεται η γραφή επιπλέον κώδικα και η
ανάπτυξη των προγραμμάτων καθίσταται συντομότερη.
Στην Fortran 90
υπάρχει η εντολή τύπου: IMPLICIT NONE που
αναιρεί τον αυτόματο προκαθορισμό και αναγκάζει τον προγραμματιστή να δηλώσει
τον τύπο κάθε μεταβλητής που χρησιμοποιεί.
ΠΑΡΑΜΕΤΡΟΙ
(Σταθερές με όνομα)
Η Fortran παρέχει την χρήση παραμέτρων. Οι παράμετροι
είναι σταθερές με όνομα.
Για παράδειγμα ή εντολή:
Παράδειγμα σωστής χρήσης:
COMPLEX I
CHARACTER*8 TOWN
PARAMETER (I=(0.,1.), TOWN='IOANNINA', PI=3.14, NOS=20)
Παράδειγμα εσφαλμένης χρήσης:
INTEGER PI
REAL NOS,TOWN
PARAMETER (I=(0.,1.), TOWN='IOANNINA', PI=3.14, NOS=20)
Η παράμετρος I
δεν έχει δηλωθεί και άρα είναι τύπου INTEGER, ενώ
η τιμή της είναι τύπου COMPLEX.
Η παράμετρος PI
έχει δηλωθεί τύπου INTEGER ενώ
η τιμή της είναι τύπου REAL.
Η παράμετρος NOS
έχει δηλωθεί τύπου REAL ενώ
η τιμή της είναι τύπου INTEGER.
Η παράμετρος TOWN
έχει δηλωθεί τύπου REAL ενώ
η τιμή της είναι τύπου CHARACTER.
Αριθμητικές πράξεις
Η Fortran επεξεργάζεται τις μεταβλητές και τις σταθερές
των διαφόρων τύπων με κατάλληλες πράξεις και συναρτήσεις.
Ο παρακάτω πίνακας παραθέτει τον τρόπο γραφής των τεσσάρων αριθμητικών
πράξεων και την ύψωση σε δύναμη σε αλγεβρική μορφή και σε εντολές
Fortran.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ΚΑΝΟΝΑΣ
Οταν δύο σταθερές ή μεταβλητές ενός τύπου συμμετέχουν σε μια από τις τέσσερεις
βασικές αριθμητικές πράξεις, το
αποτέλεσμα είναι του ιδίου τύπου.
Για παράδειγμα το άθροισμα των σταθερών (τύπου REAL) 4.0+5.0 δίνει ως αποτέλεσμα την σταθερά 9.0 (τύπου REAL), ενώ το αθροισμα των σταθερών (τύπου INTEGER) 4+5 δίνει ως αποτέλεσμα την σταθερά 9 (τύπου INTEGER). Στην πρόσθεση, στην αφαίρεση και στον πολλαπλασιασμό ο κανόνας αυτός δεν φαίνεται να είναι σημαντικός. Στην διαίρεση όμως έχει σαφέστατη και σημαντική διαφορά. Οι παραστάσεις:
ΚΑΝΟΝΑΣ
Οταν μια σταθερά ή μεταβλητή τύπου ΙΝTEGER
και μια σταθερά
ή μεταβλητή τύπου REAL,
συμμετέχουν σε μια από τις τέσσερεις βασικές αριθμητικές πράξεις, τότε
γίνεται μετατροπή της σταθεράς (ή μεταβλητής) τύπου INTEGER
σε τύπο REAL
και στην
συνέχεια εκτελείται η πράξη.
Παραδείγματα:
9.0/2 -> 9.0/2.0 = 4.5
4.0 + 8/5 -> 4.0 + 1 -> 4.0 + 1.0 = 5.0
4.0 +8.0/5 -> 4.0 + 8.0/5.0 -> 4.0 + 1.6 = 5.6
Είναι φανερό ότι με τις εκφράσεις μικτού τύπου χρειάζεται ιδιαίτερη
προσοχή γιατί είναι μάλλον εύκολο να γίνει κάποιο λάθος. Οι πεπειραμένοι
προγραμματιστές τις αποφεύγουν με μιά εξαίρεση: την ύψωση μεταβλητής τύπου
REAL σε δύναμη τύπου INTEGER.
Η πράξη αυτού του είδους υλοποιείται με συνεχείς πολλαπλασιασμούς.
Για παράδειγμα: 2.0**3
-> 2.0*2.0*2.0 = 8.0
Eνώ η ύψωση σε δύναμη τύπου REAL υλοποιείται
διαφορετικά (με χρήση λογαρίθμων) και συνεπώς είναι πράξη μικρότερης ακριβείας.
Συγκεκριμένα: 2.0**3.0 -> e3.0ln(2.0).
Αντιλαμβάνεται κανείς ότι ύψωση αρνητικού αριθμού σε δύναμη τύπου
REAL δεν είναι δυνατή (διότι ο αρνητικός
λογάριθμος δεν ορίζεται στο σύνολο των πραγματικών αριθμών) ενώ η ύψωση
αρνητικού αριθμού σε δύναμη τύπου INTEGER
είναι δυνατή διότι υλοποιείται με συνεχείς πολλαπλασιασμούς.
ΚΑΝΟΝΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΠΡΑΞΕΩΝ
2.0**3**2 = 2.0**9 = 512.0
9 - 6 - 2 = 3 - 2 = 1
100/20*4 = 5*4 = 20
4.0 + 6.0/3.0 = 4.0 + 2.0 = 6.0
5 + 4*3**2/18 = 5 + 4*9/18 = 5 + 36/18 = 5 + 2
= 7
Παρενθέσεις μπορούν να χρησιμοποιηθούν για να κατασκευασθούν πολύπλοκες εκφράσεις, πχ.
( 10*( 13 - 7 )**2 + 1 )*4 + 1 = ( 10*6**2 + 1)*4 + 1 = 361*4 + 1 = 1445
Παρατηρούμε ότι (όπως άλλωστε θα περίμενε κανείς) οι εκφράσεις μέσα
στις παρενθέσεις υπολογίζονται με προτεραιότητα.
Πράξεις με σταθερές τύπου CHARACTER
Η μοναδική πράξη που υποστηρίζεται μεταξύ δύο σταθερών (ή μεταβλητών)
τύπου CHARACTER είναι η συνένωση.
Η συνένωση συμβολίζεται με δύο συνεχόμενα σύμβολα διαίρεσης. Για παράδειγμα
οι δύο σταθερές:
'Ioan' και 'nina'
συνενώνονται ώς: 'Ioan'//'nina'
και η νέα σταθερά έχει την τιμή 'Ioannina'.
Eπίσης η συνένωση μπορεί να επαναλαμβάνεται ως εξής:
'Ioan'//'nina'//' - Greece'//' 45110'
H τιμή της παραπάνω σταθεράς είναι:
'Ioannina
- Greece 45110'
Η Fortran προσφέρει ορισμένες χρήσιμες συναρτήσεις για
χρήση με σταθερές και μεταβλητές τύπου CHARACTER
.
|
|
|
|
ICHAR(A) |
|
CHARACTER*1 | INTEGER |
CHAR(I) |
|
INTEGER | CHARACTER*1 |
ΙNDEX(A,B) |
|
CHARACTER | INTEGER |
Πράξεις με σταθερές τύπου LOGICAL
Οι πράξεις μεταξύ σταθερών τύπου LOGICAL χρησιμοποιούν διαφορετικά σύμβολα (λογικούς τελεστές) που αντιστοιχούν στα σύμβολα της άλγεβρας BOOL. Οι λογικοί (ή Boolean) τελεστές που χρησιμοποιούνται είναι οι:
.NOT.
.AND.
.OR.
.EQV.
.NEQV.
Η δράση τους περιγράφεται με τους "Πίνακες Αληθείας"
ως εξής:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Παραστάσεις τύπου LOGICAL
Οι παραστάσεις του τύπου LOGICAL είναι απλές ή σύνθετες. Οι απλές παραστάσεις μπορεί να είναι σταθερές τύπου LOGICAL, μεταβλητές τύπου LOGICAL ή "συγκριτικές" εκφράσεις. Οι "συγκριτικές" εκφράσεις έχουν την μορφή:
|
|
|
|
|
|
|
|
|
|
|
|
Παραδείγματα απλών συγκριτικών εκφράσεων:
X .LT. 5
I .EQ. 20
X+5 .GE. SQRT(Y)
B**2 -4*A*C .GE. 0
Οι τιμές των παραπάνω παραστάσεων είναι τύπου LOGICAL
(.TRUE. ή .FALSE.)
Εάν πχ η τιμή της μεταβλητής X
είναι 4.1 (μικρότερη του 5) τότε η πρώτη έκφραση έχει τιμή .TRUE.
Εάν πχ η τιμή της μεταβλητής I
είναι διάφορη του 20, τότε η τιμή της δεύτερης παράστασης είναι
.FALSE., κοκ.
Σύνθετες εκφράσεις τύπου LOGICAL αποτελούνται
από λογικές πράξεις μεταξύ απλών εκφράσεων.
Για παράδειγμα η παρακάτω παράσταση είναι σύνθετη έκφραση τύπου
LOGICAL. (Οι παρενθέσεις δεν
είναι απαραίτητες, απλώς καθιστούν ευκολότερη την ανάγνωση).
(X .LT. 5) .AND. (I .EQ. 20) .OR. (B**2 -4*A*C .GE. 0)
Οταν σε μιά εκφραση τύπου LOGICAL συμμετέχουν αριθμητικοί τελεστές, τελεστές σύγκρισης και λογικοί τελεστές ( Boolean) οι "πράξεις" εκτελούνται με την ακόλουθη σειρά:
I**2 + 10 .GE. 20 .AND. .NOT. (I .LT. 4)
έχει τιμή .TRUE., η δε παράσταση
I .EQ. 5 .OR. I .EQ. 2 έχει επίσης τιμή .TRUE.
Όμως η παράσταση
I .EQ. 5 .OR. 2
δεν είναι σωστή συντακτικά διότι υπολογίζεται
ως: (I .EQ. 5) .OR. 2
και το 2
δεν είναι λογική σταθερά; συνεπώς δεν μπορεί να συμμετάσχει στην
λογική πράξη .OR..
ΑΡΙΘΜΗΤΙΚΕΣ ΣΥΝΑΡΤΗΣΕΙΣ
Η Fortran παρέχει πολλές συναρτήσεις για υπολογισμούς πχ
της τετραγωνικής ρίζας, του ημιτόνου, συνημιτόνου, λογαρίθμων, κλπ.
Η τετραγωνική ρίζα για παράδειγμα υπολογίζεται από την συνάρτηση: SQRT(X)
όπου το όρισμα X
είναι είτε σταθερά, είτε μεταβλητή, είτε έκφραση τύπου REAL
ή DOUBLE PRECISION. Η
επιστρεφομένη τιμή είναι του ιδίου τύπου με το όρισμα. Για να υπολογιστεί
η τετραγωνική ρίζα του 7, πρέπει χρησιμοποιειθεί η έκφραση SQRT(7.0)
και όχι η SQRT(7), διότι
η σταθερά 7 είναι τύπου INTEGER
και όχι REAL (όπως
η σταθερά 7.0 ). Παρατίθεται
ένας πίνακας με ορισμένες συναρτήσεις που προσφέρονται από την Fortran.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Η εντολή ανάθεσης τιμών σε μεταβλητές έχει την παρακάτω γενική μορφή.
ΚΑΝΟΝΑΣ
Πρώτα υπολογίζεται η έκφραση
ΕΚΦΡΑΣΗ και
στην συνέχεια η τιμή της ανατίθεται στην μεταβλητή
ΜΕΤΑΒΛΗΤΗ.
Για παράδειγμα έστω ότι οι μεταβλητές X , Y και Ι, J έχουν οριστεί ως:
REAL X,Y
INTEGER I,J
και έστω οι εντολές ανάθεσης:
X = 7.45
Y = SQRT(49.0)
I = 31
J = I/2 + 2
X = X + Y
ΚΑΝΟΝΑΣ
Εάν μια τιμή τύπου INTEGER
ανατεθεί σε μια μεταβλητή τύπου
REAL τότε μετατρέπεται
η INTEGER τιμή
σε REAL και
στην συνέχεια υλοποιείται η ανάθεση.
Για παράδειγμα οι εντολές:
X = 7
Y = 5 + 3/2
έχουν ως αποτέλεσμα η μεταβλητή
X να πάρει την τιμή 7.0
και η μεταβλητή Y να
πάρει την τιμή 6.0 .
ΚΑΝΟΝΑΣ
Εάν μια τιμή τύπου REAL
ανατεθεί σε μια μεταβλητή τύπου INTEGER
τότε πρώτα αποκόπτεται το δεκαδικό
μέρος της τιμής και το ακέραιο μέρος της ανατίθεται στην INTEGER
μεταβλητή.
Για παράδειγμα οι εντολές:
X = 7.1
Ι = 3.14159
J = X/5.0 + 1.2
K = 1./X
έχουν ως αποτέλεσμα (εκτός του ότι η μεταβλητή X παίρνει την τιμή 7.1 )
Αναθέσεις μπορούν να γίνουν αντίστοιχα και για μεταβλητές τύπου
DOUBLE PRECISION, COMPLEX και
LOGICAL.
Η ανάθεση "τιμών" σε μεταβλητές τύπου CHARACTER
χρήζει περαιτέρω περιγραφής.
Ας θεωρήσουμε το παρακάτω παράδειγμα:
CHARACTER*6 CITY, NUMBER,
COLOR
CITY = 'IOANNINA'
NUMBER = 'ELEVEN'
COLOR = 'RED'
Και οι τρείς παραπάνω μεταβλητές είναι τύπου CHARACTER μήκους 6 χαρακτήρων.
NUMBER(2:6)='NTE'//'KA'
Η μεταβλητή NUMBER έχει τώρα
ως περιεχόμενα τους χαρακτήρες: ENTEKA
Είναι επίσης δυνατόν να έχουμε αναθέσεις ως εξής:
NUMBER(2:3) = NUMBER(5:6)
εφόσον τα πεδία ανάθεσης (2:3) και αναφοράς (5:6) δεν έχουν επικάλυψη.
Η παρακάτω ανάθεση είναι παράδειγμα εσφαλμένης χρήσης διότι τα πεδία (2:4) και (3:5) επικαλύπτονται.
NUMBER(2:4) = NUMBER(3:5)
Τέτοιου είδους αναθέσεις είναι προτιμότερο να αποφεύγονται.
1.5 ΕΙΣΟΔΟΣ
/ ΕΞΟΔΟΣ
Οι εντολές εισόδου/εξόδου θα περιγραφούν λεπτομερώς σε επόμενη
διάλεξη. Προς το παρόν θα περιοριστούμε σε μια περιγραφή της απλούστερης
μορφής εντολών εισόδου/ εξόδου (Ι/Ο) που υποστηρίζει η Fortran.
WRITE(*,*) list
όπου list η λίστα εξόδου,
δηλαδή μια σειρά, μεταβλητών, σταθερών ή και παραστάσεων των οποίων οι
τιμές είναι επιθυμητό να εμφανιστούν στην έξοδο.
Παρατίθεται ενα απλό πρόγραμμα και η έξοδος που παράγει για την
κατανόηση της λειτουργείας της εντολής PRINT.
Παρατηρείστε ότι κάθε εντολή PRINT
παράγει νέα γραμμή στην έξοδο.
Εάν αντικατασταθεί η εντολή PRINT*, με
την WRITE(*,*) τα αποτελέσματα
είναι ταυτόσημα.
PROGRAM TEST
CHARACTER*8 TODAY INTEGER DATE TODAY = 'Friday' DATE = 13 MONTH = 3 PRINT*, 'Today is ',TODAY,
'the ',DATE,'th'
END
|
Today is Friday the 13th
The full date is: 13 - 3 - 1998 |
WRITE(*,*)
Στην περίπτωση αυτή δημιουργούν στην έξοδο μια κενή γραμμή.
READ(*,*) list
όπου list η λίστα εισόδου, δηλαδή μια σειρά μεταβλητών που θα πάρουν τιμές από την γραμμή εισόδου (μέσω του πληκτρολογίου συνήθως).
ΚΑΝΟΝΕΣ
READ(*,*) X,Y,Z
είναι η:
125.4, 17.3, 88.0012
τότε η μεταβλητή X παίρνει την
τιμή 125.4 , η Y
την 17.3 και η Ζ
την τιμή 88.0012 .
Το ίδιο αποτέλεσμα θα προκαλούσε η γραμμή εισόδου χωρίς κόματα:
125.4 17.3 88.0012
και επίσης ο συνδοιασμός από τις παρακάτω δύο γραμμές εισόδου:
125.4
17.3 88.0012
Για μεταβλητές τύπου CHARACTER τα αντίστοιχα δεδομένα στην γραμμή εισόδου πρέπει να είναι εντός αποστρόφων εφόσον:
PROGRAM
FARCEL
WRITE(*,*)'TEMPERATURE IN FAHRENHEIT ? ' READ(*,*) FAR CELCIU = (FAR-32)*5./9. WRITE(*,*) ' FAHRENHEIT', ' CELCIUS ' WRITE(*,*) FAR,CELCIU END |
Παραθέτουμε παραδειγματικά στοιχεία εισόδου
και εξόδου του παραπάνω προγράμματος.
TEMPERATURE IN FAHRENHEIT ?
32 FAHRENHEIT CELCIUS 32.00000 0.0000000E+00 |