ΔΙΑΛΕΞΗ # 1


Θέματα συζήτησης
Τύποι Δεδομένων
Σταθερές και μεταβλητές
Πράξεις και συναρτήσεις
Ανάθεση τιμών
Είσοδος/Έξοδος


 
1.1 ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

Η  Fortran υποστηρίζει τους παρακάτω τύπους δεδομένων:

  1. INTEGER
  2. REAL
  3. DOUBLE PRECISION
  4. COMPLEX
  5. CHARACTER
  6. LOGICAL
Οι πρώτοι τέσσερεις  είναι αριθμητικοί και χρησιμοποιούνται αντίστοιχα για την επεξεργασία: Ο τύπος  CHARACTER χρησιμοποιείται για επεξεργασία αλφαριθμητικών χαρακτήρων.
Ο τύπος  LOGICAL χρησιμοποιείται για επεξεργασία "λογικών προτάσεων".

 

 1.2 ΣΤΑΘΕΡΕΣ ΚΑΙ ΜΕΤΑΒΛΗΤΕΣ
 
Μια σταθερά τύπου INTEGER είναι ένας ακέραιος αριθμός (θετικός, αρνητικός ή μηδέν).
Στην  Fortran οι ακέραιες σταθερές αναπαρίστανται σαν μιά σειρά από ψηφία, χωρίς κόματα ή δεκαδικές τελείες.
Οι αρνητικοί ακέραιοι αρχίζουν απαραίτητα με το πρόσημο "μείον" (-).
Οι θετικοί αριθμοί μπορεί να αρχίζουν (αλλά όχι απαραίτητα) με το πρόσημο "συν" (+).

Οι παρακάτω ακέραιες σταθερές  είναι γραμμένες  σύμφωνα  με τους κανόνες της Fortran.

           0
         137
       -1520
      +17890
 Οι  παρακάτω σταθερές είναι γραμμένες με τρόπο που  δεν ακολουθεί  τους κανόνες της Fortran για τους λόγους που σημειώνονται.

      77,900                           Η σταθερά περιέχει κόμα.
          13.7                           H σταθερά περιέχει δεκαδική τελεία.
      --1520                           H σταθερά  έχει δύο πρόσημα.
        17890-                        H σταθερά  έχει το πρόσημο στο τέλος.

Μιά σταθερά τύπου REAL αναπαριστά έναν πραγματικό αριθμό. Υπάρχουν δύο τρόποι γραφής:

Η συνήθης αλγεβρική μορφή είναι ένας αριθμός που περιέχει πάντα την δεκαδική τελεία, αλλά όχι κόμα.
Παραδείγματα σωστής γραφής σταθερών τύπου  REAL είναι: Παραδείγματα λανθασμένης γραφής σταθερών τύπου  REAL είναι: Η εκθετική μορφή  αποτελείται από ένα ακέραιο ή δεκαδικό αριθμό και απαραίτητα ακολουθείται από το σύμβολο Ε και ένα ακέραιο αριθμό (θετικό, αρνητικό ή μηδέν).  Ο συμβολισμός αυτός γίνεται σαφής με την παράθεση ορισμένων παραδειγμάτων.
 
 Ισοδύναμες αριθμητικές εκφράσεις
Εκθετική γραφή Fortran
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
 
Παρατηρούμε ότι  το σύμβολο Ε ακολουθούμενο από έναν ακέραιο, ισοδυναμεί με έναν παράγοντα ίσον προς τον αριθμό 10 υψωμένο στην δύναμη που υποδηλώνεται από τον ακέραιο που ακολουθεί. Δηλαδή  η παράσταση Ε+3 ισοδυναμεί με 103 = 1000.
Οι αριθμοί τύπου  REAL που υποστηρίζονται έχουν ένα μέγιστο αριθμό σημαντικών ψηφίων. Εάν η "λέξη" που χρησιμοποιείται είναι μήκους 32-bit,  τότε τα σημαντικά ψηφία είναι συνήθως 7 ή 8. Αντίστοιχα εάν η "λέξη" είναι μήκους 64-bit (όπως πχ στους υπολογιστές  Cray, CDC-Cyber, ETA ...) τα σημαντικά ψηφία διπλασιάζονται (περίπου 14 με 15).
 

