8 ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004) ιάλεξη 2 2.1 ΜΕΤΑΒΛΗΤΕΣ (ΜΕΡΟΣ Β) Στην προηγούµενη διάλεξη µάθαµε ότι µπορούµε να χρησιµοποιούµε τη ρητή ή την αυτονόητη δήλωση µεταβλητών (βλ. 1.3). Σε περίπτωση που δεν έχουµε ορίσει ρητά µία µεταβλητή, τότε η FORTRAN θα χρησιµοποιήσει αυτόµατα την αυτονόητη (implicit) δήλωση των µεταβλητών. Όµως η τακτική αυτή εγκυµωνεί πολλούς κινδύνους. Τι θα γινόταν αν κατά λάθος πληκτρολογούσουµε µία µεταβλητή που δεν υπάρχει στο πρόγραµµα µας; Σ αυτή την περίπτωση ο µεταφραστής (compiler) θα έδινε µία τυχαία τιµή στη µεταβλητή (συνήθως το µήδεν) και προφανώς η χρήση της σε µία αριθµητική παράσταση θα µας οδηγούσε σε λάθος αποτελέσµατα. Ένας τρόπος να αποφύγουµε τέτοια επιπόλαια λάθη είναι η χρήση της εντολής: Η εντολή αυτή µπαίνει ακριβώς µετά το program και µας αναγκαζει να δηλώνουµε όλες τις µεταβλητές που χρησιµοποιούµε ( = καµια αυτονόητη δήλωση). Αν κατά λάθος πληκτρολογήσουµε µία ανύπαρκτη µεταβλητή ο compiler θα µας το υποδείξει ως λάθος και έτσι θα έχουµε την ευκαιρία να το διορθώσουµε. Στο εξής σε όλα τα παραδείγµατα που θα παρουσιάζουµε θα χρησιµοποιούµε αυτή την εντολή. 2.2 ΕΝΤΟΛΗ parameter Σε περίπτωση που στο πρόγραµµα µας θέλουµε να ορίσουµε µία σταθερά, τότε αυτό µπορούµε να το κάνουµε µε την εντολή parameter Σύνταξη: parameter ( λίστα ονοµάτων = τιµή) ΠΑΡΑΤΗΡΗΣΗ: Η εντολή parameter µπαίνει µετά τη δήλωση του τύπου των σταθερών. Η τιµή που θα πάρουν οι σταθερές δεν µπορεί να αλλάξει κατά την εκτέλεση του προγράµµατος. π.χ real pi, f integer N parameter (pi=3.141592, N=100, f=3.2)
9 2.3 ΕΣΩΤΕΡΙΚΕΣ ΣΥΝΑΡΤΗΣΕΙΣ (intrinsic functions) Εκτός απο τις βασικές αριθµητικές πράξεις (+ - * / ) η FORTRAN 77 µας δίνει τη δυνατότητα να υπολογίσουµε και τις τιµές γνωστών µαθηµατικών συναρτήσεων. Οι συναρτήσεις αυτές ονοµάζονται εσωτερικές συναρτήσεις (intrinsic functions) και µπορούν να χρησιµοποιηθούν από κάθε πρόγραµµα γράφοντας απλά το όνοµα της συνάρτησης και δίνοντας όλα τα ορίσµατα που χρειάζονται: Όνοµα συνάρτησης (λίστα ορισµάτων) Μερικές απο τις πιο χρησιµές µαθηµατικές συναρτήσεις ειναι οι: Συνάρτηση Τετραγώνική ρίζα Απόλυτη τιµη: χ Εκθετικό: e x Φυσικός λογαριθµος: ln(x) Ηµίτονο: ηµ(x) Συνηµίτονο: συν(x) Εφαπτοµένη: εφ(x) Συνεφαπτοµένη: σφ(x) Ονοµα στη F77 sqrt(x) abs(x) exp(x) ln(x) sin(x) cos(x) tan(x) cotan(x) ΠΑΡΑΤΗΡΗΣΗ: Στις παραπάνω µαθηµατικές συναρτήσεις (εκτός την απόλυτη τιµή abs) τα ορίσµατα και το αποτέλεσµα της συνάρτησης είναι ΠΑΝΤΑ πραγµατικοί αριθµοί. Για τη συνάρτηση abs το όρισµα µπορεί να είναι ή πραγµατικός ή ακέραιος και το αποτελεσµα είναι του ίδιου τύπου µε το όρισµα. Άλλες χρήσιµες εσωτερικές συναρτήσεις είναι: Συνάρτηση Ονοµα στη F77 Τύπος ορισµατος Τύπος αποτέλεσµατος Μετατροπή σε ακέραιο int(x) Real integer (αποκοπή δεκαδ. ψηφ.) Μετατροπή σε πραγµατικό real(x) Integer real Μέγιστο ορισµάτων max(x1,x2, ) ή ολα integer ή όλα real Το ιδιο µε τα x1,x2, Ελάχιστο των ορισµάτων min(x1,x2, ) ΠΑΡΑ ΕΙΓΜΑ 1 Γράψτε ένα πρόγραµµα που θα υπολογίζει το µέγιστο και το ελάχιστο 5 πραγµατικών αριθµών. program maxmin c Το πρόγραµµα αυτό υπολογίζει το µέγιστο και το ελάχιστο 5 πραγµατικών c αριθµών a1,a2,a3,a4,a5 (inputs) c maximum (output): µέγιστο c minimum (output): ελάχιστο real a1,a2,a3,a4,a5, maximum, minimum
10 print*, ώστε 5 πραγµατικούς αριθµούς read*, a1, a2, a3, a4, a5 maximum = max(a1,a2,a3,a4,a5) minimum = min(a1,a2,a3,a4,a5) print*, Ο µέγιστος αριθµός είναι:,maximum print*, Ο ελάχιστος αριθµός είναι:,minimum ΠΑΡΑ ΕΙΓΜΑ 2 Γράψτε ένα πρόγραµµα που να υπολογίζει την τιµή της συνάρτησης: x 2 f ( x) = e + [sin( x) + sin( x)] + x program paradeigma real x, fx print*, ώστε ένα πράγµατικό αριθµό read*, x fx= exp(x) + ( cos(x) + sin(x) )**2 + abs(x) print*, Η τιµή της συνάρτησης είναι:, fx Αν υποθέσουµε τώρα οτι θέλαµε να γράψουµε ένα πρόγραµµα που να υπολόγιζε την αριθµητική παράσταση Α=f(x1)+f(x2)+f(x3), θα έπρεπε να τροποποιήσουµε το παραπάνω πρόγραµµα ως εξής: program paradeigma2 real x1, x2, x3, Α print*, ώστε 3 πράγµατικoύς αριθµούς read*, x1, x2, x3 Α= exp(x1) + ( cos(x1) + sin(x1) )**2 + abs(x1) & + exp(x2) + ( cos(x2) + sin(x2) )**2 + abs(x2) & + exp(x3) + ( cos(x3) + sin(x3) )**2 + abs(x3) print*, Η τιµή της αριθµητικής παράστασης είναι:, Α
11 Ο κώδικας έγινε πιο πολύπλοκος. Σίγουρα τα πράγµατα θα ήταν πολύ καλύτερα αν η f(x) ήταν εσωτερική συνάρτηση. Στην περίπτωση αυτή ο κώδικας θα ήταν πιο απλός το µόνο που θα έπρεπε να τροποποιήσουµε στο παραπάνω πρόγραµµα θα ήταν το fx = f(x1)+f(x2)+f(x3) Μπορεί η FORTRAN να µην έχει την f(x) ως εσωτερική συνάρτηση αλλά µας δίνει τη δυνατότητα να τη δηµιουργήσουµε! Οι συναρτήσεις που δηµιουργεί ο προγραµµατιστης ονοµάζονται εξωτερικές συναρτήσεις (external functions). Στην επόµενη παράγραφο θα µάθουµε τον τρόπο µε τον οποίο δηµιουργούµε και χρησιµοποιούµε τις εξωτερικές συναρτήσεις. 2.4 ΕΞΩΤΕΡΙΚΕΣ ΣΥΝΑΡΤΗΣΕΙΣ (external function) Μία εξωτερική συνάρτηση ορίζεται ως εξης: δήλωση function όνοµα (λίστα ορισµάτων) δήλωση λίστας ορισµάτων δήλωση µεταβλητών (αν χρειάζονται) όνοµα = αριθµητική παράσταση Για παράδειγµα η συνάρτηση f(x) της προηγούµενης παραγράφου ορίζεται ως:... real function f(x) real x f = exp(x) + ( cos(x) + sin(x) )**2 + abs(x) ΠΑΡΑΤΗΡΗΣΕΙΣ 1. Ο ορισµός των εξωτερικών συναρτήσεων πρέπει να γίνεται στο ίδιο αρχείο που υπάρχει και το κυρίως πρόγραµµα. Αν η συνάρτηση υπάρχει σε άλλο αρχείο, τότε πρέπει να το προσθέσουµε και αυτό στη διαδικασία της µετάφρασης. Για παράδειγµα, αν το κυρίως πρόγραµµα υπάρχει στο αρχείο prog.f και η συνάρτηση στο func.f, τότε η µετάφραση γίνεται ως εξής:
12 g77 prog.f func.f o prog.exe ΠΡΟΣΟΧΗ: Σε όλα τα αρχεία που συµπεριλαµβάνουµε στη µετάφραση πρέπει να υπάρχει µόνο ένα κυρίως πρόγραµµα. 2. Μία συνάρτηση που έχουµε ήδη ορίσει πέρα απο το κυρίως πρόγραµµα, µπορεί να την χρησιµοποιεί και οποιαδήποτε άλλη συνάρτηση που σκοπεύουµε να ορίσουµε. 3. Το όνοµα της συνάρτησης εµφανίζεται το ίδιο ακριβώς και στο αρίστερο µέλος της ισότητας πριν το. 4. Η συνάρτηση πρέπει να δηλώνεται και στο κυρίως πρόγραµµα. ΠΑΡΑ ΕΙΓΜΑ Γράψτε ένα πρόγραµµα που θα υπολογίζει την τιµή της συνάρτησης: ( x + y) g( x, y) = e. program paradeigma real x, y, g print*, ώστε 2 πράγµατικoύς αριθµούς read*, x, y print*, Η τιµή της συνάρτησης είναι:, g(x,y) c Ορισµός της συνάρτησης real function g(x, y) real x, y g = exp(- ( abs(x) + y ) ) 2.5 ΕΝΤΟΛΗ ΕΛΕΓΧΟΥ IF Μερικές φορές στα προγράµµατα µας χρειάζεται να επιλέξουµε µία συγκεκριµένη κατεύθυνση αντί για κάποια άλλη. Αυτό µπορεί να γίνει µε τη χρήση της εντολής if. H γενική σύνταξη του if έχει ως εξής: if (συνθήκη) then εντολές 1 if
13 Σηµασία: Αν ισχύει η συγκεκριµένη συνθήκη που εχουµε µέσα στην παρένθεση, τότε ο υπολογιστής θα εκτελεσει τις εντολές 1. Το if κλεινει πάντα µε το if. Σε περίπτωση που έχουµε µόνο µία εντολή να εκτελέσουµε, τότε το if µπορεί να γραφτεί και ως: If (συνθήκη) εντολή Σε περίπτωση που εχουµε περισσότερες από µία συνθήκες να ελεγξουµε τότε η σύνταξη του if έχει ως εξης: if (1 η συνθήκη) then Εντολές 1 else if (2 η συνθήκη) then Εντολές 2 else if... else Εντολές if Σηµασία: Αν ισχύει η πρώτη συνθήκη, τότε ο υπολογιστής θα εκτελέσει τις εντολές 1, Αλλιώς αν (elseif) ισχύει η δεύτερη, τότε τις εντολές 2 κοκ. Σε περίπτωση που δεν ισχύει καµία απο τις προηγούµενες συνθήκες µπορούµε, αν είναι αναγκαίο, να χρησιµοποιήσουµε µόνο το else. Τέλος, και σε αυτή την περίπτωση το if κλείνει µε το if. ΤΕΛΕΣΤΕΣ ΣΧΕΣΕΙΣ = (ίσο µε):.eq. (equal to) (διαφορετικό από):.ne. ( not equal to) > (µεγαλύτερο από).gt. (gteater than) (µεγαλύτερο από ή ίσο από).ge. (greater than or equal to) < (µικρότερο από).lt. (less than) (µικρότερο από ή ίσο από).le. (less than or equal to) Επίσης, µπορούµε να συνδέσουµε συνθήκες µεταξύ τους µε τους λογικούς τελεστές και. and. ή.or. ΠΑΡΑΤΗΡΗΣΗ: Η σειρά προτεραιότητας των εντολών στη συνθήκη είναι: Πρώτα οι αριθµητικές πράξεις, στη συνέχεια οι τελεστές σχέσεις και τέλος οι λογικοί τελεστές.and. και.or. ΠΑΡΑ ΕΙΓΜΑ Γράψτε την συνάρτηση cos( x) + x, αν -1 x < 1 f ( x) = tan( x) + sin( x), αν x < 1ή x 1
14 real function f(x) real x if( (x.ge.-1.).and. (x.lt.1.) ) then f=cos(x)+abs(x) else f= tan(x)+sin(x) if Βουλγαράκης Νίκος (2/3/03)