ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή...

of 39/39
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Εντολές επανάληψης ΤΡΙΤΗ ΔΙΑΛΕΞΗ
  • date post

    30-Jun-2020
  • Category

    Documents

  • view

    0
  • download

    0

Embed Size (px)

Transcript of ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή...

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    ΤΡΙΤΗ ΔΙΑΛΕΞΗ

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Εντολή επανάληψης

    Το άθροισμα των ακέραιων αριθμών 1–5 υπολογίζεται σε μια ακέραιαμεταβλητή s με την εντολή

    s=1+2+3+4+5

    ΠρόβλημαΠώς θα υπολογίσουμε το άθροισμα των ακέραιων 1–5000;

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Ισοδύναμοι υπολογισμοίτου s=1+2+3+4+5

    s = 0

    s = s + 1

    s = s + 2

    s = s + 3

    s = s + 4

    s = s + 5

    INTEGER :: is = 0i = 1s = s + ii = 2s = s + ii = 3s = s + ii = 4s = s + ii = 5s = s + i

    INTEGER :: is = 0DO i = 1, 5

    s = s + iEND DO

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Ισοδύναμοι υπολογισμοίτου s=1+2+3+4+5

    s = 0

    s = s + 1

    s = s + 2

    s = s + 3

    s = s + 4

    s = s + 5

    INTEGER :: is = 0i = 1s = s + ii = 2s = s + ii = 3s = s + ii = 4s = s + ii = 5s = s + i

    INTEGER :: is = 0DO i = 1, 5

    s = s + iEND DO

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Ισοδύναμοι υπολογισμοίτου s=1+2+3+4+5

    s = 0

    s = s + 1

    s = s + 2

    s = s + 3

    s = s + 4

    s = s + 5

    INTEGER :: is = 0i = 1s = s + ii = 2s = s + ii = 3s = s + ii = 4s = s + ii = 5s = s + i

    INTEGER :: is = 0DO i = 1, 5

    s = s + iEND DO

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Παράδειγμα

    Εκτύπωση των αριθμών 1–5 στην οθόνη:

    PRINT *, 1

    PRINT *, 2

    PRINT *, 3

    PRINT *, 4

    PRINT *, 5

    INTEGER :: ii = 1PRINT *, ii = 2PRINT *, ii = 3PRINT *, ii = 4PRINT *, ii = 5PRINT *, i

    INTEGER :: i

    DO i = 1, 5PRINT *, i

    END DO

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Παράδειγμα

    Εκτύπωση των αριθμών 1–5 στην οθόνη:

    PRINT *, 1

    PRINT *, 2

    PRINT *, 3

    PRINT *, 4

    PRINT *, 5

    INTEGER :: ii = 1PRINT *, ii = 2PRINT *, ii = 3PRINT *, ii = 4PRINT *, ii = 5PRINT *, i

    INTEGER :: i

    DO i = 1, 5PRINT *, i

    END DO

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Παράδειγμα

    Εκτύπωση των αριθμών 1–5 στην οθόνη:

    PRINT *, 1

    PRINT *, 2

    PRINT *, 3

    PRINT *, 4

    PRINT *, 5

    INTEGER :: ii = 1PRINT *, ii = 2PRINT *, ii = 3PRINT *, ii = 4PRINT *, ii = 5PRINT *, i

    INTEGER :: i

    DO i = 1, 5PRINT *, i

    END DO

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Εντολή επανάληψης DOγια συγκεκριμένο αριθμό επαναλήψεων

    Σύνταξη

    DO μεταβλητή = αρχική τιμή, τελική τιμή, βήμα αύξησηςεντολές

    END DO

    όπου• Η «μεταβλητή» είναι ακέραια.• Τα «αρχική τιμή», «τελική τιμή», «βήμα αύξησης»

    είναι ακέραιες ποσότητες (σταθερές ή μεταβλητές ή εκφράσεις).• Το «βήμα αύξησης» είναι θετικό ή αρνητικό.

    Μπορεί να παραλείπεται (και θεωρείται 1).• Η «μεταβλητή» δεν επιτρέπεται να αλλάξει τιμή μέσα στο σώμα.

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Εντολή επανάληψης DOγια συγκεκριμένο αριθμό επαναλήψεων

    Εκτέλεση

    DO μεταβλητή = αρχική τιμή, τελική τιμή, βήμα αύξησηςεντολές

    END DO

    1. η «μεταβλητή» αποκτά την «αρχική τιμή».2. ελέγχεται αν με διαδοχικές προσθέσεις του «βήματος αύξησης» στη

    «μεταβλητή» μπορούμε να φτάσουμε ή να ξεπεράσουμε την «τελικήτιμή».

    • Αν όχι, διακόπτεται η επανάληψη.• Αν ναι, εκτελούνται οι εντολές στο σώμα.

    3. Προστίθεται στη «μεταβλητή» το «βήμα αύξησης» καιεπαναλαμβάνεται το βήμα 2.

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Παραδείγματα επανάληψης (1/3)

    Το γινόμενο των άρτιων ακέραιων αριθμών μεταξύ 2–8(p = 2 * 4 * 6 * 8):

    INTEGER :: ip = 1i = 2p = p * ii = i + 2p = p * ii = i + 2p = p * ii = i + 2p = p * i

    INTEGER :: ip = 1DO i = 2, 8, 2

    p = p * iEND DO

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Παραδείγματα επανάληψης (1/3)

    Το γινόμενο των άρτιων ακέραιων αριθμών μεταξύ 2–8(p = 2 * 4 * 6 * 8):

    INTEGER :: ip = 1i = 2p = p * ii = i + 2p = p * ii = i + 2p = p * ii = i + 2p = p * i

    INTEGER :: ip = 1DO i = 2, 8, 2

    p = p * iEND DO

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Παραδείγματα επανάληψης (1/3)

    Το γινόμενο των άρτιων ακέραιων αριθμών μεταξύ 2–8(p = 2 * 4 * 6 * 8):

    INTEGER :: ip = 1i = 2p = p * ii = i + 2p = p * ii = i + 2p = p * ii = i + 2p = p * i

    INTEGER :: ip = 1DO i = 2, 8, 2

    p = p * iEND DO

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Παραδείγματα επανάληψης (2/3)

    • Άθροισμα των ακέραιων αριθμών από το 1 ως το 100:

    INTEGER :: s, is = 0DO i = 1, 100

    s = s + iEND DO

    • Εκτύπωση των αριθμών 99, 97, 95,…, 3, 1 (με αυτή τη σειρά):

    INTEGER :: iDO i = 99, 1, -2

    PRINT *, iEND DO

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Παραδείγματα επανάληψης (2/3)

    • Άθροισμα των ακέραιων αριθμών από το 1 ως το 100:

    INTEGER :: s, is = 0DO i = 1, 100

    s = s + iEND DO

    • Εκτύπωση των αριθμών 99, 97, 95,…, 3, 1 (με αυτή τη σειρά):

    INTEGER :: iDO i = 99, 1, -2

    PRINT *, iEND DO

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Παραδείγματα επανάληψης (3/3)

    • Εκτύπωση των αριθμών 0.0, 0.1, 0.2, …, 9.9, 10.0:Είναι ΛΑΘΟΣ (γιατί;) το

    DOUBLE PRECISION :: xDO x = 0.0d0, 10.0d0, 0.1d0

    PRINT *, xEND DO

    Το ΣΩΣΤΟ είναι

    INTEGER :: iDO i = 0, 100

    PRINT *, 0.1d0 * iEND DO

    ΠαρατήρησηΓιατί όχι i/10;

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Παραδείγματα επανάληψης (3/3)

    • Εκτύπωση των αριθμών 0.0, 0.1, 0.2, …, 9.9, 10.0:Είναι ΛΑΘΟΣ (γιατί;) το

    DOUBLE PRECISION :: xDO x = 0.0d0, 10.0d0, 0.1d0

    PRINT *, xEND DO

    Το ΣΩΣΤΟ είναι

    INTEGER :: iDO i = 0, 100

    PRINT *, 0.1d0 * iEND DO

    ΠαρατήρησηΓιατί όχι i/10;

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Πότε χρησιμοποιούμε εντολή DO;

    Αν έχουμε εντολές που επαναλαμβάνονται και μπορούν να γραφούν στημορφή• σύνολο εντολών, εξαρτώμενων ή μη από μια «ακέραια μεταβλητή»,

    αλλά με την ίδια μορφή ανεξάρτητα από την τιμή της μεταβλητής,• «ακέραια μεταβλητή» = «ακέραια μεταβλητή» + «βήμα αύξησης»,

    τότε χρησιμοποιούμε την εντολή DO που παρουσιάσαμε.

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Εφαρμογή: ΜετρητήςΟρισμός

    Μια ακέραια μεταβλητή που• Ακριβώς πριν το DO τη μηδενίζουμε,• Μέσα στις εντολές του DO την αυξάνουμε κατά ένα όταν

    ικανοποιείται κάποια λογική έκφραση,• Μετά το END DO έχει τιμή το πόσες φορές στο διάστημα μεταβολής

    της μεταβλητής ελέγχου ήταν αληθής η λογική έκφραση.

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Εφαρμογή: ΜετρητήςΠαράδειγμα

    Το πλήθος των ακέραιων στο διάστημα [5, 108] που είναι πολλαπλάσιοιτου 2 ή του 3 υπολογίζεται στο μετρητή k:

    INTEGER :: k, ik = 0DO i = 5, 108

    IF (MOD(i,2) == 0 .OR. MOD(i,3) == 0) k = k + 1END DOPRINT *, k

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Εφαρμογή: Λογικός «μετρητής»

    Αν ενδιαφερόμαστε όχι για το πόσες φορές αληθεύει μια λογική έκφρασηαλλά μόνο για το αν αληθεύει, χρησιμοποιούμε ως «μετρητή» μιαμεταβλητή λογικού τύπου. Αμέσως πριν την εντολή DO δίνουμε μια τιμή(.TRUE. ή .FALSE.) και μέσα στο DO αλλάζει όταν ικανοποιηθεί κάποιαλογική έκφραση.

    ΠαράδειγμαΥπάρχει πολλαπλάσιο του 912 στο διάστημα [4000, 5000];

    LOGICAL :: foundINTEGER :: kfound = .FALSE.DO k = 4000,5000

    IF (MOD(k,912) == 0) found = .TRUE.END DOIF (found) PRINT *, "Υπάρχει"

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Εφαρμογή: Λογικός «μετρητής»

    Αν ενδιαφερόμαστε όχι για το πόσες φορές αληθεύει μια λογική έκφρασηαλλά μόνο για το αν αληθεύει, χρησιμοποιούμε ως «μετρητή» μιαμεταβλητή λογικού τύπου. Αμέσως πριν την εντολή DO δίνουμε μια τιμή(.TRUE. ή .FALSE.) και μέσα στο DO αλλάζει όταν ικανοποιηθεί κάποιαλογική έκφραση.

    ΠαράδειγμαΥπάρχει πολλαπλάσιο του 912 στο διάστημα [4000, 5000];

    LOGICAL :: foundINTEGER :: kfound = .FALSE.DO k = 4000,5000

    IF (MOD(k,912) == 0) found = .TRUE.END DOIF (found) PRINT *, "Υπάρχει"

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Υπολογισμός αθροίσματοςΚώδικας

    Το άθροισμαj∑

    k=i

    ak = ai + ai+1 + ai+2 + · · ·+ aj

    (με i,j ακέραια) υπολογίζεται προσθέτοντας σε μια (πραγματική)μεταβλητή έναν-έναν τους (πραγματικούς) όρους:

    INTEGER :: kDOUBLE PRECISION :: ss = 0.0d0DO k=i,j

    s = s + ...END DO

    Στο ... γράφουμε τον κώδικα που εκφράζει τον όρο ak.Αφού ολοκληρωθεί το DO, η μεταβλητή s έχει τη ζητούμενη τιμή.

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Υπολογισμός αθροίσματοςΠαράδειγμα

    Υπολογισμός του αθροίσματος

    10∑k=1

    1

    k2 =1

    12+

    1

    22+ · · ·+ 1

    102.

    INTEGER :: kDOUBLE PRECISION :: ss = 0.0d0DO k = 1, 10

    s = s + 1.0d0/k**2END DO

    ΠαρατήρησηΓιατί όχι 1/k**2;

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Υπολογισμός αθροίσματοςΠαράδειγμα

    Υπολογισμός του αθροίσματος

    10∑k=1

    1

    k2 =1

    12+

    1

    22+ · · ·+ 1

    102.

    INTEGER :: kDOUBLE PRECISION :: ss = 0.0d0DO k = 1, 10

    s = s + 1.0d0/k**2END DO

    ΠαρατήρησηΓιατί όχι 1/k**2;

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Υπολογισμός γινομένουΚώδικας

    Το γινόμενοj∏

    k=i

    ak = ai ∗ ai+1 ∗ ai+2 ∗ · · · ∗ aj

    (με i,j ακέραια) υπολογίζεται πολλαπλασιάζοντας σε μια πραγματικήμεταβλητή έναν-έναν τους όρους:

    INTEGER :: kDOUBLE PRECISION :: pp = 1.0d0DO k = i,j

    p = p * ...END DO

    Στο ... γράφουμε τον κώδικα που εκφράζει τον όρο ak.Αφού ολοκληρωθεί το DO, η μεταβλητή p έχει τη ζητούμενη τιμή.

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Υπολογισμός γινομένουΠαράδειγμα

    Το παραγοντικό, n!, ενός μη αρνητικού ακέραιου n είναι

    n! =

    1× 2× 3 · · · × (n − 1)× n =n∏

    k=1

    k , n > 0 ,

    1 , n = 0 .

    Υπολογίζεται στη μεταβλητή p με τον κώδικα

    INTEGER :: k, pp = 1DO k = 1,n

    p = p * kEND DO

    Πόσο είναι το p όταν το n είναι 0;

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Υπολογισμός γινομένουΠαράδειγμα

    Το παραγοντικό, n!, ενός μη αρνητικού ακέραιου n είναι

    n! =

    1× 2× 3 · · · × (n − 1)× n =n∏

    k=1

    k , n > 0 ,

    1 , n = 0 .

    Υπολογίζεται στη μεταβλητή p με τον κώδικα

    INTEGER :: k, pp = 1DO k = 1,n

    p = p * kEND DO

    Πόσο είναι το p όταν το n είναι 0;

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Υπολογισμός διπλού αθροίσματοςΚώδικας

    Το άθροισμα

    j∑k=i

    n∑m=p

    akm =j∑

    k=i

    ( n∑m=p

    akm

    )

    (με i,j,p,n ακέραια) υπολογίζεται ωςεξής:

    INTEGER :: kDOUBLE PRECISION :: s, fs = 0.0d0DO k = i, j

    s = s + fEND DO

    Στο ... γράφουμε τον κώδικα πουεκφράζει τον όρο akm.

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Υπολογισμός διπλού αθροίσματοςΚώδικας

    Το άθροισμα

    j∑k=i

    n∑m=p

    akm =j∑

    k=i

    ( n∑m=p

    akm

    )

    (με i,j,p,n ακέραια) υπολογίζεται ωςεξής:

    INTEGER :: k, mDOUBLE PRECISION :: s, fs = 0.0d0DO k = i, j

    f = 0.0d0DO m = p, n

    f = f + ...END DOs = s + f

    END DO

    Στο ... γράφουμε τον κώδικα πουεκφράζει τον όρο akm.

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Εντολή DOγια απροσδιόριστο αριθμό επαναλήψεων

    Σύνταξη

    DOεντολέςIF (λογική_έκφραση) EXITεντολές

    END DO

    Οι εντολές που περικλείονται στα DO …END DO εκτελούνται για πάντα.Πρέπει να διακόψουμε την επανάληψη (να «βγούμε» από το DO) ότανκάποια λογική έφραση γίνει αληθής, εκτελώντας την εντολή EXIT.

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Εντολή DOγια απροσδιόριστο αριθμό επαναλήψεων

    Παράδειγμα

    Επιθυμούμε να διαβάσουμε έναν πραγματικό αριθμό και ναπροχωρήσουμε μόνο αν είναι θετικός:

    DOUBLE PRECISION :: xDO

    PRINT *, "Δώσε θετικό πραγματικό"READ *, xIF (x > 0.0d0) EXITPRINT *, "Δεν έδωσες θετικό"

    END DO

    Όσο ο χρήστης δίνει μη θετικούς αριθμούς, οι εντολές θαεπαναλαμβάνονται.

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Βοηθητικές εντολές

    Εμφανίζονται μόνο μέσα σε DO…END DO με ή χωρίς μεταβλητή ελέγχου:

    EXITΌταν εκτελεστεί, προκαλεί την έξοδο από το βρόχο που την περικλείει.Η επόμενη εντολή που εκτελείται είναι αυτή που ακολουθεί το END DO.

    CYCLEΌταν εκτελεστεί, παραλείπει τις εντολές που την ακολουθούν καιπηγαίνει στο END DO. Το επόμενο βήμα που εκτελείται είναι η αύξηση τηςμεταβλητής ελέγχου.Σε DO χωρίς μεταβλητή ελέγχου ξαναρχίζει την επανάληψη.

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Βοηθητικές εντολές

    Εμφανίζονται μόνο μέσα σε DO…END DO με ή χωρίς μεταβλητή ελέγχου:

    EXITΌταν εκτελεστεί, προκαλεί την έξοδο από το βρόχο που την περικλείει.Η επόμενη εντολή που εκτελείται είναι αυτή που ακολουθεί το END DO.

    CYCLEΌταν εκτελεστεί, παραλείπει τις εντολές που την ακολουθούν καιπηγαίνει στο END DO. Το επόμενο βήμα που εκτελείται είναι η αύξηση τηςμεταβλητής ελέγχου.Σε DO χωρίς μεταβλητή ελέγχου ξαναρχίζει την επανάληψη.

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Βοηθητικές ΕντολέςΠαράδειγμα

    Θέλουμε να τυπώσουμε τετραγωνικές ρίζες 10 αριθμών εισόδου,αγνοώντας τους αρνητικούς:

    INTEGER :: i, kDOUBLE PRECISION :: xk = 0DO

    PRINT *, "Δώσε μη αρνητικό πραγματικό"READ *, xIF (x < 0.0d0) CYCLE ! απορρίπτουμε το αρνητικό xPRINT *, "Η τετραγωνική ρίζα είναι", SQRT(x)k = k + 1IF (k == 10) EXIT

    END DO

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Όνομα βρόχου DO (1/2)

    Έχουμε τη δυνατότητα να αποδώσουμε ένα όνομα σε κάθε βρόχο DO:Δίνουμε το όνομα (ακολουθούμενο από ‘:’) πριν το DO, στην ίδια γραμμή,και συμπληρώνουμε υποχρεωτικά το αντίστοιχο END DO με το ίδιο όνομα.

    Παράδειγμα

    onoma: DO i=1, 10....

    END DO onoma

    Το όνομα βρόχου σχηματίζεται με τους γνωστούς κανόνες που ισχύουνγια τα ονόματα μεταβλητών, σταθερών, συναρτήσεων κλπ.

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Όνομα βρόχου DO (2/2)Χρησιμότητα σε εμφωλευμένα DO

    Οι εντολές EXIT και CYCLE αφορούν κανονικά τον πιο «κοντινό» τουςβρόχο. Αν όμως τις συμπληρώσουμε με όνομα κάποιου βρόχου που τιςπερικλείει, αφορούν τον ονομαζόμενο βρόχο.

    Παράδειγμα

    outer: DO i = 1,10DO j = 1,20

    ...IF (j > i) EXIT outer

    END DOEND DO outer

    Όταν εκτελεστεί το EXIT, η ροή εκτέλεσης θα μεταφερθεί μετά τοEND DO outer.

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Υπονοούμενο DO (1/2)

    Δομή επανάληψης που παράγει μια σειρά αριθμών (ή άλλων πο-σοτήτων).

    Σύνταξη(έκφραση, μεταβλητή = αρχική τιμή, τελική τιμή, βήμα αύξησης)

    Η ακέραια «μεταβλητή» παίρνει τιμές που καθορίζονται από την τριάδααριθμών που ακολουθούν το ‘=’, με τους ίδιους κανόνες που ισχύουν γιατην εντολή DO. Αν παραλείπεται το «βήμα αύξησης» εννοείται το 1. Κάθεφορά που αλλάζει τιμή η «μεταβλητή», υπολογίζεται η «έκφραση». Έτσι,το υπονοούμενο DO αντικαθίσταται με μια σειρά τιμών.

  • .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    Εντολές επανάληψης

    Υπονοούμενο DO (2/2)

    ΠαράδειγμαΗ εκτύπωση των αριθμών 1, 3, 5, . . . , 19 στην ίδια γραμμή μπορεί να γίνειμε την εντολή

    PRINT *, (i, i=1,19,2)

    ή με την εντολή

    PRINT *, (2*i+1, i=0,9)

    Εντολές επανάληψηςΕισαγωγήΕντολή για συγκεκριμένο πλήθος επαναλήψεωνΕντολή για απροσδιόριστο πλήθος επαναλήψεωνΒοηθητικές εντολέςΌνομα βρόχουΥπονοούμενο DO