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

Transcript
Page 1: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

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

Page 2: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

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

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

s=1+2+3+4+5

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

Page 3: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

Ισοδύναμοι υπολογισμοίτου 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

Page 4: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

Ισοδύναμοι υπολογισμοίτου 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

Page 5: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

Ισοδύναμοι υπολογισμοίτου 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

Page 6: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

Παράδειγμα

Εκτύπωση των αριθμών 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

Page 7: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

Παράδειγμα

Εκτύπωση των αριθμών 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

Page 8: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

Παράδειγμα

Εκτύπωση των αριθμών 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

Page 9: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

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

Σύνταξη

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

END DO

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

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

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

Page 10: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

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

Εκτέλεση

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

END DO

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

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

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

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

Page 11: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

Παραδείγματα επανάληψης (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

Page 12: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

Παραδείγματα επανάληψης (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

Page 13: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

Παραδείγματα επανάληψης (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

Page 14: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

Παραδείγματα επανάληψης (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

Page 15: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

Παραδείγματα επανάληψης (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

Page 16: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

Παραδείγματα επανάληψης (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;

Page 17: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

Παραδείγματα επανάληψης (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;

Page 18: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

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

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

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

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

Page 19: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

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

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

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

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

Page 20: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

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

Το πλήθος των ακέραιων στο διάστημα [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

Page 21: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

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

Αν ενδιαφερόμαστε όχι για το πόσες φορές αληθεύει μια λογική έκφρασηαλλά μόνο για το αν αληθεύει, χρησιμοποιούμε ως «μετρητή» μιαμεταβλητή λογικού τύπου. Αμέσως πριν την εντολή 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 *, "Υπάρχει"

Page 22: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

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

Αν ενδιαφερόμαστε όχι για το πόσες φορές αληθεύει μια λογική έκφρασηαλλά μόνο για το αν αληθεύει, χρησιμοποιούμε ως «μετρητή» μιαμεταβλητή λογικού τύπου. Αμέσως πριν την εντολή 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 *, "Υπάρχει"

Page 23: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

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

Το άθροισμα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 έχει τη ζητούμενη τιμή.

Page 24: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

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

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

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;

Page 25: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

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

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

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;

Page 26: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

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

Το γινόμενο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 έχει τη ζητούμενη τιμή.

Page 27: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

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

Το παραγοντικό, 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;

Page 28: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

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

Το παραγοντικό, 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;

Page 29: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

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

Το άθροισμα

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.

Page 30: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

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

Το άθροισμα

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.

Page 31: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

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

Σύνταξη

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

END DO

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

Page 32: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

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

Παράδειγμα

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

DOUBLE PRECISION :: xDO

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

END DO

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

Page 33: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

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

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

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

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

Page 34: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

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

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

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

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

Page 35: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

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

Θέλουμε να τυπώσουμε τετραγωνικές ρίζες 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

Page 36: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

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

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

Παράδειγμα

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

END DO onoma

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

Page 37: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

Όνομα βρόχου 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.

Page 38: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

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

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

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

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

Page 39: ΕΤΥ-114 Ηλεκτρονικοί Υπολογιστές Ι - Εισαγωγή ......Εντολές επανάληψης Εντολή επανάληψης Το άθροισμα των

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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

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

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

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

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

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