Μορφοποίηση της εξόδου (i) Όταν θέλουμε τα αποτελέσματα μιάς εντολής WRITE(*, *) να εμφανίζονται με συγκεκριμένο τρόπο τροποποιούμε τον δεύτερο αστερίσκο. 2 τρόποι μορφοποίησης WRITE(*, '(format εξόδου)') ή WRITE(*,x) το x δηλώνει που θα βρούμε το format x FORMAT (format εξόδου) 1
Μορφοποίηση της εξόδου (ii) Παράδειγματα WRITE(*,10) a, x, b, "συμβολοσειρά" 10 FORMAT (I4,1X,F6.3/I4,3x,A) Για τιμές των μεταβλητών INTEGER:: a,b ; REAL:: x ; a=5468 ; b=4567 ; x=23.567 Το πρόγραμμα θα εκτυπώσει στην οθόνη 5468 23.567 4567 συμβολοσειρά 2
Μορφοποίηση της εξόδου (iii) INTEGER Ix το x δηλώνει πόσες θέσεις χρειάζονται για τον ακέραιο REAL Fx.w το x δηλώνει πόσες θέσεις θα χρειαστεί συνολικά ο πραγματικός (και η τελεία) και το w πόσες θέσεις θα χρειαστούν μετά την υποδιαστολή. CHARACTER Ax δηλώνει πόσες θέσεις χρειάζονται για τους χαρακτήρες nx αφήνει n κενά / αλλάζει γραμμή \ δεν αλλάζει γραμμή για το επόμενο WRITE n?x επαναλαμβάνει n φορές τη μορφοποίηση που ακολουθεί π.χ. 3Ι5 είναι το ίδιο με Ι5,Ι5,Ι5 3
Βρόχοι Επανάληψης (i) Εντολή DO DO control variable = αρχή, τέλος, βήμα Εντολή 1 Εντολή 2... Εντολή n Παραδείγματα DO a=1,10,1 WRITE(*,*) a 4
Εντολή DO (ii) Παραδείγματα DO i=10,1,-1 WRITE(*,*)i DO i=41,-3,-1 WRITE(*,*)i f=2 DO i=1,15 WRITE(*,*) f*i 5
Εντολή for (C) (ii) Παραδείγματα for (i=1; i<=10; i++) printf("%d\n",i); for (i=10; i>=1; i--) printf("%d\n",i); for (i=41; i>=-3; i--) printf("*"); f=2; for (i=1; i<=15; i++) f=f*i; 6
Εντολή DO Παραδείγματα (συνέχεια) DO i=1,5 DO j=1,10 WRITE(*, '(A1\)') '*' WRITE(*,*) (iii) DO i=1,5 Do j=1,2*i WRITE(*, '(A1\)') '*' WRITE(*,*) ** **** ****** ******** 7
Εντολή for (C) Παραδείγματα (συνέχεια) for (i=1; i<=5; i++) { for (j=1; j<=10; j++) printf("*"); printf("\n"); } for (i=1; i<=5; i++) { for (j=1; j<=2*i; j++) printf("*"); printf("\n"); } ** **** ****** ******** (iii) 8
Εντολή DO (iv) Ειδικές περιπτώσεις για τα όρια: DO i=10, 10... (* μία φορά *) DO i=12, 10... (* καμία φορά *) Η μεταβλητή ελέγχου δεν μπορεί να μεταβληθεί (π.χ. με ανάθεση) μέσα στο σώμα του βρόχου Τα όρια υπολογίζονται μια φορά στην αρχή 9
Εντολή DO WHILE (i) Βρόχος όσο ικανοποιείται μια συνθήκη DO WHILE (συνθήκη) Εντολή 1 Εντολή 2... Εντολή n Παραδείγματα DO WHILE (x>15); k=k+2; DO WHILE (state.and. (x>15)) x=x-5; WRITE(*, *)'a'; 10
Εντολή DO WHILE (ii) Παραδείγματα i=1 DO WHILE (i<15) WRITE(*, *) i; i=i+1 i=40 DO WHILE (i>2)!θα τερματίζει ο βρόχος; WRITE(*,*) i; i=i+5 f=10; g=5 DO WHILE (g*f<200) WRITE(*, *) g*f; g=g+10 11
Εντολή DO WHILE (iii) Ο αριθμός επαναλήψεων γενικά δεν είναι γνωστός εκ των προτέρων Αν η συνθήκη είναι αρχικά ψευδής, ο βρόχος τερματίζεται χωρίς να εκτελεστεί το σώμα 12
Εντολή ΕΧΙΤ και CYCLE Με την εντολή ΕΧΙΤ διακόπτεται η εκτέλεσητουβρόχουκαιηεκτέλεσητου προγράμματος συνεχίζει μετά το τέλος του βρόχου. Με την εντολή CYCLE διακόπτεται η εκτέλεση της τρέχουσας επανάληψης και η εκτέλεση συνεχίζει με την επόμενη επανάληψη. 13
Υπολογισμός του Παραγοντικού!Πρόγραμμα που υπολογίζει το παραγοντικό PROGRAM PARAGONTIKO IMPLICIT NONE INTEGER:: n,i,result result=1 WRITE(*,'(A)')"Give number" READ(*,*) n DO i=1,n result=result*i WRITE(*,*) result END 14
Υπολογισμός των αριθμών FIBONACCI!Πρόγραμμα που εκτυπώνει τους αριθμούς Fibonacci PROGRAM FIBONACCI IMPLICIT NONE INTEGER:: n,i,fib, fib_prev, fib_last fib_prev=0 fib_last=1 WRITE(*,'(A)')"Give number" READ(*,*) n WRITE(*,'(I5\)') fib_prev WRITE(*,'(I5\)') fib_last DO i=3,n fib = fib_prev + fib_last WRITE(*,'(I5\)') fib fib_prev = fib_last fib_last = fib END 15
Ύψωση σε Δύναμη!Πρόγραμμα ύψωσης σε δύναμη PROGRAM POWER IMPLICIT NONE INTEGER:: a, b,i,p p=1 WRITE(*,'(A)')"Give the first number" READ(*,*) a WRITE(*,'(A)')"Give the second number" READ(*,*) b DO i=1,b p=p*a WRITE(*,*) p END 16
Υπολογισμός του ΜΚΔ (i)!απλός αλγόριθμος υπολογισμού ΜΚΔ PROGRAM MKD IMPLICIT NONE INTEGER:: a,b,gcd WRITE(*,'(a)') "Give number a "; READ(*,*) a WRITE(*,'(a)') "Give number b " ; READ(*,*) b IF (a>b) THEN gcd=a ELSE gcd=b ENDIF DO WHILE ((MOD (a,gcd)/=0).or. (MOD (b,gcd)/=0)) gcd=gcd-1 WRITE(*,*) gcd END 17
Υπολογισμός του ΜΚΔ (ii) PROGRAM MKD2 IMPLICIT NONE INTEGER:: a,b,i,j WRITE(*,'(a)') "Give number a " ; READ(*,*) a WRITE(*,'(a)') "Give number b " ; READ(*,*) b i=a; j=b DO WHILE ((i>0).and.(j>0)) IF (i>j) THEN i=i-j ELSE j=j-i END IF WRITE (*,'(I10)') i+j END 18
Υπολογισμός του ΜΚΔ (iii) PROGRAM MKD3 IMPLICIT NONE INTEGER:: a,b,i,j WRITE(*,'(a)') "Give number a" READ(*,*) a WRITE(*,'(a)') "Give number b" READ(*,*) b i=a; j=b DO WHILE ((i>0).and.(j>0)) IF (i>j) THEN i=mod(i,j) ELSE j=mod(j,i) END IF WRITE (*,'(I10)') i+j END 19