Οι εντολές επανάληψης Σε πολλά προβλήματα απαιτείται η επανάληψη ενός συνόλου ενεργειών προκειμένου να λυθεί το πρόβλημα. Θα αναφέρουμε δύο χαρακτηριστικά παραδείγματα : Παράδειγμα 1: Έστω ότι μας ζητείται να βρούμε το άθροισμα 10 αριθμών. Τότε θα πρέπει να εκτελέσουμε 10 φορές τις εξής ενέργειες : α) Δώσε έναν αριθμό, β) Πρόσθεσε τον αριθμό αυτόν σε μια μεταβλητή έστω S, την οποία θα χρησιμοποιούμε για να αποθηκεύουμε το συνολικό άθροισμα των αριθμών.
Παράδειγμα2: Έστω ότι θέλουμε να βρούμε το μέγιστο κοινό διαιρέτη (ΜΚΔ) δύο ακεραίων αριθμών α,β βάσει του τύπου Η παραπάνω διαδικασία θα πρέπει να επαναληφθεί ένα πλήθος φορών που δε γνωρίζουμε, έως ότου οι α,β να γίνουν ίσοι.
Ανακύκλωση και χρήση μετρητών σε προγράμματα Παράδειγμα: Να γραφεί πρόγραμμα που θα υπολογίζει το μέσο όρο N αριθμών: PROGRAM MESOSOROS IMPLICIT NONE INTEGER N,I REAL S,X READ*, N I=1 S=0 10 READ*,Χ S=S+X I=I+1 IF (I<=N) GOTO 10 PRINT*,’MO=’, S/N END PROGRAM MESOSOROS
Παράδειγμα Δίνονται Ν ακέραιοι αριθμοί. Να υπολογιστεί α) το άθροισμα των αριθμών που είναι μέσα στο κλειστό διάστημα [-30,30], β) το γινόμενο των αριθμών που είναι εκτός του διαστήματος [-3,3], γ) το πλήθος των αριθμών που είναι άρτιοι.
PROGRAM EXERCISE IMPLICIT NONE INTEGER I,N,X,S,P,PL PRINT*,’ΔΩΣΕ ΠΛΗΘΟΣ ΑΡΙΘΜΩΝ=’ READ*,N I=1 S=0 P=1 PL=0 10 PRINT*,’ΔΩΣΕ ΑΡΙΘΜΟ =’ READ*,X
IF ((X>=-30).AND.(X<=30)) THEN S=S+X IF ((X>3).OR.(X<-3)) THEN P=P*X IF (MOD(X,2)==0) THEN PL=PL+1 Ι=1+1 IF (I<=N) THEN GOTO 10 PRINT*,’ΑΘΡΟΙΣΜΑ ΑΡΙΘΜΩΝ ΣΤΟ & & [-30,30] =’,S PRINT*,’ΓΙΝΟΜΕΝΟ ΑΡΙΘΜΩΝ & & ΕΚΤΟΣ ΤΟΥ [-3,3] =’,Ρ PRINT*,’ΠΛΗΘΟΣ ΑΡΤΙΩΝ & & ΑΡΙΘΜΩΝ =’,ΡL ΕΝD PROGRAM EXERCISE
Η εντολή DO Η πρώτη μορφή της DO-END DO Σκοπός: Η ατέρμονη εκτέλεση ενός συνόλου εντολών. Σύνταξη: DO Σύνολο εντολών END DO Το σύνολο των εντολών που βρίσκονται μεταξύ της DO και της END DO θα εκτελούνται συνέχεια. Η έξοδος από τη συνεχή ανακύκλωση μπορεί να γίνει μόνο με την εντολή EXIT. Παράδειγμα DO PRINT*, ‘FORTRAN’ END DO
Η δεύτερη μορφή της DO-END DO Σκοπός: Η επανάληψη ενός συνόλου εντολών έως ότου μια συνθήκη ικανοποιηθεί. Σύνταξη: DO WHILE (συνθήκη) Σύνολο εντολών END DO Αν η συνθήκη είναι αληθής, τότε το σύνολο των εντολών θα εκτελείται και θα επαναλαμβάνεται ο έλεγχος, διαφορετικά ο έλεγχος του προγράμματος θα μεταφέρεται μετά από την εντολή END DO.
Παράδειγμα Να γραφεί πρόγραμμα που θα υπολογίζει το παραγοντικό ενός φυσικού αριθμού Ν N!=1*2*3*…*N (N>1) 0!=1
PROGRAM FACTORIAL IMPLICIT NONE INTEGER N, I, P 10READ*, N P=1 I=1 IF (N<0) THEN GOTO 10 ELSE IF(N==0) PRINT*, ‘0!=1’ ELSE DO WHILE(I<=N) P=P*I I=I+1 END DO END IF PRINT*, ‘N!=‘,P END PROGRAM FACTORIAL
Παράδειγμα Να γραφεί πρόγραμμα το οποίο θα υπολογίζει το μέγιστο κοινό διαιρέτη δύο αριθμών α,β βάσει του τύπου: έως ότου α=β.
PROGRAM MKD IMPLICIT NONE INTEGER A,B,MKD PRINT*,’DOSE DYO AKERAIOYS & & ARITHMOYS=’ READ*, A,B DO WHILE (A/=B) IF (A>B) THEN A=A-B ELSE B=B-A END IF END DO PRINT*,’MKD=’,A END PROGRAM MKD
Άσκηση Η εκθετική συνάρτηση EXP(X) ορίζεται ως το άθροισμα των άπειρων όρων της παρακάτω σειράς : Να χρησιμοποιήσετε την παραπάνω σειρά για τον υπολογισμό του EXP(X) έως ότου η απόλυτη τιμή του όρου γίνει μικρότερη ή ίση από μια επιθυμητή ακρίβεια Ε.
Η τρίτη μορφή της DO-END DO Σκοπός: Η επανάληψη ενός συνόλου εντολών για ένα συγκεκριμένο πλήθος φορών. Σύνταξη : DO μεταβλητή=ατ, ττ, [,βήμα(Β)] Σύνολο εντολών END DO Παράδειγμα Να γραφεί πρόγραμμα που θα υπολογίζει το παραγοντικό ενός φυσικού αριθμού Ν.
PROGRAM FACTORIAL IMPLICIT NONE INTEGER N, I, P 10READ*, N P=1 IF (N<0) THEN GOTO 10 ELSE IF(N==0) PRINT*, ‘0!=1’ ELSE DO I=1,N P=P*I END DO END IF PRINT*, ‘N!=‘,P END PROGRAM FACTORIAL
Παρατηρήσεις - Αν θέλουμε να σταματήσουμε την εκτέλεση μιας επανάληψης, χρησιμοποιούμε την εντολή CYCLE π.χ.IF (X>5) CYCLE Σύμφωνα με την εντολή αυτή, δε θα εκτελεστούν οι μετέπειτα εντολές μέχρι την END DO, θα αυξηθεί η “μεταβλητή” κατά το “βήμα” και θα ακολουθήσει η επόμενη επανάληψη, στην περίπτωση που ο έλεγχος της ανακύκλωσης επαληθευτεί. -Σε αντίθεση με την εντολή CYCLE, η εντολή EXIT οδηγεί το πρόγραμμα εκτός της ανακύκλωσης, π.χ. IF (X>5) ΕΧΙΤ Η ροή του προγράμματος μεταφέρεται εκτός του loop, δηλαδή μετά την END DO.
Παράδειγμα Να βρεθούν οι 20 πρώτοι όροι της ακολουθίας Fibonacci : F n = F n-1 + F n-2 με F 1 =0, F 2 =1. PROGRAM FIBONACCI IMPLICIT NONE INTEGER F1,F2,F3 F1=0 F2=1 DO N=3,20 F3=F1+F2 PRINT*, F3 F1=F2 F2=F3 END DO END PROGRAM FIBONACCI
Άσκηση Να βρεθούν οι ακέραιοι αριθμοί A,B,C (Πυθαγόρειοι αριθμοί) που ανήκουν στο διάστημα [1,1000] και ικανοποιούν την ιδιότητα :
PROGRAM PYTHAGORIOI IMPLICIT NONE INTEGERA,B,C DO A=1,1000 DO B=1,1000 DO C=1,1000 IF (A**2+B**2==C**2) THEN PRINT*,A,B,C END IF END DO END PROGRAM PYTHAGORIOI