Σχολή Εφαρμοσμένων Μαθηματικών και Φυσικών Επιστημών Εθνικό Μετσόβιο Πολυτεχνείο Προγραμματισμός με Εφαρμογές στην Επιστήμη του Μηχανικού Ενότητα 1 Διάλεξη 3 Σιέττος Κωνσταντίνος
Άδεια Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειτα σε άδειες χρήσης Crea%ve Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άδεια χρήσης άλλου τύπου, αυτή πρέπει να αναγράφεται ρητώς.
Εισαγωγή στη γλώσσα προγραµµατισµού Fortran 77 (µέρος Γ) Κωνσταντίνος Σιέττος
Εντολές GOTO Τρεις τύποι: Εντολές Ελέγχου (Control Statements) GOTO (χρησιµοποιούνται σπάνια) Αδέσµευτο (unconditional) Υπολογιζόµενο (computed) Αποδιδόµενο (assigned)
Unconditional GOTO Αδέσµευτο (unconditional) GOTO n : n είναι ένας ακέραιος αριθµός µιας εντολής Παράδειγµα: GOTO 456.. 456 A=B+C.
Computed GOTO Computed GOTO (L1, L, Ln), i H ροή µεταφέρεται στην εντολή µε αρίθµηση L1, L, Ln ανάλογα µε την τιµή της ακέραιας µεταβλητής i η τιµή της οποίας θα πρέπει να έχει ορισθεί πιο πριν Παράδειγµα:.. GOTO (14,, 34, 19), i.. αν i=1 µεταβιβάζεται ο έλεγχος στην εντολή µε αρίθµηση 14 αν i= µεταβιβάζεται ο έλεγχος στην εντολή µε αρίθµηση αν i=3 µεταβιβάζεται ο έλεγχος στην εντολή µε αρίθµηση 34 αν i=4 µεταβιβάζεται ο έλεγχος στην εντολή µε αρίθµηση 19
Assigned GOTO Assigned GOTO m, (L1, L, Ln) H ροή µεταφέρεται στην γραµµή L1, L, Ln ανάλογα µε την τιµή της ακέραιας µεταβλητής m τιµή της οποίας θα πρέπει να έχει ορισθεί πιο πριν µε την εντολή assign i to m Παράδειγµα: assign 34 to m.. GOTO m, (14,, 34, 19).. 34 A=B+C όπου i ={L1,L,,Ln}
Εντολή IF Εντολές IF ύο τύποι: Αριθµητικό IF (σπάνια χρησιµοποιούµενο) Λογικό IF (το πιο σύνηθες)
Αριθµητικό IF Γενική µορφή IF (αριθµητική παράσταση) L1,L,L3 H εντολή προκαλεί την επεξεργασία του προγράµµατος να συνεχιστεί στην εντολή µε αρίθµηση L1 αν η αριθµητική παράσταση έχει τιµή < L αν η αριθµητική παράσταση έχει τιµή = L αν η αριθµητική παράσταση έχει τιµή >
Λογικό IF Τέσσερις τύποι δοµής: IF-ΤΗΕΝ-ELSE-ENDIFENDIF IF-ΤΗΕΝ-ENDIF IF-ΤΗΕΝ-ELSEIF -ENDIF Απλό IF
IF-ΤΗΕΝ-ELSE-ENDIFENDIF Γενική µορφή IF ( συνθήκη ) THEN ELSE ENDIF BLOCK1 BLOCK όπου Η συνθήκη είναι µια λογική έκφραση π.x.:.(a.gt.b). block1 και block είναι blocks από εντολές FORTRAN Αν η συνθήκη είναι.true. εκτελείται το Block1 Αν η συνθήκη είναι.false. εκτελείται το Block H συνθήκη πρέπει να είναι µέσα σε παρενθέσεις
IF-ΤΗΕΝ-ENDIF Γενική µορφή IF ( συνθήκη ) THEN.. ENDIF όπου Η συνθήκη είναι µια λογική έκφραση π.x.:.(a.gt.b). Αν η συνθήκη είναι.true. Εκτελούνται οι εντολές µέσα στο IF- ENDIF Αν η συνθήκη είναι.false. η ροή µεταφέρεται µετά ακριβώς το ENDIF H συνθήκη πρέπει να είναι µέσα σε παρενθέσεις
IF-ΤΗΕΝ-ELSEIF-ENDIFENDIF Γενική µορφή IF (συνθήκη1) THEN BLOCK1 ELSEIF (συνθήκη) THEN BLOCK.. ELSE BLOCK ENDIF όπου Η συνθήκη1, συνθήκη, είναι λογικές έκφρασεις π.x.:.(a.gt.b). Αν η συνθήκη1 είναι.true. Εκτελούνται οι εντολές µέσα στο BLOCK1 Αν η συνθήκη είναι.true. εκτελούνται οι εντολές µέσα στο BLOCK. Αν καµία από τις προηγούµενες δεν είναι.true. τότε εκτελούνται οι εντολές στο BLOCK Mόνο ένα ENDIF στο τέλος
Απλό IF Γενική µορφή IF (συνθήκη1) statement Παράδειγµα1: IF (A.LT.B) C= D**
, j< 3, Παράδειγµα Να γραφτούν οι εντολές για τον υπολογισµό των παρακάτω τύπων. IF(j<) IF(j.ge.3).AND.(k.gt.) j+3 IF(j.ge.3).AND.(k.le.) j-1 IF(i.EQ.3) x=y**+1. IF(i.NE.3) x=z**.. IF(j<) IF(j.ge.3).AND.(k.gt.) j+3 IF(j.ge.3).AND.(k.le.) j-1 IF(i.EQ.3) THEN x=y**+1. ELSE x=z** ENDIF
, j< 3, x ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ: : DO-LOOP Γενική µορφή DO x i = αρχή, τέλος, βήµα.. CONTINUE Ο αριθµός των επαναλήψεων είναι : [(τέλος -αρχή)) / βήµα] ] + 1 όπου x είναι ο αριθµός µιας εντολής που αποτελεί την τελική εντολή της επανάληψης (συνήθως είναι η εντολή continue) iείναι µια ακέραια µεταβλητή που ονοµάζεται µεταβλητή ελέγχου ή δείκτης επανάληψης αρχήείναι ένας ακέραιος αριθµός µε την αρχική τιµή της µεταβλητής ελέγχου τέλοςείναι ένας ακέραιος αριθµός µε την τελική τιµή της µεταβλητής ελέγχου Βήµα είναι µια αριθµητική σταθερά που παριστάνει το βήµα αύξησης (ή µείωσης της µεταβλητής ελέγχου. Αν δεν υπάρχει θεωρείται µονάδα
, j< 3, ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ: : DO-LOOP Παράδειγµα 1 Γράψτε ένα πρόγραµµα FORTRAN που θα διαβάζει τον βαθµό κάθε φοιτητή ξεχωριστά και θα τυπώνει στην οθόνη τον µέσο όρο της βαθµολογίας Program averagegrade real grade, sum, avg integer k sum =. do 1 k = 1, 6 read(*,*) grade sum = sum + grade 1 continue avg = sum / 6. write(*,*) avg end
, j< 3, ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ: : DO -LOOP Παράδειγµα Γράψτε ένα πρόγραµµα FORTRAN που θα υπολογίζει το γινόµενο (1-1/4) 1/4) (1+1/9).. (1 (-1)^n /n^) µε Do-loop Program seriescalc real p integer i,n n=1 p=1 do 1 i =, n+1 p=p*(1-(-1)**i/i**) 1 Continue write(*,*) p end Μπορείτε να κάνετε debugging διαβάζοντας το? µε IF και GOTO Program seriescalc real p integer i 1 p=p*(1-(-1)**i/i**) if(p.lt.1.e-6) go to i=i+1 go to 1 Continue write(*,*) p end
, j< 3, ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ: : DO-LOOP Τι πρέπει να προσέξετε: Πριν από κάθε επανάληψη, ο δείκτης επανάληψης ελέγχεται για να διαπιστωθεί αν έχει περάσει το τέλος Do 1 k= 5, 1, -.. 15 Continue H τιµή του δείκτη επανάληψης µετά την εντολή continue είναι -1
, j< 3, DO WHILE- LOOP Γενική µορφή DO WHILE (Συνθήκη).. ENDDO
, j< 3, DO WHILE- LOOP Παράδειγµα: Γράψτε ένα πρόγραµµα FORTRAN που υπολογίζει µε ακρίβεια 1.Ε-6 την ακόλουθη σειρά S = 1 + x^/! +x^4/4! +. Όπου <x<1 <1 Μπορείτε να κάνετε debugging διαβάζοντας το? program coshx INTEGER K,fact REAL S,tol tol=1.e-6 s=1. k= fact=1 DO WHILE (s.gt.tol) fact=fact*k*(k-1) s=s+x**k/fact k=k+ ENDDO write(*,*) s END
, j< 3, DO WHILE- LOOP Παράδειγµα: Γράψτε ένα πρόγραµµα FORTRAN που υπολογίζει µε ακρίβεια 1.Ε-6 τον αριθµό π από την σειρά Program piapprox INTEGER K,fact REAL p,s,tol tol=1.e-6 s=1. p=. k= DO WHILE (abs(p-). ).gt.tol) p=sqrt(+p) s=s*./p ENDDO pi=.*s write(*,*) pi END
, j< 3, Ανύσµατα (Arrays). ή αλλιώς η εντολή Γενική µορφή: Dimension onoma(.), onoma(.,.,.).) Dimension Μεταβλητές σε µορφή ανυσµάτων Μονοδιάστατες ιδιάστατες Τριδιάστατες onoma1, onoma είναι τα ονόµατα των µεταβλητών Εντός των παρενθέσεων υπάρχουν µια η περισσότερες ακέραιες µεταβλητές που χωρίζονται µε κόµµα και δηλώνουν τις διαστάσεις των ανυσµάτων
, j< 3, Ανύσµατα (Arrays)-Τύποι INTEGER Α(4) REAL B(5,5,) DOUBLE PRECISION C(1,18) LOGICAL FLAG (1) ήλωση χαρακτήρα µε το όνοµα NAMES που αποτελείται από 15 στοιχεία όπου κάθε στοιχείο έχει µέγεθος CHARACTER NAMES (15)* DIMENSION YEAR (4: 1)
, j< 3, Ανύσµατα (Arrays)- ηλώσεις Explicit δήλωση µιας µεταβλητής τύπου ανύσµατος µε το όνοµα TEMP µε εύρος από το -5 to 4. REAL TEMP (-5:4) : 46 στοιχεία TEMP(-5), TEMP(-4), TEMP(-3), TEMP(-), TEMP(-1), TEMP(), TEMP(1),.. TEMP(4) Implicit ήλωση DIMENSION L(4,5), C(1:,-: :-16) Η ανυσµατική µεταβλητή L έχει στοιχεία, η ανυσµατική µεταβλητή C έχει (11 x 5) στοιχεία
, j< 3, Ανύσµατα (Arrays)-Τρόπος Αποθήκευσης Η µνήµη των Η/Υ είναι «γραµµική» δηλαδή τα στοιχεία των ανυσµατικών µεταβλητών καταχωρούνται σε διαδοχικές θέσεις. Για µονοδιάστατες µεταβλητές τύπου Α (L:U) το στοιχείο µε δείκτη A(Ι) βρίσκεται στην θέση Κ = 1+(Ι-L) (αν θεωρήσουµε ότι η αρίθµηση αρχίζει από το 1) Για διδιάστατες µεταβλητές τύπου Α (Α1:B1,A:B) το στοιχείο µε δείκτη A(I,J) βρίσκεται στην θέση Κ = 1+(I-A1)+(J-A)* A)* (B1-A1+1)
, j< 3, Ανύσµατα (Arrays)-Τρόπος Αποθήκευσης Για µονοδιάστατες µεταβλητές τύπου Α (L:U) το στοιχείο µε δείκτη A(Ι) βρίσκεται στην θέση Κ = 1+(Ι-L) (αν θεωρήσουµε ότι η αρίθµηση αρχίζει από το 1) Για διδιάστατες µεταβλητές τύπου Α (Α1:B1,A:B) το στοιχείο µε δείκτη A(I,J) βρίσκεται στην θέση Κ = 1+(I-A1)+(J-A)* A)* (B1-A1+1) Ερώτηση: Έστω η µεταβλητή Α(1,15). Που βρίσκεται το Α(8,5);
, j< 3, Ανύσµατα (Arrays)-Παράδειγµα 1 Μηδενισµός στοιχείων διδιάστατου πίνακα dimension a(m,n) DO 1 i=1,m DO 1 j=1,n 1 A(i,j) =. DO 1 i=1,m DO j=1,n A(i,j) =. CONTINUE 1 CONTINUE DO 1 i=1,m DO 1 j=1,n A(i,j) =. 1 CONTINUE
, j< 3, Ανύσµατα (Arrays)-Παράδειγµα Πολλαπλασιασµός Πινάκων dimension A(M,N), B (N,L),C(M,L) DO 1 i=1,m DO j=1,l C(i,j)=. DO 3 k=1,n C(i,j) =C(i,j)+A(i,k)*B(k,j) 3 CONTINUE CONTINUE 1 CONTINUE
, j< 3, Ανύσµατα (Arrays)-Παράδειγµα 3 Ταξινόµηση στοιχείων σε µονοδιάστατο άνυσµα dimension A(N) DO 1 i=1,n-1 j=i DO k=i+1,n IF (A(k).LT.A(j)) j=k CONTINUE A(i) A(i)=A(j) A(j)=z 1 CONTINUE Μπορείτε να το ερµηνεύσετε;
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικόυ έργου του διδάσκοντα Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα Ε.Μ.Π.» έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικού πόρους.