ΚΕΦΑΛΑΙΟ 4ο Α. Το περιβάλλον της Microsoft Fortran Powerstation Μία πρώτη ταξινόµηση των γλωσσών προγραµµατισµού σχετίζεται µε το επίπεδο της µηχανής για το οποίο προγραµµατίζει κάποιος. Έτσι διακρίνουµε τις: Γλώσσες προγραµµατισµού Χαµηλού Επιπέδου Γλώσσα Μηχανής (Machine language) και Συµβολική Γλώσσα (Assembly) και τις Γλώσσες προγραµµατισµού Υψηλού Επιπέδου Οι γλώσσες προγραµµατισµού υψηλού επιπέδου περιέχουν εντολές κατάλληλες, ώστε ο προγραµµατιστής να είναι σε θέση να συντάξει ένα πρόγραµµα σε µορφή κατανοητή, αλλά και να µπορεί να καταλάβει εύκολα το περιεχόµενο ενός άλλου προγράµµατος. Οι εντολές είναι στην Αγγλική και µας δίνουν να καταλάβουµε τι ακριβώς κάνει το πρόγραµµα. Τα κυριότερα πλεονεκτήµατα των γλωσσών προγραµµατισµού υψηλού επιπέδου είναι τα ακόλουθα: - ίνουν τη δυνατότητα ενός φυσικότερου τρόπου έκφρασης των προβληµάτων. - Ο κώδικας είναι ανεξάρτητος του Η/Υ που χρησιµοποιείται. - Τα προγράµµατα είναι κατανοητά, αλλά και εύκολο να διορθωθούν (debugging) και να συντηρηθούν (maintenance). Για τη σύνταξη και εκτέλεση ενός προγράµµατος σε γλώσσα υψηλού επιπέδου είναι απαραίτητο, όπως παρουσιάζεται στο σχήµα 4.1, να γίνουν τα επόµενα βήµατα: Σύνταξη (editing) του προγράµµατος σε γλώσσα υψηλού επιπέδου µε κατάλληλο λογισµικό που καλείται συντάκτης' (editor) και σύµφωνα πάντα µε τους κανόνες της γλώσσας. Το πρόγραµµα που προκύπτει ονοµάζεται πηγαίος κώδικας' (source code). Μεταγλώττιση (compilation) του προγράµµατος από µεταγλωττιστή (compiler) από γλώσσα υψηλού επιπέδου σε γλώσσα µηχανής. Ο κώδικας που προκύπτει καλείται αντικειµενικός κώδικας' (object code), αλλά δεν µπορεί να τρέξει γιατί χρειάζεται η Σύνδεση (linking) του αντικειµενικού κώδικα µε τις βιβλιοθήκες της γλώσσας (αρχεία.lib ή.dll ή.obj). Οι βιβλιοθήκες περιέχουν επεξηγήσεις των διαφόρων συναρτήσεων και συµβόλων της γλώσσας. Το πρόγραµµα που προκύπτει είναι ο εκτελέσιµος κώδικας' (.exe). Πρέπει να σηµειώσουµε εδώ ότι για κάθε επεξεργαστή και κάθε γλώσσα υπάρχει διαφορετικός µεταγλωττιστής. 52
Editor Source code Compiler Object code Libraries Linker Executable code Σχήµα 4.1 ιαδικασία δηµιουργίας εκτελέσιµου κώδικα Η FORTRAN (FORmula TRANslator) (1957) είναι από τις πλέον γνωστές γλώσσες προγραµµατισµού υψηλού επιπέδου για επιστηµονικές εφαρµογές. Εµείς θα ασχοληθούµε µε την τελευταία έκδοση της γλώσσας, την FORTRAN 90, και θα γνωρίσουµε, ως ένα βαθµό, το περιβάλλον του Developer Studio και της Fortran Powerstation της Microsoft. Eπιλέγουµε Start-Programs-Fortran PowerStation 4.0-Developer Studio και εµφανίζεται στην οθόνη το περιβάλλον της Fortran. Με File-New-Text File είµαστε σε θέση να πληκτρολογήσουµε ένα νέο πρόγραµµα ακολουθώντας τους κανόνες της γλώσσας. Μετά το τέλος της πληκτρολόγησης του προγράµµατος, αυτό πρέπει να αποθηκευτεί στον προσωπικό µας κατάλογο µε κάποιο όνοµα και την κατάληξη.f90, π.χ. prog1.f90. Στη συνέχεια ακολουθεί η διαδικασία της µεταγλώττισης. Πρόκειται για τη µορφή του προγράµµατος σε γλώσσα µηχανής, την οποία µπορεί να εκτελέσει ο υπολογιστής. Αυτό επιτυγχάνεται µέσα από το µενού Build και την επιλογή Build. Αν η µεταγλώττιση ολοκληρωθεί χωρίς λάθη, τότε δηµιουργείται αυτόµατα το πρόγραµµα prog1.exe, το οποίο είναι έτοιµο για εκτέλεση επιλέγοντας Build-Execute. Μετά το τέλος της εργασίας θα πρέπει ο χρήστης να κλείσει το workspace (File-Close Workspace) που άνοιξε η γλώσσα προγραµµατισµού για να τρέξει το συγκεκριµένο πρόγραµµα. 53
B. ηλώσεις µεταβλητών. Ανάπτυξη και εκτέλεση απλών προγραµµάτων Απαραίτητες γνώσεις: Τύποι δεδοµένων: Integer, Real, Complex, Character, Logical Απόδοση αρχικών τιµών στις µεταβλητές κατά τη δήλωσή τους υαδικοί τελεστές (πράξεις): +, -, *, /, ** υαδικοί τελεστές συσχέτισης: ==, /=, <, <=, >, >= υαδικοί τελεστές (λογικοί):.not.,.end.,.or.,.eqv.,.neqv. Συναρτήσεις: LOG10, LOG, SQRT, COS, SIN, TAN, EXP, ABS Οι εντολές: WRITE(*,*), READ(*,*), PRINT Ο Τελεστής = στη Fortran Η έκφραση Α=Β στη Fortran διαβάζεται ως εξής: Απόδοση στη µεταβλητή Α την τιµή της έκφρασης Β Όπου Α µια απλή µεταβλητή στην οποία επιθυµούµε να αποδώσουµε µια τιµή και Β µια µεταβλητή η µια έκφραση όπου η τιµή της είναι γνωστή. ΠΑΡΑ ΕΙΓΜΑΤΑ: Α=Α+5 Α+3=5 Α**2=16 Προφανώς από µαθηµατικής άποψης η προηγούµενη σχέση είναι λάθος. Στη Fortran είναι σωστή καθώς υπονοείται το Α Α+5. ηλαδή στη µεταβλητή Α αποδίδεται η τιµή που είχε, αυξηµένη κατά 5. Από µαθηµατικής άποψης η σχέση Α+3=5 είναι ορθή και επιλύοντας την έχουµε Α=2. Στη Fortran είναι λάθος καθώς στο αριστερό µέλος της «ισότητας» έχουµε έκφραση και όχι µια µεταβλητή. λάθος Α = Α**2+log(A) Β/2 Ορθή στην περίπτωση που οι τιµές των Α και Β είναι γνωστές πριν από την εκτέλεση της εντολής. Ασκήσεις 1. Ποια από τα παρακάτω ονόµατα µεταβλητών είναι δεκτά. ικαιολογήστε την απάντησή σας σε περίπτωση που αυτή είναι αρνητική. G00D, GOOD, ELSE, G00d, BAD, A+B, GJ6, A123, J12, MARY_, P2.5, A*P, A(1), Vougiou klaki, Τάκης, P@pandreou, Mitso-takis, ThaPerassoArraghe, OxiVevaia. 54
2. Ποιες από τις παρακάτω εκφράσεις είναι σωστές στη FORTRAN; A = A + 5 A = A 5. = 3. A * *2 2. * A * *2 = A * A A = 6. 3. Τα παρακάτω δύο προγράµµατα είναι όµοια µε µόνη διαφορά την εναλλαγή της 6 ης µε την 7 η γραµµή. Τι τυπώνουν τα προγράµµατα αυτά; PROGRAM FIRST1 IMPLICIT NONE REAL(4):: A,B,C A=5.; B=3.; C=0. A=A+2. B=(1/2)*B+C-B C=(2/3)*C+B+6.*B*C*A A=(A**2+B*C)/2.-19.5 B=B**3+C*(4/3) C=C**2-B**2 PRINT*, A,B,C END PROGRAM FIRST1 PROGRAM FIRST2 IMPLICIT NONE REAL(4):: A,B,C A=5.; B=3.; C=0. A=A+2. C=(2/3)*C+B+6.*B*C*A B=(1/2)*B+C-B A=(A**2+B*C)/2.-19.5 B=B**3+C*(4/3) C=C**2-B**2 PRINT*, A,B,C END PROGRAM FIRST2 4. Το παρακάτω πρόγραµµα υπολογίζει τον όγκο µιας σφαίρας χρησιµοποιώντας τη V = 4π 3 x + y + z. Ποιες από τις µεταβλητές A,B,C,D,E,F,G,I, 2 2 2 σχέση ( ) 32 πιστεύετε ότι υπολογίζουν σωστά τον όγκο της σφαίρας; PROGRAM VOL IMPLICIT NONE REAL(4):: X,Y,Z,PI REAL:: A,B,C,D,E,F,G,R1,R2,R3 INTEGER:: I PI=4.*ATAN(1.) PRINT*, DOSE X,Y,Z READ*,X,Y,Z R1=SQRT(X**2+Y**2+Z**2) R2=(X**2+Y**2+Z**2)**(1/2) R3=(X*X+Y*Y+Z*Z)**(1./2.) A=4*PI/3*R1**3 B=4*PI*R2**3/3 C=(4.*PI/3.)*R2**3 D=(4*3.14*R3**3)/3. I=4.*PI*R1**3/3. E=(4.*PI/3.)*(X**2+Y**2+Z**2)**(3/2) F=(4/3)*PI*(X**2+Y**2+Z**2)**(3./2.) G=4.*PI*(X**2+Y**2+Z**2)**(3./2.)/3.. PRINT*, A,B,C,D,E,F,G,I END PROGRAM VOL 55
5. Το πρόγραµµα που ακολουθεί εµπεριέχει µια σειρά από εσκεµµένα λάθη. Βρείτε τα λάθη και διορθώστε το πρόγραµµα. PROGRAM 1PRAXEIS IMPICIT NONE REAL(4), A1,B1,1A,C1,C2 1A=5. INTEGER(8):: I,J,3_K,L READ*, A1,B1 A1+B1=C1 C2=A1*B1+1A I=1. J=2. 3_K=7 L=3*((I+J)**2/2-3_K PRINT, A,C1,C2 PRINT, I.J,K_3,L END PROGRAM 1PRAXEIS 6. Να γραφούν οι παρακάτω αλγεβρικές παραστάσεις χωρίς τη χρήση περιττών παρενθέσεων. 4 2 0.5x 10 + 1.25x + 3.87, x+ a b 1+ 3 x x 2 ( 2x) 5 2, 2b a+ b a c d c + / a f 3. 7. Στο παρατιθέµενο κύκλωµα να αναπαρασταθεί µε τη βοήθεια µιας λογικής παράστασης, το ενδεχόµενο, ώστε ο εικονιζόµενος λαµπτήρας να είναι αναµµένος. Οι λογικές µεταβλητές S1, S2, S3 και S4 εκφράζουν το ενδεχόµενο να περνάει ρεύµα από τους αντίστοιχους διακόπτες, και παίρνουν την τιµή.true. όταν περνάει ρεύµα και.false. όταν δεν περνάει ρεύµα. 8. Να βρεθεί η τιµή της παρακάτω λογικής παράστασης, αν οι πραγµατικές µεταβλητές απλής ακρίβειας Α και Β παίρνουν τις τιµές 1.0 και 2.0, ενώ οι ακέραιες µεταβλητές I και J παίρνουν τις τιµές 1 και 3. L1=Β**4**0.5.GT.5.AND.A.GT.-2.0.EQV.B+A.EQ.0.0 56
L2=NOT.I/J.EQ.0.AND.A-B.LT.0.0.OR.A**2.GE.1 L3=A-I.GT.-3.AND.J-B+A.EQ.0.0.OR.L1.AND.L2 9. Να γραφεί πρόγραµµα, το οποίο διαβάζει από την οθόνη και τυπώνει στην οθόνη το όνοµα και τη βαθµολογία τριών φοιτητών, λαµβανόµενα ως µεταβλητές CHARACTER και REAL, αντίστοιχα. Το πρόγραµµα τυπώνει επίσης τη µέση τιµή και τυπική απόκλιση της βαθµολογίας τους. Να χρησιµοποιηθούν οι εντολές δήλωσης των µεταβλητών, η εντολή READ µε ελεύθερο FORMAT, καθώς και η εντολή PRINT µε τη δήλωση FORMAT και τους κωδικούς πεδίου F και Α. Η εκτύπωση της µέσης τιµής και της απόκλισης να γίνει µε τη βοήθεια της εντολής WRITE µέσω NAMELIST. 57