ΦΥΣ 145 - Διαλ.03. Ø Εντολές ελέγχου και λογικής. Ø Εντολές µεταφοράς. Ø Βρόγχοι επανάληψης εντολών. Ø Βρόγχοι επανάληψης µε λογικές σχέσεις

Σχετικά έγγραφα
Αναφορά (1/2) Μπορούμε να ορίσουμε μια άλλη, ισοδύναμη αλλά ίσως πιο σύντομη, ονομασία για ποσότητα (μεταβλητή, σταθερή, συνάρτηση, κλπ.

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Δομή Επανάληψης. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

Ενότητα 1 Διάλεξη 3. Προγραμματισμός με Εφαρμογές στην Επιστήμη του Μηχανικού. Σιέττος Κωνσταντίνος

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Κεφάλαιο 5ο: Εντολές Επανάληψης

Άσκηση 1. Α. Υπολογίστε χωρίς να εκτελέσετε κώδικα FORTRAN τα παρακάτω: Ποιά είναι η τελική τιμή του Z στα παρακάτω κομμάτια κώδικα FORTRAN:

Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη.

Βρόχοι. Εντολή επανάληψης. Το άθροισμα των αριθμών 1 5 υπολογίζεται με την εντολή. Πρόβλημα. Πώς θα υπολογίσουμε το άθροισμα των ακέραιων ;

8 FORTRAN 77/90/95/2003

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

Υπο-προγράμματα στη Fortran

Εισαγωγή στον Προγραμματισμό

Δομή Επανάληψης. Κεφάλαιο 7 Mike Trimos

Στόχοι και αντικείμενο ενότητας. Προτάσεις επανάληψης. Έλεγχος ροής προγράμματος. #5.. Εντολές Επανάληψης

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

4. Επιλογή και Επανάληψη

Εισαγωγή στη γλώσσα προγραμματισμού C++

ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ PASCAL

ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Υπολογισμός - Εντολές Επανάληψης

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Εισαγωγή στην πληροφορική

Εισαγωγή στην πληροφορική

Κεφάλαιο 4ο: Εντολές επιλογής

Δομημένος Προγραμματισμός

Εντολές ελέγχου ροής if, for, while, do-while

Fortran και Αντικειμενοστραφής προγραμματισμός.

Η ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ Εντολές Επανάληψης REPEAT UNTIL, FOR, WHILE

Β7.1.4 Δομές Επανάληψης. Β Λυκείου Κατεύθυνσης

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Εντολές Ελέγχου & Επανάληψης

Σκοπός. Εργαστήριο 6 Εντολές Επανάληψης

Θέματα Προγραμματισμού Η/Υ

Ψευδοκώδικας. November 7, 2011

Λογικές εκφράσεις και μεταβλητές

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Δομή Επιλογής. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

Οι εντολές ελέγχου της ροής ενός προγράμματος.

Ενότητα 1: «Εισαγωγή στην Αλγοριθμική και τον Προγραμματισμό. Απλές ασκήσεις με γλώσσα Pascal»

Προγραμματισμός με FORTRAN Συνοπτικός Οδηγός Α. Σπυρόπουλος Α. Μπουντουβής

ΥΠΟΛΟΓΙΣΤΕΣ Ι. Τι χρειάζεται η εντολή IF ΕΝΤΟΛΗ IF. Παράδειγμα #1. Παράδειγμα #1

Προγραμματισμός Η/Υ. Ενότητα 5: Εντολές Επανάληψης

Ο πιο κάτω πίνακας περιγράφει σε ποιες περιπτώσεις χρησιμοποιούμε τους τρεις πιο πάνω τρόπους:

Shell Scripts: loops / if / test

- Αναπαράσταση ακέραιας τιµής : - Εύρος ακεραίων : - Ακέραιοι τύποι: - Πράξεις µε ακεραίους (DIV - MOD)

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C

Στόχοι και αντικείμενο ενότητας. Βασικές κατασκευές ΓΠ. Έλεγχος ροής προγράμματος. #4.. Εντολές Επιλογής

Είσοδος -Έξοδος. Άνοιγµα αρχείου:

Πληρουορική Γ Γσμμασίοσ

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Εισαγωγή στη Fortran. Μάθημα 3 ο. Ελευθερία Λιούκα

Εισαγωγή στον Προγραμματισμό με C++

Προγραμματισμός Ι (ΗΥ120)

Δομή προγράμματος στη Fortran

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

Προγραμματισμός Ι (HY120)

Μορφοποίηση της εξόδου

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Λογικός τύπος Τελεστές σύγκρισης Λογικοί τελεστές Εντολές επιλογής Εμβέλεια Μαθηματικές συναρτήσεις Μιγαδικός τύπος ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ

Δομή προγράμματος στη Fortran

Εισαγωγή στη Matlab 2 Εισαγωγή στην Αριθμητική Ανάλυση Διδάσκων: Γεώργιος Ακρίβης Βοηθός: Δημήτριος Ζαβαντής

ΗΥ-150. Προγραμματισμός

Θεωρητικές Ασκήσεις. ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. 1 ο Μέρος

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Εισαγωγή στον Προγραμματισμό

for for for for( . */

Κεφάλαιο : Επαναλήψεις (o βρόγχος While) (Διάλεξη 9) Δομές Έλεγχου Προγράμματος

Εισαγωγή στον Προγραμματισμό Η/Υ (Fortran 90/95/2003)

Μεθόδων Επίλυσης Προβλημάτων

ΗΥ-150. Προγραμματισμός

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Αρχεία Ένα αρχείο αποτελείται από μία σειρά ομοειδών δεδομένων που ονομάζονται λογικές εγγραφές (logical record)

Εισαγωγή στον Προγραμματισμό Η/Υ για Χημικούς Μηχανικούς

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Υπολογισμός - Εντολές Ελέγχου

Είδη εντολών. Απλές εντολές. Εντολές ελέγχου. Εκτελούν κάποια ενέργεια. Ορίζουν τον τρόπο με τον οποίο εκτελούνται άλλες εντολές

Δομές Επανάληψης. Εισαγωγή στη C++

Διαδικασιακός Προγραμματισμός

ΠΡΟΤΕΙΝΟΜΕΝΑ ΘΕΜΑΤΑ ΔΟΜΗΜΕΝΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Γ ΕΠΑΛ

Fortran και Αντικειµενοστραφής προγραµµατισµός.

ΕΠΛ031 - Εισαγωγή στον Προγραμματισμό

Oι εντολές COMMON και PARAMETER

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / Γ ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 27/01/2013

Λειτουργικά. Συστήματα Ι. Φ ρ ο ν τ ι σ τ ή ρ ι ο. Αριστείδης Ηλίας. Εργαστήριο Ηλεκτρονικών Υπολογιστών

2ο σετ σημειώσεων. 1 Εντολές εκτέλεσης υπό συνθήκη. 19 Μαρτίου 2012

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004)

Ο αλγόριθμος πρέπει να τηρεί κάποια κριτήρια

Δομές Ακολουθίας- Επιλογής - Επανάληψης. Δομημένος Προγραμματισμός

Εισαγωγή στον Προγραμματισμό Η/Υ για Χημικούς Μηχανικούς

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

Εναλλακτικές εντολές για ανάγνωση/εγγραφή

Προγραμματισμός Η/Υ. Ενότητα 4: Εντολές Επιλογής

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2016

Κεφάλαιο : Επαναλήψεις (oι βρόχος While) ( ιάλεξη 9) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Δομές ελέγχου & επανάληψης

ΦΥΣ 145 Μαθηµατικές Μέθοδοι στη Φυσική. Πρόοδος 28 Μαρτίου 2009 Οµάδα 1 η

Γ7.1 Επανάληψη ύλης Β Λυκείου. Γ Λυκείου Κατεύθυνσης

Σύντομες εισαγωγικές σημειώσεις για την. Matlab

Διάλεξη 5η: Εντολές Επανάληψης

Transcript:

ΦΥΣ 145 - Διαλ.03 1 Ø Εντολές ελέγχου και λογικής Ø Εντολές µεταφοράς Ø Βρόγχοι επανάληψης εντολών Ø Βρόγχοι επανάληψης µε λογικές σχέσεις

Εντολές Ελέγχου και Λογικής ΦΥΣ 145 - Διαλ.03 2 q Τα assignment statements είναι αρκετά απλά. Μεταφορά πληροφορίας από μια πράξη/σταθερά σε μεταβλητή που αντιστοιχεί σε θέση μνήμης του υπολογιστή Απλή δομή και η σειρά εκτέλεσης των εντολών ήταν προκαθορισμένη, μοναδική και ανεξάρτητη από τα μερικά αποτελέσματα program trapezoid c********************************** c Calculate the height and area of a trapezoid c Input the sides of the trapezoid A,B,C,D c Output the height H and area A c********************************** REAL A, B, C, D REAL HEIGHT, AREA REAL S, X READ *, A, B, C, D c Calculate the height S = (A B + C + D)/2. X = S*(S A + B) * (S - D) * (S - C) HEIGHT = (2./(A-B))*SQRT(x) c Calculate the Area AREA = ((A+B)/2.) * HEIGHT PRINT *, HEIGHT, AREA END q Στην πράξη όμως ακόμη και τα πιο απλά προβλήματα απαιτούν μεγαλύτερη ευελιξία q Πως όμως αντιμετωπίζουμε προβλήματα όπως ο υπολογισμός της τετραγωνικής ρίζας ενός αρνητικού αριθμού χωρίς να σταματά η ροή εκτέλεσης του προγράμματος? Εντολές ελέγχου και λογικής control statements

Εντολές ελέγχου - Control Statements ΦΥΣ 145 - Διαλ.03 3 Ø Επιτρέπουν την παράλειψη ενός πλήθους εντολών (πηγαίνουμε από μια εντολή Ε1 σε μια άλλη Ε2 όχι επόμενη της πρώτης) Ø Επιτρέπουν συγκρίσεις Aνάλογα με το αποτέλεσμα, εκτελείται μια σειρά πράξεων ή κάποια άλλη πράξη Ο Η/Υ αποκτά την δομή ανθρώπινης σκέψης (μέσω ενός προγράμματος) q Οι κυριότερες εντολές ελέγχου και λογικής στην FORTRAN είναι: Βασικό IF ΙF THEN ELSEIF ELSE DO GO TO CONTINUE, PAUSE, STOP, END q Η μεταφορά του ελέγχου γίνεται με μια εντολή Ε1 στην οποία καθορίζουμε την εντολή Ε2 που πρέπει να εκτελέσει αμέσως μετά ο Η/Υ Ø Η Εντολή Ε2 πρέπει να είναι εκτελέσιµη Αν υπάρχουν υποπρογράμματα (επόμενο μάθημα) μέσα στο κύριο πρόγραμμα, οι Ε1 και Ε2 πρέπει να ανήκουν στο ίδιο πρόγραμμα ή υποπρόγραμμα

Βασικό ΙF ΦΥΣ 145 - Διαλ.03 4 q Δίνει τη δυνατότητα σ ένα πρόγραµµα να αποφασίζει ποια εντολή θα εκτελέσει στο επόµενο βήµα ανάλογα µε την τιµή κάποιας µεταβλητής q Η εντολή IF αυξάνει τις δυνατότητες ενός προγράµµατος PROGRAM IFIF c========================== c THE BASIC IF STATEMENT c ========================== INTEGER N PRINT *, Give me an integer READ *, N IF (N.GT.0) THEN PRINT *, The number is positive ENDIF IF (N.LT.0) THEN PRINT *, The number is negative ENDIF STOP END Η σύνταξη της εντολής είναι: IF (logical expression) THEN block ENDIF H λογική έκφραση στην παρένθεση είναι κάτι που μπορεί να ναι αληθές ή ψευδές Ø Αν είναι ψευδής το πρόγραμμα συνεχίζει μετά την εντολή ΕΝD IF Ø Aν είναι αληθής τότε εκτελείται το group των εντολών μετά το ΙF. Συνηθισµένη µορφή λογικής σχέσης είναι: (Aριθ.σχέση) Λογικός Τελεστής (Αριθ. Σχέση) π.χ. (Α.GT. 0)

Βασικό ΙF (συνέχεια) ΦΥΣ 145 - Διαλ.03 5 q Oι τελεστές σχέσης που χρησιμοποιούνται είναι:.gt. Greater Than (>).LT. Less Than (<).EQ. EQual (=).GE. Greater Equal ( ).LE. Less Equal ( ).NE. Not Equal ( ) Προσέξτε τις τελείες (.) που υπάρχουν πριν και μετά κάθε τελεστή σχέσης Προσοχή: Τα σύµβολα δεν αναπαραστούν τους λογικούς τελεστές αλλά οι compilers τα θεωρούν σωστά q Οι λογικές σχέσεις συνδέονται ακόμα και με τους λογικούς τελεστές:.and. Λογικό ΑND.EQV. (equivalent).or. Λογικό ΟR.NEQV. (not equivalent) Ø Όταν χρησιμοποιούνται οι λογικοί τελεστές θα πρέπει κάθε λογική σχέση να βρίσκεται σε παρένθεση και το ίδιο η ολική λογική σχέση: π.χ. ΙF ( (A.GT.B).AND. (B.LT.C) ) THEN! ENDIF

Βασικό ΙF Παραδείγματα (συνέχεια) ΙF ( (A.GT.B).OR. (B.EQ.C) ) THEN! Block εντολών ENDIF Η ροή συνεχίζει στην εντολή μέσα στο IF block αν είτε το A > B ή το Β = C q Λογικές εκφράσεις μπορούν να αποκτήσουν αντίθετη σημασία αν προτάξουμε το.νot. (.ΝΟΤ. (Α.GT. B) ) Η σχέση είναι ισοδύναμη με: Α < Β ΦΥΣ 145 - Διαλ.03 6 q Δεν είναι απαραίτητο να υπάρχει κάποιο block εντολών μετά την εντολή ΙF q Καλή πρακτική: Oι εντολές που περιέχονται μέσα σε ένα ΙF να γράφονται σε μετατοπισμένη στήλη προς τα δεξιά σε σχέση με την στήλη της αρχής του IF για εύκολη ανάγνωση του κώδικα δείχνοντας ότι το τμήμα αυτό του προγράμματος είναι ξεχωριστό. ΙF (A.GT. B) THEN K = K + 1 ENDIF L = L * K

ΦΥΣ 145 - Διαλ.03 7 IF THEN ELSEIF THEN ELSE q Αυτή η μορφή χρησιμοποιείται για πολλαπλές αποφάσεις. Αν καμιά από τις αποφάσεις δεν ικανοποιείται, τότε εκτελείται το block D των εντολών (μετά την εντολή ΕLSE). ψευδής ψευδής ψευδής IF (decision1) THEN Block A ELSEIF (decision2) THEN Block B ELSEIF (decision 3) THEN Block C ELSE Block D END IF αληθής αληθής αληθής

ΦΥΣ 145 - Διαλ.03 8 IF χωρίς THEN και ΕΝD IF q Αν το block των εντολών που θέλουμε να εκτελέσουμε μετά ένα επιτυχημένο IF, αποτελείται μόνο από μια εντολή και δεν υπάρχουν άλλες αποφάσεις να παρθούν τότε μπορούμε να παραλείψουμε το ΤΗΕΝ όπως επίσης και το ΕΝDIF ΙF (A.GT. B) PRINT *, is greater than B IF (NUM.LT. MIN) MIN= NUM Ø Δεν μπορούμε να κάνουμε κάτι τέτοιο με ΤΗΕΝ και ΕLSEIF δομές αποφάσεων.

ΦΥΣ 145 - Διαλ.03 9 Εντολή μεταφοράς GOTO q Aπλή εντολή μεταφοράς από ένα σημείο του προγράμματος σε άλλo H σύνταξη είναι: GOTO (ή GO TO) E Ν όπου E Ν η εντολή Ε με αριθμό Ν, την οποία ο υπολογιστής υποχρεούται να εκτελέσει αμέσως μετά. Ø Δεν υπάρχει καμία προϋπόθεση για την μεταφορά αυτή και γι αυτό η εντολή αυτή καλείται και unconditional GOTO Ο αριθμός εντολής (π.χ. 10) μπαίνει στις πρώτες 5 στήλες της γραμμής της εντολής PROGRAM TEST REAL A, B, X N = 0 10 READ *, A, B X = B**A + 5.0 PRINT *, A,B,X N = N + 1 IF (N.LT.100) GOTO 10 END Προσοχή: H εντολή αυτή παρ όλη την απλότητά της πρέπει να αποφεύγεται όσο το δυνατό περισσότερο. Ο λόγος; Οδηγεί πάρα πολλές φορές σε λάθη μια και φθάνοντας σε μια εντολή η οποία μπορεί να καλείται από διάφορα σημεία του προγράμματος με ανάλογα GOTOς δεν υπάρχει πληροφόρηση από ποιο σημείο του προγράμματος έγινε η μεταφορά

ΦΥΣ 145 - Διαλ.03 10 Παράδειγμα IF και GOTO q Nα προσδιοριστούν όλες οι τριάδες (x,y,z) ακεραίων αριθμών από το 1 έως 9, για τις οποίες το άθροισμα των τετραγώνων των αριθμών, Κ, είναι πολλαπλάσιο του ακέραιου L. Λογική Λύση: Έστω ο ακέραιος Κ ακέραιο πολ/σιο του ακεραίου L Αντίστροφα αν: Mηδενισμός της Αναλυτική Λύση: K L! L " K = 0 K & # $ % L! L " K ' (! K L " L # K = 0 τότε ο ακέραιος Κ είναι ακέραιο πολ/σιο του L είναι αναγκαία και ικανή συνθήκη ώστε ο Κ ακέραιο πολ/σιο του L To πρόγραμμα θα σχηματίζει για κάθε τριάδα (x,y,z), το άθροισμα K=x 2 +y 2 +z 2 και θα εξετάζει αν κάθε άθροισμα K είναι πολ/σιο του L (λογική λύση) Για ένα ζεύγος αριθμών (x, y) ο z παίρνει όλες τις τιμές από 1 ως 9 και αν x 2 +y 2 +z 2 είναι πολ/σιο του L, τυπώνεται η τριάδα x, y, z. Αυξάνουμε το y κατά 1, (νέο ζεύγος x,y) και επαναλαμβάνουμε τη διαδικασία Όταν εξαντληθούν οι δυνατές τιμές του y τότε αυξάνουμε το x κατά 1 και επαναλαμβάνεται η διαδικασία

ΦΥΣ 145 - Διαλ.03 11 Παράδειγμα PROGRAM TRIPLET INTEGER IX, IY, IZ INTEGER N, IXYZ, IXYZN READ *, L c Initialization for IX IX = 0 1 IX = IX + 1 c Initialization for IY IY = 0 2 IY = IY + 1 c Initialization for IZ IZ = 0 3 IZ = IZ+1 c Calculate the sum of the squares IXYZ = IX**2 + IY**2 + IZ**2 c Calculate the remainder IXYZN = (IXYZ/L)*L IXYZ c Check to see if it is zero IF (IXYZN.EQ.0) THEN PRINT *,IX,IY,IZ ENDIF IF ( (IZ 9).LT. 0) GOTO 3 IF ( (IY 9).LT. 0) GOTO 2 IF ( (IX 9).LT. 0) GOTO 1 END

Επανάληψη εντολής Βρόγχοι - Iterations DO Loop ΦΥΣ 145 - Διαλ.03 12 q Μια εντολή DO loop επιτρέπει την εκτέλεση ενός τμήματος του προγράμματος ένα καθορισμένο αριθμό επαναλήψεων. Στα DO loops το τμήμα που θέλουμε να επαναεκτελεσθεί, ξεκινά με την εντολή DO και τελειώνει με την αριθμημένη εντολή CONTINUE. Το τμήμα του προγράμματος που επανεκτελείται καλείται το σώμα (body) του DO loop, και ο αριθμός των επαναλήψεων καθορίζεται από την αρχική και τελική τιμή ενός μετρητή καθώς επίσης και από το πόσο αυξάνεται ο μετρητής κάθε φορά που εκτελείται το σώμα του DO loop.

ΦΥΣ 145 - Διαλ.03 13 Σύνταξη της εντολής DO H σύνταξη της εντολής DO είναι η ακόλουθη: Ισοδύναµη σύνταξη DO Ν IX = ISTART, ISTOP, ISTEP DO IX = ISTART, ISTOP, ISTEP Κύριο σώμα του loop (εντολές) κύριο σώµα του loop Ν CONTINUE ENDD0 Όπου: Ν Αριθμός εντολής που ουσιαστικά οριοθετεί την περιοχή του Loop. Μπορεί να είναι ένας οποιοσδήποτε αριθμός μικρότερος από 99999 ΙΧ ονομάζεται δείκτης του Loop (loop index) και ουσιαστικά παίζει το ρόλο του μετρητή. Η τιμή του αυξάνει κάθε φορά που ολοκληρώνεται μια εκτέλεση του Loop (περνά από την εντολή CONTINUE) κατά την ποσότητα ΙSTEP. H αρχική τιμή του ΙΧ καθορίζεται από την τιμή του ΙSTART, ενώ ο αριθμός των επαναλήψεων καθορίζεται από την τιμή ΙSTOP. H επανάληψη σταματά όταν η τιμή του ΙX ξεπεράσει την τιμή του ΙSTOP. Όλες οι μεταβλητές είναι ακέραιοι.

ΦΥΣ 145 - Διαλ.03 14 Do Loop - Παραδείγματα DO 12 J=1, 10 PRINT *, J=, J 12 CONTINUE Όταν η τιμή ΙSTEP παραλείπεται θεωρείται ότι είναι ίση με 1. DO 20 I=10,0,-1 PRINT *, I 20 CONTINUE Στο loop αυτό η αρχική τιμή του μετρητή Ι είναι 10 και κάθε φορά ελαττώνεται κατά 1 μέχρι να φθάσει στη τιμή -1 (<0) οπότε και το loop σταματά και το πρόγραμμα συνεχίζει εκτέλεση εντολών μετά την εντολή CONTINUE Ποια η τιμή του Ι και Μ στο τέλος του loop?? M = 0 DO 100 I=1,5 M = M +1 100 CONTINUE I = 6, M = 5 Για κάθε περίπτωση πόσες φορές θα εκτελεστεί το Loop? α. DO 10 I=10, 10 b. DO 10 I=1, 10, 3 c. DO 10 I=-2, 2 d. DO 10 I=1, 2, 0.5 e. DO 10 I=10,5, -1 α. 1 b. 4 c. 5 d. Kαμία e. 6

ΦΥΣ 145 - Διαλ.03 15 Κανόνες και περιορισμοί για DO loops q To DO loop επιφέρει μια ομαδοποίηση εντολών. Έτσι υπάρχουν περιορισμοί για την είσοδο/έξοδο από το loop. Υπάρχουν 2 τρόποι εξόδου: H κανονική έξοδος όπου ο δείκτης εξαντλεί τις τιμές που μπορεί να πάρει. Η εξαναγκασμένη έξοδος όπου κάποια από τις εντολές του loop περιέχει μια εντολή IF ή GOTO που μεταφέρει τον έλεγχο έξω από το loop. Αυτό μπορεί να συμβεί και την πρώτη φορά που εκτελείται το loop ή και την τελευταία. Οι παράμετροι ΙSTART, IFIN, ISTEP καθορίζουν το μέγιστο αριθμό εκτελέσεων του Loop αλλά οι εντολές GOTO και ΙF τον πραγματικό. q Ο δείκτης του loop μπορεί να χρησιμοποιηθεί αφού βγούμε από το loop. Ιδιαίτερη προσοχή χρειάζεται για την τιμή του. Στην εξαναγκασμένη έξοδο η τιμή είναι η τρέχουσα τιμή του (όταν ήταν στο loop) για την κανονική ωστόσο η τιμή του έχει αυξηθεί κατά ΙSTEP μετά την τελευταία φορά εκτέλεση. q Η πρώτη εντολή της περιοχής ενός loop (μετά την εντολή DO) πρέπει να είναι εκτελέσιμη εντολή. q Η τελευταία εντολή της περιοχής ενός loop πρέπει να είναι υποχρεωτικά η εντολή CONTINUE (επίσης χρησιμοποιείται η ΕΝD DO χωρίς αρίθμηση). q Οι παράμετροι ΙSTART, IFIN, ISTEP όπως επίσης και ο δείκτης του loop δεν πρέπει να μεταβάλλονται κατά την εκτέλεση των εντολών του loop. q Eνα DO loop επιτρέπεται να περιέχει ένα άλλο DO loop (nested loops). AΛΛΑ...

ΦΥΣ 145 - Διαλ.03 16 Κανόνες και περιορισμοί για DO loops q Ένα εσωτερικό loop πρέπει να περιέχεται εξ ολοκλήρου στο εξωτερικό loop. Το πολύ, θα πρέπει το εσωτερικό loop να καταλήγει στην ίδια CONTINUE εντολή με το εξωτερικό. (Είναι καλή πρακτική να χρησιμοποιείτε διαφορετική καταληκτική εντολή για τα διάφορα nested loops). Σημαντική η καλή μετατόπιση του κύριου τμήματος κάθε loop ώστε να ξεχωρίζει που ξεκινά και που τελειώνει. q Τα παρακάτω σχήματα δηλώνουν nested loops με σωστή δομή: σωστό σωστό λάθος q Απαγορεύεται η μεταφορά ελέγχου του προγράμματος μέσα στο loop από μια εντολή ΙF ή GOTO που δεν ανήκει στο loop. (Εξαίρεση η κλίση συνάρτησης ή υποπρογράμματος subroutines όπως θα δούμε) λάθος λάθος σωστό

ΦΥΣ 145 - Διαλ.03 17 Παράδειγμα Οι τριάδες (x,y,z) που είδαμε πριν PROGRAM TRIPLET INTEGER IX, IY, IZ INTEGER L, IXYZ, IXYZN READ *, L c Initialization for IX IX = 0 1 IX = IX + 1 c Initialization for IY IY = 0 2 IY = IY + 1 c Initialization for IZ IZ = 0 3 IZ = IZ+1 c Calculate the sum of the squares IXYZ = IX**2 + IY**2 + IZ**2 c Calculate the remainder IXYZN = (IXYZ/L)*L IXYZ c Check to see if it is zero IF (IXYZN.EQ.0) THEN PRINT *,IX,IY,IZ ENDIF IF ( (IZ 9).LT. 0) GOTO 3 IF ( (IY 9).LT. 0) GOTO 2 IF ( (IX 9).LT. 0) GOTO 1 END PROGRAM TRIPLET INTEGER IX, IY, IZ INTEGER L, IXYZ, IXYZN READ *, L DO 32 IX = 1, 9 DO 31 IY = 1, 9 DO 30 IZ = 1, 9 IXYZ = IX**2 + IY**2 + IZ**2 IXYZN = (IXYZ/L)*L IXYZ IF (IXYZN.EQ.0) PRINT *,IX, IY, IZ 30 CONTINUE 31 CONTINUE 32 CONTINUE END

Loop (επαναληπτική διαδικασία) με λογική σχέση Υπάρχουν αρκετά προβλήματα για τα οποία οι μηχανισμοί ελέγχου που είδαμε μέχρι τώρα δεν επαρκούν. Ωστόσο υπάρχουν δύο μηχανισμοί που δεν έχουν άμεση μορφή αλλά πρέπει να κατασκευαστούν από περισσότερο βασικές μορφές Οι δύο μηχανισμοί ελέγχου είναι: ΦΥΣ 145 - Διαλ.03 18 Ø WHILE (λογική έκφραση) DO (group εντολών) Ø REPEAT (group εντολών) UNTIL (λογική έκφραση) Προσοχή: Δεν είναι εντολές q Η πρώτη δομή μπορεί να μην εκτελεστεί ποτέ (αφού η έκφραση μπορεί να μην ικανοποιείται) Η δομή REPEAT θα εκτελεστεί τουλάχιστον μια φορά q Η δομή WHILE ισοδυναμεί με: <label> IF (λογική έκφραση) ΤΗΕΝ. Oμάδα. εντολών. GOTO <label> ENDIF Ø Η δομή REPEAT ισοδυναμεί με: <label> CONTINUE. Oμάδα. εντολών. IF (λογική έκφραση) GOTO <label>

ΦΥΣ 145 - Διαλ.03 19 Δομή WHILE (λογική έκφραση) DO (group εντολών) PROGRAM FIND C Aυτό το πρόγραμμα βρίσκει την C πρώτη εμφάνιση ενός αριθμού σε μια λίστα C Χρησιμοποιούμε 100 αριθμούς ενώ ο πίνακας C είναι κατά 1 μεγαλύτερος από τη λίστα REAL A(101) INTEGER A, MARK INTEGER IEND, I READ(1,*) MARK READ(1,*) IEND READ(1,*) (A(I), I=1, IEND) I = 1 A(IEND+1) = MARK 100 IF (MARK.NE.A(I)) THEN I = I +1 GOTO 100 ENDIF While DO Με την εντολή αυτή σίγουρα θα βρούμε κάποιο αριθμό! Επικίνδυνο αφού μπορεί να συνεχιστεί επ άπειρο IF (I.EQ.(END+1)) THEN PRINT *, STOIXEIO DEN VRETHIKE ELSE PRINT *, STOIXEIO STI THESI,I ENDIF END

Δομή REPEAT UNTIL Συνήθως χρησιμοποιείται σε προβλήματα που χρειάζονται αριθμητική επίλυση Τέτοιου είδους προβλήματα συνήθως απαιτούν την επανάληψη ενός υπολογισμού μέχρι τα αποτελέσματα από δύο διαδοχικούς υπολογισμούς διαφέρουν κάποια μικρή ποσότητα που αποφασίζετε ανάλογα με το πρόβλημα Ø Για παράδειγμα ο υπολογισμός του e x ΦΥΣ 145 - Διαλ.03 20 Μπορεί να γραφεί: e x = 1+ x 1! + x2 2! + x3 " 3! + = 1+ x # n!1 (n! 1)! n=1 x n Κάθε όρος προκύπτει από τον προηγούμενο πολ/ζοντας με x/n Για κάποια τιμή του n, οι όροι γίνονται πολύ μικροί και προσφέρουν ελάχιστο στην τιμή του αθροίσματος v Oι όροι υπολογίζονται μέχρι το x/n να γίνει μικρότερο από το όριο ανοχής Το πλήθος των υπολογισμών δεν είναι γνωστός από πριν PROGRAM EXPX(X) REAL TERM, X, TOL, SUM INTEGER NTERM TOL=0.001 SUM = 1.0 TERM = 1.0 NTERM = 0 1 CONTINUE NTERM = NTERM + 1 TERM = (X/NTERM)*TERM SUM = SUM +TERM IF (TERM.GT.TOL) GOTO 1 END

DO WHILE ΦΥΣ 145 - Διαλ.03 21 PROGRAM SROOT IMPLICIT NONE REAL X, GUESS INTEGER COUNT, I PRINT *, DWSTE MIA TIMH X READ *, X PRINT *, DWSTE POSOYS OROUS READ *, COUNT GUESS = 1 DO I = 1, COUNT GUESS = (GUESS + X/GUESS)/2. ENDDO PRINT *, Root =, GUESS END PROGRAM SROOT IMPLICIT NONE REAL X, GUESS, PRECISION PRINT *, DWSTE MIA TIMH X READ *, X PRINT *, DWSTE TIN AKRIBEIA READ *, PRECISION GUESS = 1 DO WHILE (ABS(X - GUESS*GUESS).GT.PRECISION) GUESS = (GUESS + X/GUESS)/2. ENDDO PRINT *, Root =, GUESS END ελεγχόμενη επαναλαμβανόμενη εκτέλεση Το loop εκτελείται έως να γίνει ψευδής η λογική έκφραση. Μπορεί να εκτελείται επάπειρο

READ/WRITE από/σε αρχεία (files) ΦΥΣ 145 - Διαλ.03 22 q Πολλές φορές τα δεδομένα ενός προβλήματος είναι πάρα πολλά και είναι αδύνατη η εισαγωγή τους από το πληκτρολόγιο ή η εκτύπωση των αποτελεσμάτων τους προγράμματος στην οθόνη q Τα δεδομένα βρίσκονται σε κάποια αρχεία (files) και πρέπει να τα διαβάσουμε ή θα πρέπει να τα γράψουμε σε κάποιο file q O απλούστερος τρόπος για να το κάνουμε είναι μέσω των ακόλουθων εντολών OPEN(unit=<unit number>, file= <file name>, status= status code ) READ(<unit number>,*) variable list WRITE(<unit number>,*) variable list H πρώτη εντολή ανοίγει κάποιο file με τυχαίο όνομα <file name> και το συνδέει σε μια λογική μονάδα (unit number) του υπολογιστή Αν το file προϋπάρχει τότε θα πρέπει να χρησιμοποιήσουμε status = OLD Xρησιμοποιείται όταν διαβάζουμε δεδομένα από ένα file Για να γράψουμε σε ένα νέο file τότε πρέπει να χρησιμοποιήσουμε status = ΝΕW Aν δε ξέρουμε αν το file προϋπάρχει τότε χρησιμοποιούμε status = UNKNOWN Στην περίπτωση αυτή, αν το file προϋπήρχε το περιεχόμενό του θα αντικατασταθεί από τα νέα δεδομένα που θα γράψουμε

ΦΥΣ 145 - Διαλ.03 23 READ/WRITE από/σε αρχεία (files) Για παράδειγμα PROGRAM TEST REAL X,Y Ανοίγουμε κάποιο file (phy145.dat) που προϋπάρχει και το θέτουμε στη μονάδα 60 OPEN(UNIT=60,file= phy145.dat,status= OLD ) OPEN(UNIT=61,file= phy145.out,status= NEW ) DO I = 1, 1000 READ(60,*)X Y = X*10 WRITE(61,*)Y END DO END Ανοίγουμε κάποιο νέο file (phy145.out) και το θέτουμε στη μονάδα 61 Aπό τη μονάδα 60 (phy145.dat) θα διαβάσουμε 1000 στοιχεία καθένα από τα οποία θα τα βάλουμε στη μεταβλητή Χ Τα αποτελέσματα του προγράμματος (μεταβλητή Υ) θα γραφούν στην μονάδα 61 (phy145.out) Βασική προϋπόθεση στα παραπάνω ότι το file που διαβάζουμε έχει τουλάχιστον 1000 στοιχεία, αλλοιώς όταν το πλήθος των στοιχείων τελειώσει θα μας δώσει error Θα δούμε αργότερα πως μπορούμε να αποφύγουμε το πρόβλημα αυτό Αν το file περιέχει περισσότερα από ένα στοιχεία σε κάθε σειρά του ή θέλουμε να γράψουμε περισσότερα από ένα στοιχεία σε κάθε σειρά του τότε μπορούμε να ορίσουμε περισσότερες μεταβλητές στην εντολή READ/WRITE