Μιά σταθερά τύπου 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 αναπαριστά έναν μιγαδικό αριθμό. Ενας μιγαδικός αριθμός αλγεβρικά γράφεται ως:

α + βi
όπου  α και β πραγματικοί αριθμοί και  η φανταστική μονάδα. ( i2 = -1 ).
Στην Fortran οι μιγαδικές σταθερές γράφονται με την μορφή ενός διατεταγμένου ζεύγους (a,b) όπου οι σταθερές a και b είναι τύπου  REAL και αντιστοιχούν στο πραγματικό και φανταστικό μέρος της μιγαδικής σταθεράς.
 
 
Παραδείγματα γραφής μιγαδικών σταθερών
Γραφή  Fortran
Αλγεβρική μορφή
(1.0, 1.0) 1 + i
(-7.6, 1.2) -7.6 + 1.2i
(1.887, -199.022) 1.887 - 199.022i
 

Μια σταθερά τύπου CHARACTER αναπαριστά ένα σύνολο χαρακτήρων (πχ γραμμάτων κεφαλαίων ή μικρών, αριθμών και άλλων ειδικών χαρακτήρων που παραθέτονται στον παρακάτω πίνακα).
 
Το Σύνολο χαρακτήρων της  Fortran
ΧΑΡΑΚΤΗΡΑΣ
ΠΕΡΙΓΡΑΦΗ
ΧΑΡΑΚΤΗΡΑΣ
ΠΕΡΙΓΡΑΦΗ
0, ... , 9
Ψηφία
:
’νω κάτω τελεία
A, ... ,Z
Κεφαλαία γράμματα
=
Ίσον
a, ... ,z
Μικρά γράμματα
!
Θαυμαστικό
'
Απόστροφος
?
Εμπορικό "και"
"
Εισαγωγικά
$
Δολλάριο
(
Αριστερή παρένθεση
;
Ελληνικό ερωτηματικό
)
Δεξιά παρένθεση
?
Μικρότερο
*
Αστερίσκος
>
Μεγαλύτερο
+
Συν
%
Επί τοις εκατό
-
Πλην
?
Λατινικό ερωτηματικό
/
Κάθετος
,
Κόμα
κενό (αόρατο)
Κενός χαρακτήρας
.
Τελεία
 
Οι χαρακτήρες που αποτελούν μια σταθερά τύπου CHARACTER πρέπει να γράφονται ανάμεσα από δύο αποστρόφους. Το "μήκος" μιας  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 χρησιμοποιεί   συμβολικά ονόματα   για να αναφέρεται στα προγράμματα, υποπρογράμματα, στίς απλές μεταβλητές, στους πίνακες ακόμα και σε σταθερές. Τα ονόματα αυτά πρέπει να συμορφώνονται με τους παρακάτω κανόνες:

  1. Όλα τα ονόματα αρχίζουν από ένα γράμμα της Αγγλικής αλφαβήτου (είτε κεφαλαίο είτε μικρό).
  2. Ο μέγιστος αριθμός χαρακτήρων για κάθε όνομα είναι έξη (6).

  3. (Οι περισσότεροι μεταγλωτιστές πάντως υποστηρίζουν περισσότερους)
  4. Οι υπόλοιποι χαρακτήρες μπορεί να είναι είτε γράμματα είτε αριθμοί.
  5. Μικρά ή κεφαλαία γράμματα είναι ταυτόσημα όταν είναι μέρος ενός συμβολικού ονόματος.
Για παράδειγμα τα ονόματα:

   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 παρέχει την χρήση παραμέτρων. Οι παράμετροι είναι σταθερές με όνομα.
Για παράδειγμα ή εντολή:

PARAMETER (PI = 3.14)
ορίζει την παράμετρο  PI  και την αντιστοιχεί με την σταθερά  3.14.  Η παράμετρος αυτή μπορεί να χρησιμοποιηθεί αντί του 3.14 σε οποιοδήποτε σημείο του προγράμματος.
Η παράμετρος δεν είναι μεταβλητή, η τιμή της καθορίζεται μια μόνο φορά με την παραπάνω εντολή και δεν μπορεί να αλλάξει στην συνέχεια του προγράμματος.
Οι παράμετροι χρησιμοποιούνται συχνά κυρίως για τους παρακάτω λόγους: Το συμβολικό όνομα που χρησιμοποιείται για την κάθε παράμετρο πρέπει να είναι του ιδίου τύπου με την σταθερά την οποία και αντικαθιστά.

