οµή του προγράµµατος (i) PROGRAM example Η αρχή και το όνοµα του προγράµµατος IMPLICIT NONE REAL:: moires, aktinia moires = 180 χαρακτηριστική δήλωση δηλώσεις µεταβλητών aktinia = moires * 3.14159 / 180.0 WRITE(*,*) Η γωνία σε ακτίνια & είναι:, aktinia εκτελέσιµες εντολές STOP END τέλος εκτέλεσης 1
οµή του προγράµµατος (C) (i) #include <stdio.h> int i, j; void main() { i=15; j=23; printf("sum of i and j is: "); i=i+j; printf("%d", i); } 2
οµή του προγράµµατος (ii) Επικεφαλίδα PROGRAM <όνοµα προγράµµατος> Κυρίως σώµα Specification Part (δηλωτικές εντολές) Execution Part (εκτελέσιµες εντολές) Subprogram Part (υπο-προγράµµατα) ENDή END PROGRAM <όνοµα προγράµµατος> Εντολή STOPτερµατίζει την εκτέλεση του προγράµµατος. Μπορεί να χρησιµοποιηθεί µία ή περισσότερες φορές. Συχνά εµφανίζεταιµόνο πριν το END και γι αυτό παραλείπεται. 3
οµή του προγράµµατος (iii) ηλώσεις µεταβλητών µεταβλητή: ένα «κουτί» της µνήµης του υπολογιστή όπου µπορεί να αποθηκευτεί µια πληροφορία (ένα δεδοµένο) στο τµήµα δηλώσεων (που βρίσκεται πάντα στην αρχή του προγράµµατος) ορίζουµε όλες τις µεταβλητές που χρησιµοποιεί το πρόγραµµα για κάθε µεταβλητή ορίζουµε το όνοµάτης και τον τύποτης, δηλαδή το πεδίο των δυνατών τιµών που µπορεί η µεταβλητή να πάρει π.χ. INTEGER:: i,j,k, 4
οµή του προγράµµατος (iv) Απλοί τύποι µεταβλητών INTEGER ακέραιοι αριθµοί 0, 1, 3 REAL πραγµατικοί αριθµοί 3.14 (τελεία, όχι κόµµα),, 2.35E-8 (=2.35 10-8 ) CHARACTERχαρακτήρες CHARACTER (LEN=*) string LOGICAL λογικές τιµές.false. 'a', 'C' 'and', "Cool".TRUE. ή COMPLEX µιγαδικοί αριθµοί (-10.0, 8.0) 5
οµή του προγράµµατος (v) ήλωση µεταβλητών INTEGER:: i, j=12, k, REAL:: a, b, x, CHARACTER (LEN=4):: mera, minas, etos, LOGICAL:: m=.true., n COMPLEX:: c, e ήλωση σταθερών INTEGER, PARAMETER:: I=10, day=3 REAL, PARAMETER:: PI=3.14159 6
οµή του προγράµµατος (vi) Σχόλια INTEGER:: x,y!οι συντεταγµένες του κέντρου REAL:: r!η ακτίνα Κεφαλαίοι ή πεζοί χαρακτήρες; Η γλώσσα δεν είναι case sensitive Στοίχιση Απαραίτητη για να είναι ευανάγνωστο Κάθε εντολή σε µία γραµµή. Αν δεν αρκεί µία γραµµή τη συνεχίζω σε περισσότερες προσθέτοντας τονχαρακτήρα & στο τέλος κάθε γραµµής. Αν θέλω περισσότερες από µία εντολές σε µία γραµµή τις χωρίζω µε ελληνικό ερωτηµατικό ; 7
οµή του προγράµµατος Υποπρογράµµατα (vi) PROGRAM example επικεφαλίδα IMPLICIT NONE INTEGER:: i, j, athroisma i=15 j=23 CALL Prosthesi(i,j,athroisma)!κλήση υπορουτίνας WRITE (*,*) To athroisma einai:, athroisma END SUBROUTINE Prosthesi(a,b,athr) IMPLICIT NONE INTEGER:: a, b, athr athr = a+b END κυρίως σώµα υπορουτίνα 8
οµή του προγράµµατος (C) (vi) Υποπρογράµµατα #include <stdio.h> int i, j; void add(); { i=i+j; } void main() { i=15; j=23; printf("sum of i and j is: "); add(); printf("%d", i); } 9
Τί σηµαίνει ορθό πρόγραµµα (i) Συντακτική ορθότητα το πρόγραµµα πρέπει να υπακούει στους συντακτικούς κανόνες της γλώσσας προγραµµατισµού Συντακτικά σφάλµατα στην Fortran εµφανίζονται όταν δεν ικανοποιείται η καθορισµένη σύνταξη παράδειγµα: (PROGRAM) example 10
Τί σηµαίνει ορθό πρόγραµµα (ii) Νοηµατική ορθότητα το πρόγραµµα πρέπει να υπακούει τους νοηµατικούς κανόνες της γλώσσας προγραµµατισµού Νοηµατικά σφάλµατα στην Fortran εσφαλµένη χρήση τελεστών n = 'a' + 1 χρήση µεταβλητών χωρίς δήλωση IMPLICIT NONE INTEGER:: n,i n = i + j 11
Τί σηµαίνει ορθό πρόγραµµα (iii) Σηµασιολογική ορθότητα όταν το πρόγραµµα εκτελείται, πρέπει να κάνει ακριβώς αυτό που θέλουµε να κάνει Σηµασιολογικά σφάλµατα στην Fortran προέρχονται από την κακή σχεδίαση ή την κακή υλοποίηση του προγράµµατος αυτά τα σφάλµατα ονοµάζονται συνήθως bugs και η διαδικασία εξάλειψής τους debugging x = (-b + sqr(b*b-4*a*c))/(2*a) 12
Τί σηµαίνει ορθό πρόγραµµα (iii) Σηµασιολογική ορθότητα όταν το πρόγραµµα εκτελείται, πρέπει να κάνει ακριβώς αυτό που θέλουµε να κάνει Σηµασιολογικά σφάλµατα στην Fortran προέρχονται από την κακή σχεδίαση ή την κακή υλοποίηση του προγράµµατος αυτά τα σφάλµατα ονοµάζονται συνήθως bugs και η διαδικασία εξάλειψής τους debugging x = (-b + sqr(b*b-4*a*c))/(2*a) sqrt διαίρεση µε το µηδέν 13
Τί σηµαίνει ορθό πρόγραµµα (iv) Ο µεταγλωττιστής µπορεί να εντοπίσει σε ένα πρόγραµµα την ύπαρξη συντακτικών σφαλµάτων νοηµατικών σφαλµάτων Τυπώνει κατάλληλα µηνύµατα σφάλµατος Ο προγραµµατιστής είναι υπεύθυνος για τη διόρθωση των παραπάνω τον εντοπισµό και τη διόρθωση σηµασιολογικών σφαλµάτων 14
Ανάθεση τιµής σε µεταβλητή Παραδείγµατα αναθέσεων n = 2 pi = 3.14159 done =.true. ch = 'b' counter = counter + 1 x1 = (-b + sqrt(b*b-4*a*c))/(2*a) 15
Επικοινωνία µε το χρήστη (i-a) Έξοδος στην οθόνη WRITE(*,*)'Hello world' WRITE(*,*) x WRITE(*,*) n+1 WRITE(*,*) x, y WRITE(*,*) 'Η τιµή του x είναι ', x 16
Επικοινωνία µε το χρήστη (i-b) Έξοδος µε αλλαγή γραµµής WRITE(*,*) 'hello world'!αλλαγή γραµµής µετά το µήνυµα WRITE(*,'(A)',advance='no') 'hello world'!χωρίς αλλαγή γραµµής WRITE(*,'(A/A)') 'hello', 'world ή, ισοδύναµα WRITE(*,10) 'hello', 'world' 10 FORMAT(A/A)!αλλαγή γραµµής µεταξύ των δύο string 17
Επικοινωνία µε το χρήστη (ii) Παράδειγµα PROGRAM example IMPLICIT NONE INTEGER n,m,athroisma WRITE(*,*) 'Προσθέτω δυο ακέραιους' WRITE(*,*)' ώσε το n: ' READ(*,*) n WRITE (*,*) ' ώσε το m: ' READ(*,*) m athroisma = n + m WRITE(*,*)'Το άθροισµα ', n, ' + ', & m, ' είναι: ', athroisma STOP END 18
Επικοινωνία µε το χρήστη (C) (ii) Παράδειγµα #include <stdio.h> void main() { int n, m, sum; printf("προσθέτω δύο ακεραίους\n"); printf(" ώσε το n: "); scanf("%d\n",&n); printf(" ώσε το m: "); scanf("%d\n",&m); sum = n + m; printf("το άθροισµα %d + %d είναι: ",n,m); printf("%d\n",sum); } 19
Αριθµητικές παραστάσεις (i) Απλές παραστάσεις σταθερές και µεταβλητές Απλές πράξεις πρόσθεση, αφαίρεση +, - πολλαπλασιασµός * διαίρεση / Ύψωση σε δύναµη ** πρόσηµα +, - 20
Αριθµητικές παραστάσεις (ii) Προτεραιότητα τελεστών: α) ** β) *,/ γ) +,- π.χ. 5+3*x-y 5+(3*x)-y Προσεταιριστικότητα τελεστών *,/, +,- από αριστερά προς τα δεξιά π.χ. x-y+1 (x-y)+1 Προσεταιριστικότητα τελεστή ** από δεξιά προς αριστερά π.χ. x**y**z x**(y**z) 21
Αριθµητικές παραστάσεις (ii) Σειρά εκτέλεσης των πράξεων καθορίζεται εν µέρειαπό την προτεραιότητα και την προσεταιριστικότητα των τελεστών γενικά όµως εξαρτάται και από την υλοποίηση χρησιµοποιείτε παρενθέσεις: (x+1)/(y*z) 22
Λογικές παραστάσεις (i) Συγκρίσεις ισότητα, ανισότητα ==, /= µεγαλύτερο, µικρότερο >, < µεγαλύτερο ή ίσο, µικρότερο ή ίσο >=, <= Λογικές πράξεις σύζευξη (και) διάζευξη (ή) άρνηση (όχι).and..or..not. Ισοδυναµία.EQV. Οχι ισοδυναµία (αποκλειστική διάζευξη XOR).ΝEQV. 23
Λογικές παραστάσεις (ii) Πίνακες αλήθειας λογικών πράξεων p FALSE TRUE.NOT. p TRUE FALSE p q P.AND. q p.or. q FALSE FALSE FALSE FALSE FALSE TRUE FALSE TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE TRUE 24
Λογικές παραστάσεις (iii) Πίνακες αλήθειας λογικών πράξεων p q P.EQV. q P.NEQV. q FALSE FALSE TRUE FALSE FALSE TRUE FALSE TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE FALSE 25
Λογικές παραστάσεις (iv) Προτεραιότητα λογικών τελεστών.not. : µεγαλύτερη προτεραιότητα από όλους.and. : όπως ο πολλαπλασιασµός.or. : όπως η πρόσθεση.eqv. ή.neqv. π.χ..not. p.and. q.or. r ((.NOT. p).and. q).or. r Προσεταιριστικότητα.NOT. : από δεξιά προς αριστερά.and.,.or. : από αριστερά προς δεξιά 26
Προτεραιότητα τελεστών συνολικά Αριθµητικοί Σύγκρισης Λογικοί π.χ. x>3+4.and..not. y==5 (x>(3+4)).and. (.NOT. (y==5)) Χρησιµοποιείτε παρενθέσεις! 27
οµές ελέγχου Τροποποιούν τη σειρά εκτέλεσηςτων εντολών του προγράµµατος Οι εντολές φυσιολογικά εκτελούνται κατά σειρά από την αρχή µέχρι το τέλος Με τις δοµές ελέγχου επιτυγχάνεται: οµαδοποίηση εντολών εκτέλεση εντολών υπό συνθήκη επανάληψη εντολών 28
Εντολή IF Εκτέλεση εντολών υπό συνθήκη Συντακτικό διάγραµµα END IF (i) boolean IF THEN statement expression ELSE statement if_statement Προσοχή! Μετά το END IF το πρόγραµµα συνεχίζεται είτε ισχύει η λογική έκφραση είτε όχι 29
Εντολή IF (ii) IF (x>10) THEN x=x+1 END IF IF (age<10) THEN WRITE(*,*) 'παιδί' END IF IF (λογική έκφραση) THEN σύνολο εντολών END IF Η λογική έκφραση αποτιµάται σε.true.ή.false. Και µπαίνει σε παρενθέσεις IF ((year>1900).and.(year<=2000))then WRITE (*,*) '20ός αιώνας' END IF IF ((MOD(year,4)==0).AND. (MOD(year,100)/=0).OR. & (MOD(year,400)==0).AND. (MOD(year,4000)/=0)) THEN WRITE(*,*)'disekto etos' END IF 30
Εντολή if (C) (ii) Παραδείγµατα if (x>10) x = x+1; if (age<10) printf("παιδί"); if ((year>1900) && (year<=2000) printf("20ός αιώνας"); if ((year%4==0) && (year%100!=0) (year%400==0) && (year%4000!=0)) printf("δίσεκτο έτος"); 31
Εντολή IF (iii) Παραδείγµατα (συνέχεια) IF (changed) THEN WRITE(*,*) 'Το αρχείο & άλλαξε' changed =.FALSE. END IF IF (MOD(x,2)==0) THEN WRITE(*,*)'άρτιος' ELSE WRITE(*,*)'περιττός' END IF IF (mine) THEN me = 1; you = 0 ELSE me=0; you=1 END IF IF (x > y) THEN WRITE(*,*) 'µεγαλύτερο' ELSE IF (x < y) THEN WRITE(*,*)'µικρότερο' ELSE WRITE(*,*) 'ίσο' END IF END IF IF (x > y) THEN WRITE(*,*) 'µεγαλύτερο' ELSEIF (x < y) THEN WRITE(*,*)'µικρότερο' ELSE WRITE(*,*) 'ίσο END IF 32
Εντολή if (C) (iii) Παραδείγµατα (συνέχεια) if (changed) { printf("το αρχείο άλλαξε\n"); changed = 0; } if (x%2==0) printf("άρτιος"); else printf("περιττός"); if (mine) { me=1; you=0; } else { me=0; you=1; } if (x>y) printf("µεγαλύτερο"); else if (x<y) printf("µικρότερο"); else printf("ίσο"); 33
Εντολή IF (iv) IF else IF construct : IF (συνθήκη1) THEN σύνολο εντολών 1 ELSE IF (συνθήκη 2) ΤΗΕΝ σύνολο εντολών 2 ELSE IF (συνθήκη 3) ΤΗΕΝ σύνολο εντολών 3... ELSE σύνολο εντολών n END IF 34
Εντολή IF (iv) Ένα ELSE αντιστοιχεί στο πλησιέστερο προηγούµενο IF που δεν έχει ήδη αντιστοιχιστεί σε άλλο ELSE Παράδειγµα IF (x>0) THEN IF (y>0) THEN WRITE(*,*) ' 1o τεταρτηµόριο ' ELSEIF (y<0) THEN WRITE(*,*) '4o τεταρτηµόριο ' ELSE!y=0 WRITE(*,*) 'άξονας των x END IF ELSE WRITE(*,*) ' αριστερό ηµιεπίπεδο ' END IF 35
Εντολή if (C) (iv) Ένα else αντιστοιχεί στο πλησιέστερο προηγούµενο if που δεν έχει ήδη αντιστοιχιστεί σε άλλο else Παράδειγµα if (x>0) else if (y>0) printf("πρώτο τεταρτηµόριο"); else if (y<0) printf("τέταρτο τεταρτηµόριο"); else printf("άξονας των x"); printf(" αριστερό ηµιεπίπεδο"); 36
Λάθη Στρογγυλοποίησης PROGRAM errors IMPLICIT NONE REAL :: x,y WRITE (*,*) " ώσε πραγµατικό διάφορο του 0 " READ (*,*) x y=x*(1.0/x) WRITE (*,*) " x= ", x, " y=x*(1/x)= ", y! έλεγχος αν το αποτέλεσµα είναι 1 IF (y==1.0) THEN WRITE(*,*) " y ισούται µε 1 " ELSE WRITE(*,*) " y δεν ισούται µε 1 " END IF END PROGRAM errors Για x=0.1 y ισούται µε 1 Για x=3,1415 y δεν ισούται µε 1 37
Εντολή SELECT CASE (i) Εκτέλεση υπό συνθήκη για πολλές διαφορετικές περιπτώσεις Προσφέρεται π.χ. αντί του: IF (month==1) THEN WRITE(*,*) 'Ιανουάριος' ELSEIF (month==2) THEN WRITE(*,*) 'Φεβρουάριος ELSEIF...... ELSEIF (month==12) THEN WRITE(*,*) ' εκέµβριος ' ELSE WRITE(*,*) 'Λάθος εδοµένα' END IF 38
Εντολή SELECT CASE (ii) Παραδείγµατα SELECT CASE (month) CASE (1) WRITE(*,*) 'Ιανουάριος ' CASE (2) WRITE(*,*) 'Φεβρουάριος' CASE (3) WRITE(*,*) 'Μάρτιος... CASE (12) WRITE(*,*) ' εκέµβριος ' CASE DEFAULT WRITE(*,*) 'Λάθος εδοµένα' END SELECT 39
Εντολή case (C) (ii-a) Παραδείγµατα switch (month) { case 1: printf("ιανουάριος"); break; case 2: printf("φεβρουάριος"); break; case 3: printf("μάρτιος"); break;... case 12: printf(" εκέµβριος"); break; } 40
Εντολή case (C) (ii-b) Παραδείγµατα switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: printf("31 µέρες"); break; case 4: case 6: case 9: case 11: printf("30 µέρες"); break; case 2: printf("28 ή 29"); break; } 41
Εντολή SELECT CASE (iii) SELECT CASE (selector)!selector: integer, character, logical expression CASE (value_list1)!value_list: εύρος τιµών, τιµή ή τιµές σύνολο εντολών 1 CASE (value_list2) σύνολο εντολών 2 CASE (value_list3)... σύνολο εντολών 3 CASE DEFAULT END SELECT σύνολο εντολών n To case default µπορεί να µπεί οπουδήποτε αλλά συνήθως µπαίνει στο τέλος Παραδείγµατα value list case (5), case (5:7), case ( :7), case (5: ) 42
Εντολή SELECT CASE (iv) SELECT CASE (class_code) CASE (1) WRITE (*,*) "junior" CASE (2) WRITE (*,*) "senior" CASE (3) WRITE (*,*) "graduate"... CASE DEFAULT WRITE (*,*) "Λάθος " END SELECT 43
Εντολή SELECT CASE (v) SELECT CASE (class_name) CASE ("junior") WRITE (*,*) 1 CASE ("senior" ) WRITE (*,*) 2 CASE ("graduate" ) WRITE (*,*) 3... CASE DEFAULT WRITE (*,*) "Λάθος " END SELECT 44
Εντολή SELECT CASE (vi) SELECT CASE (index) CASE (high : ) WRITE (*,*) "poor" CASE (low : high-1 ) WRITE (*,*) " fair" CASE (: low-1 ) WRITE (*,*) " good" END SELECT 45
Εντολή SELECT CASE SELECT CASE (ΙΝΤ(average)) CASE (90:) WRITE (*,*) "grade A" CASE (80:89 ) WRITE (*,*) "grade B" CASE (:59) WRITE (*,*) "grade C"... END SELECT 46