Παράδειγμα σωστής χρήσης:

           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.
 

1.3  ΠΡΑΞΕΙΣ  ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ
 

Αριθμητικές πράξεις

Η  Fortran  επεξεργάζεται τις μεταβλητές και τις σταθερές των διαφόρων τύπων  με κατάλληλες πράξεις και συναρτήσεις.
Ο παρακάτω πίνακας παραθέτει τον τρόπο γραφής των τεσσάρων αριθμητικών  πράξεων και την ύψωση σε δύναμη σε αλγεβρική μορφή και σε εντολές  Fortran.
 
ΑΡΙΘΜΗΤΙΚΕΣ ΠΡΑΞΕΙΣ
ΠΡΟΣΘΕΣΗ
ΑΦΑΙΡΕΣΗ
ΠΟΛΛΑΠΛΑΣΙΑΣΜΟΣ
ΔΙΑΙΡΕΣΗ
ΥΨΩΣΗ ΣΕ ΔΥΝΑΜΗ
 A + B
A - B
A x
A / B
AB 
A+B
A-B
A*B
A/B
A**B
 

ΚΑΝΟΝΑΣ
    Οταν δύο σταθερές ή μεταβλητές ενός τύπου συμμετέχουν σε μια από τις τέσσερεις βασικές αριθμητικές πράξεις, το αποτέλεσμα είναι του ιδίου τύπου.

Για παράδειγμα το άθροισμα των σταθερών (τύπου REAL4.0+5.0  δίνει ως αποτέλεσμα την σταθερά  9.0 (τύπου REAL), ενώ το αθροισμα των σταθερών (τύπου INTEGER4+5 δίνει ως αποτέλεσμα την σταθερά  9 (τύπου INTEGER).  Στην πρόσθεση, στην αφαίρεση και στον πολλαπλασιασμό ο κανόνας αυτός δεν φαίνεται να είναι σημαντικός. Στην διαίρεση όμως έχει σαφέστατη και σημαντική διαφορά. Οι παραστάσεις:

έχουν διαφορετική τιμή. Η μεν πρώτη αντιστοιχεί στην διαίρεση 9.0/2.0 = 4.5, η δέ δεύτερη στο ακέραιο μέρος του αποτελέσματος της διαίρεσης δηλαδή [9/2] = [4.5] = 4 .
Με την ίδια λογική  η παράσταση 1.0/2.0 έχει τιμή 0.5, η δε 1/2 έχει τιμή [0.5] =  0 .
Πράξεις  μεταξύ σταθερών  COMPLEX και REAL και  μεταξύ  COMPLEX και INTEGER δίνουν ως αποτέλεσμα  COMPLEX.
 

ΚΑΝΟΝΑΣ
    Οταν μια σταθερά ή μεταβλητή τύπου ΙΝ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)
Επιστρέφει τον ASCII κώδικα του χαρακτήρα που περιέχεται στην μεταβλητή  A
CHARACTER*1 INTEGER
CHAR(I)
Επιστρέφει τον χαρακτήρα που έχει  ASCII κώδικα την τιμή της μεταβλητής  I
INTEGER CHARACTER*1
ΙNDEX(A,B)
Επιστρέφει την θέση της αρχής του B εντός του Α, ή μηδέν εάν το B δεν 
περιέχεται στο Α
CHARACTER INTEGER
 

Πράξεις με σταθερές τύπου LOGICAL

Οι πράξεις μεταξύ σταθερών τύπου LOGICAL χρησιμοποιούν διαφορετικά σύμβολα (λογικούς τελεστές) που αντιστοιχούν στα σύμβολα της άλγεβρας  BOOL.  Οι λογικοί (ή  Boolean) τελεστές που χρησιμοποιούνται είναι οι:

    .NOT.
    .AND.
    .OR.
    .EQV.
    .NEQV.

Η δράση τους περιγράφεται με τους  "Πίνακες Αληθείας" ως εξής:
 

L
.NOT. L
.TRUE.
.FALSE.
.FALSE.
.TRUE.
 
 
L
M
L .AND. M
L .OR. M
L .EQV. M
L .NEQV. M
.TRUE.
.TRUE.
.TRUE.
.TRUE.
.TRUE.
.FALSE.
.TRUE.
.FALSE.
.FALSE.
.TRUE.
.FALSE.
.TRUE.
.FALSE.
.TRUE.
.FALSE.
.TRUE.
.FALSE.
.TRUE.
.FALSE.
.FALSE.
.FALSE.
.FALSE.
.TRUE.
.FALSE.
 
Ο τελεστής  .NEQV. απαντάται σε ορισμένους μεταγλωτιστές με το non-standard όνομα  .XOR. ( = eXclusive OR ).

Παραστάσεις τύπου LOGICAL

Οι παραστάσεις  του τύπου  LOGICAL είναι απλές ή σύνθετες. Οι απλές παραστάσεις μπορεί να είναι σταθερές τύπου  LOGICAL, μεταβλητές τύπου  LOGICAL ή  "συγκριτικές" εκφράσεις.  Οι "συγκριτικές" εκφράσεις έχουν την μορφή:


ΕΚΦΡΑΣΗ     ΤΕΛΕΣΤΗΣ-ΣΥΓΚΡΙΣΗΣ     ΕΚΦΡΑΣΗ


Οι τελεστές σύγκρισης παρατίθενται.
 
ΤΕΛΕΣΤΗΣ                                   ΣΗΜΑΣΙΑ
.LT.
Μικρότερο
.GT.
Μεγαλύτερο
.EQ.
Ίσο
.LE.
Μικρότερο ή Ισο
.GE.
Μεγαλύτερο ή Ισο
.NE.
Διάφορο
 

Παραδείγματα απλών συγκριτικών εκφράσεων:

    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) οι "πράξεις" εκτελούνται με την ακόλουθη σειρά:

  1.  Αριθμητικές πράξεις
  2.  Συγκρίσεις
  3.  Λογικές πράξεις με την εξής προτεραιότητα: .NOT., .AND., .OR., .EQV. (ή  .NEQV.)
Εάν πχ  η μεταβλητή  I   έχει τιμή  5 τότε η παράσταση

     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
και το  δεν είναι λογική σταθερά;  συνεπώς δεν μπορεί να συμμετάσχει στην λογική πράξη  .OR..
 

ΑΡΙΘΜΗΤΙΚΕΣ  ΣΥΝΑΡΤΗΣΕΙΣ

Η  Fortran παρέχει πολλές συναρτήσεις για υπολογισμούς πχ της τετραγωνικής ρίζας, του ημιτόνου, συνημιτόνου, λογαρίθμων, κλπ.
Η τετραγωνική ρίζα για παράδειγμα υπολογίζεται από την συνάρτηση: SQRT(X) όπου το όρισμα  είναι είτε σταθερά, είτε μεταβλητή, είτε έκφραση τύπου REAL ή DOUBLE PRECISION. Η επιστρεφομένη τιμή είναι του ιδίου τύπου με το όρισμα.  Για να υπολογιστεί η τετραγωνική ρίζα του 7, πρέπει χρησιμοποιειθεί η έκφραση  SQRT(7.0) και  όχι η  SQRT(7), διότι η σταθερά  7 είναι τύπου INTEGER και όχι REAL (όπως η σταθερά  7.0 ). Παρατίθεται ένας πίνακας με ορισμένες συναρτήσεις που προσφέρονται από την Fortran.
 
 
ΜΕΡΙΚΕΣ  ΣΥΝΑΡΤΗΣΕΙΣ  ΠΟΥ  ΠΡΟΣΦΕΡΕΙ  Η  FORTRAN - 77
ΣΥΝΑΡΤΗΣΗ
ΠΕΡΙΓΡΑΦΗ
ΤΥΠΟΣ ΟΡΙΣΜΑΤΟΣ
ΤΥΠΟΣ ΑΠΟΤΕΛΕΣΜΑΤΟΣ
ABS(X)
 Απόλυτη τιμή του x
 REAL / INTEGER
ΩΣ ΤΟ ΟΡΙΣΜΑ
COS(X)
 Συνημίτονο x ακτινίων
REAL
ΩΣ ΤΟ ΟΡΙΣΜΑ
EXP(X)
ex 
REAL
ΩΣ ΤΟ ΟΡΙΣΜΑ
INT(X)
 Ακέραιο μέρος του x
REAL
INTEGER
LOG(X)
 Νεπέρειος λογάριθμος του x
REAL
ΩΣ ΤΟ ΟΡΙΣΜΑ
MAX(X1,X2,...,XN)
 Μέγιστος εκ των x1,x2,...
REAL / INTEGER
ΩΣ ΤΑ ΟΡΙΣΜΑΤΑ
MIN(X1,X2,...,XN)
 Ελάχιστος  εκ των x1,x2,...
REAL / INTEGER
ΩΣ ΤΑ ΟΡΙΣΜΑΤΑ
MOD(X,Y)
 X-INT(X/Y)*Y
REAL / INTEGER
ΩΣ ΤΑ ΟΡΙΣΜΑΤΑ
NINT(X)
 Πλησιέστερος ακέραιος του x
REAL
INTEGER
REAL(X)
 Μετατροπή INTEGER σε REAL
INTEGER
REAL
SIN(X)
 Hμίτονο x ακτινίων
REAL / INTEGER
ΩΣ ΤΟ ΟΡΙΣΜΑ
SQRT(X)
Τετραγωνική ρίζα του x 
REAL
ΩΣ ΤΟ ΟΡΙΣΜΑ
TAN(X)
Εφαπτομένη x ακτινίων
REAL
ΩΣ ΤΟ ΟΡΙΣΜΑ
 
 Η Fortran προσφέρει μιά πληθώρα συναρτήσεων πέραν των ανωτέρω οι οποίες περιγράφονται στον πίνακα  Συναρτήσεις Fortran.

 

1.4 ΑΝΑΘΕΣΗ ΤΙΜΩΝ

Η εντολή ανάθεσης τιμών σε μεταβλητές έχει την παρακάτω γενική μορφή.



        ΜΕΤΑΒΛΗΤΗ = ΕΚΦΡΑΣΗ



Όπου  ΕΚΦΡΑΣΗ μπορεί να είναι μια σταθερά, μια μεταβλητή ή μια ολόκληρη παράσταση που να περιέχει πράξεις και συναρτήσεις.

ΚΑΝΟΝΑΣ
Πρώτα υπολογίζεται η έκφραση  ΕΚΦΡΑΣΗ και στην συνέχεια η τιμή της ανατίθεται στην μεταβλητή  ΜΕΤΑΒΛΗΤΗ.

Για παράδειγμα έστω ότι οι μεταβλητές  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 χαρακτήρων.

Επίσης αναθέσεις μπορούν να γίνουν και σε ένα τμήμα μόνο μιάς μεταβλητής τύπου CHARACTER.

    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.
 

Εντολές Εξόδου:

            PRINT *, list

     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' 
     PRINT*, 'The full date is:',DATE,' -',MONTH,' -',1998 

     END 
 

 
 
 
ΕΞΟΔΟΣ
Today is Friday  the   13th 
The full date is:  13 -  3 -  1998 
 
 
Οι εντολές  PRINT*, και WRITE(*,*)  μπορούν να συνταχθούν και χωρίς την λίστα εξόδου ως εξής:
 
     PRINT *

     WRITE(*,*)

Στην περίπτωση αυτή δημιουργούν στην έξοδο μια κενή γραμμή.

Εντολές Εισόδου:

            READ *, list

     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 τα αντίστοιχα δεδομένα στην γραμμή εισόδου πρέπει να είναι εντός αποστρόφων εφόσον:

  1. Εκτείνονται σε περισσότερες της μιάς γραμμών εισόδου
  2. Περιέχουν κενά, κόματα ή καθέτους ( / )
  3. Αρχίζουν με απόστροφο ( ' ), ή εισαγωγικά ( " ), ή απο μια σειρά ψηφίων ακολουθούμενων  από αστερίσκο ( * ).
ειδάλλως μπορούν να παρατεθούν απλά χωρίς την χρήση αποστρόφων.

Παράδειγμα

Το παρακάτω πρόγραμμα μετατρέπει θερμοκρασίες της κλίμακας Fahrenheit σε βαθμούς της κλίμακας  Celcius.
Η αλγεβρική σχέση για την μετατροπή δίδεται από:

                                  
 
        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