Προγραμματισμός & Εφαρμογές Υπολογιστών (βρόχος Do...loop_)

Post on 12-Jun-2015

125 views 4 download

Transcript of Προγραμματισμός & Εφαρμογές Υπολογιστών (βρόχος Do...loop_)

Βρόχος Do … Loop

Σκοπός Μαθήματος Χρήση Do… Loop για την εκτέλεση μιας ομάδας εντολών μέχρι να εκπληρωθεί μια συγκεκριμένη συνθήκη.

Δομή Μαθήματος

• Θεωρητικό μέρος μέσω

παραδειγμάτων

• Ασκήσεις

Βρόχος Do … Loop

Οι βρόχοι Do…Loop είναι πολύτιμοι επειδή πολύ συχνά δεν γνωρίζουμε προκαταβολικά πόσες φορές θα πρέπει να επαναληφθεί ένας βρόχος.

Επαναλήψεις Εντολών

Η Visual Basic υποστηρίζει επαναλήψεις ενός συνόλου εντολών:

• Για προκαθορισμένο αριθμό επαναλήψεων (For … Next)

• Όσο μια συνθήκη είναι αληθής (Do While ή Do Loop While)

• Μέχρι μια συνθήκη να γίνει αληθής (Do Until ή Do Loop Until)

• Εναλλακτικός βρόχος του For…Next, είναι ο βρόχος Do…Loop, με τον οποίο εκτελούμε μια σειρά εντολών έως ότου μία συγκεκριμένη συνθήκη μέσα στον βρόχο είναι αληθής ή ψευδής.

• Ένας βρόχος Do…Loop μπορεί να περιέχει μια ή περισσότερες εντολές.

Do … Loop

•Αυτός ο τύπος βρόχων είναι χρήσιμος όταν δεν γνωρίζουμε τον ακριβή αριθμό των επαναλήψεων των εντολών.

•Ο βρόχος Do… Loop έχει διάφορες μορφές (τύπους).

Do … Loop

Τύπος 1:

Do While ΣυνθήκηΕντολή(ές)

Loop

Do … Loop

8

Είναι γνωστό προκαταβολικά πόσες φορές θα εκτελεσθούν οι εντολές.

Δεν είναι γνωστό πόσες φορές θα εκτελεσθούν οι εντολές.

Διαφορά For … Next από Do While … Loop

συνθήκη

εντολή-a1 …εντολή-am

ΝΑΙ

ΟΧΙ

Do While … Loop

μετρητής = τιμή1 … τιμή2 Βήμα β

εντολη-a1 εντολη-a2 … εντολη-am

For … Next

Να γραφεί πρόγραμμα το οποίο δέχεται σαν είσοδο ένα όνομα και το εμφανίζει στην οθόνη.

Η διαδικασία αυτή να επαναλαμβάνεται συνεχώς για διάφορα ονόματα και να τερματίζεται με τη λέξη "Τέλος".

Παράδειγμα 1 : Do … Loop

Dim Name As String

Name = "Μαρία"

Do While Name <> "Τέλος" Name = InputBox("Δώσε όνομα ή Τέλος για έξοδο")

Print NameLoop

Παράδειγμα 1.1: Do … Loop

Dim Name As StringName = "Μαρία" Do While Name <> "Τέλος" Name = InputBox("Δώσε όνομα ή Τέλος για έξοδο") If Name <> "Τέλος" Then Print Name End IfLoop

Παράδειγμα 1.2 : Do … Loop

Dim Name As StringName = InputBox("Δώσε όνομα ")

Do While Name <> "Τέλος“ Print Name Name = InputBox("Δώσε όνομα ή Τέλος για έξοδο")Loop

Παράδειγμα 1.3: Do … Loop

Τύπος 2:

DoΕντολή(ές)

Loop While Συνθήκη

Do … Loop

Dim Name As String

Do Name = InputBox("Δώσε όνομα ή Τέλος για

έξοδο") If Name <> "Τέλος" Then Print Name End IfLoop While Name <> "Τέλος"

Παράδειγμα 2 : Do … Loop

Να γραφεί πρόγραμμα για τη μετατροπή θερμοκρασιών από Φαρενάϊτ σε Κελσίου βάσει του τύπου:

Κελσίου = (Φαρενάϊτ + 40)*5 /9 – 40

Παράδειγμα 3: Do … Loop

Το πρόγραμμα θα πρέπει να ζητά από το χρήστη δεδομένα (θερμοκρασία σε Φαρενάϊτ) με τη χρήση της συνάρτησης InputBox, να μετατρέπει τη θερμοκρασία και να εμφανίζει το αποτέλεσμα σε ένα

πλαίσιο μηνύματος. Η διαδικασία να επαναλαμβάνεται συνεχώς και να τερματίζεται με την κενή ακολουθία χαρακτήρων.

Παράδειγμα 3: Do … Loop

Dim FTemp As Single, Celsius As Single

Do FTemp=InputBox("Θερμοκρασία σε Φαρενάιτ") If FTemp <> "" Then Celsius = Int((FTemp + 40)*5 /9 - 40) MsgBox(Celsius), ,"Θερμοκρασία σε Κελσίου" End IfLoop While FTemp <> ""

Παράδειγμα 3: Do … Loop

DoNumber=InputBox("Δώσε τον αριθμό που θα υψωθεί στο τετράγωνο ή -1 για

έξοδος")Number=Number* Number Print Number

Loop While Number>=0

Παράδειγμα 4: Ατέρμονος βρόχος

Άσκηση 1

Να γραφεί πρόγραμμα που δέχεται σαν είσοδο για κάθε παραγωγό το όνομά του και την ποσότητα του προϊόντος που παρήγαγε.

Η εισαγωγή στοιχείων τερματίζεται όταν αντί για όνομα, δοθεί το συνθηματικό “end”.

Το πρόγραμμα εμφανίζει στην έξοδο τη μέση ποσότητα προϊόντος ανά παραγωγό.

Άσκηση 1sum =0counter = 0Do Name = InputBox("Δώσε όνομα ή end για τέλος")

posotita = InputBox("Δώσε ποσότητα") sum = sum + posotita counter = counter + 1 Loop While Name <> "end"Print "Η μέση ποσότητα είναι: "; sum / counter

Άσκηση 1sum =0counter = 0Do Name = InputBox("Δώσε όνομα ή end για

τέλος") If Name <> "end" Then posotita = InputBox("dose posotita") sum = sum + posotita counter = counter + 1 End IfLoop While Name <> "end"Print "Η μέση ποσότητα είναι: "; sum / counter

• Ο βρόχος Do… Loop μπορεί να χρησιμοποιήσει τη δεσμευμένη λέξη Until για επανάληψη εκτέλεσης των εντολών του βρόχου μέχρι (Until) την επαλήθευση μιας συγκεκριμένης συνθήκης.

• Οι βρόχοι που χρησιμοποιούν τη λέξη Until μοιάζουν σε πολύ μεγάλο βαθμό με αυτούς που χρησιμοποιούν τη λέξη While με τη διαφορά ότι η συνθήκη περιλαμβάνει συνήθως τον αντίθετο τελεστή.

Do … Loop

Τύπος 3:

Do Until ΣυνθήκηΕντολή(ές)

Loop

Do … Loop

Dim Name As StringName = "Μαρία"

Do Until Name="Τέλος" Name = InputBox("Δώσε όνομα ή Τέλος για έξοδο") If Name <> "Τέλος" Then Print Name End IfLoop

Do … Loop

Τύπος 4:

DoΕντολή(ές)

Loop Until Συνθήκη

Do … Loop

Dim Name As String

Do Name = InputBox("Δώσε όνομα ή Τέλος για έξοδο") If Name <> "Τέλος" Then Print Name End IfLoop Until Name="Τέλος"

Do … Loop

Σύνοψη Εντολών Do … Loop

Ισχύει: Η συνθήκη είναι η ακριβώς αντίθετη της συνθήκη.

Προσοχή:

Ατέρμων

Βρόχος

εντολή-a1 …εντολή-am

ΝΑΙ

ΟΧΙ

2. Do … Loop While

συνθήκη

συνθήκη

εντολή-a1 …εντολή-am

ΝΑΙ

ΟΧΙ

1. Do While … Loop

συνθήκη

εντολή-a1 …εντολή-am

ΝΑΙ

ΟΧΙ

3. Do Until … Loop

εντολή-a1 …εντολή-am

ΝΑΙ

ΟΧΙ

4. Do Loop … Until

συνθήκη

Να γραφεί πρόγραμμα που δέχεται σαν είσοδο τα ονόματα παραγωγών και την ποσότητα του προϊόντος σε κιλά που παρήγαγε ο καθένας. Η τιμή του προϊόντος είναι 2 € το κιλό. Το πρόγραμμα εμφανίζει στην έξοδο:

1.Το όνομα κάθε παραγωγού και το ποσό που αυτός εισέπραξε

2.Το ποσό που εισέπραξαν συνολικά οι παραγωγοί.

3.Τη μέση είσπραξη ανά παραγωγό.

Το πρόγραμμα θα εκτυπώσει τα αποτελέσματα των ερωτημάτων 2 και 3 όταν δοθεί το σύνθημα τερματισμού, που σημαίνει ότι δεν υπάρχουν άλλοι παραγωγοί. Για να το δηλώσει αυτό ο χρήστης πληκτρολογεί για όνομα παραγωγού τη λέξη “Τέλος”.

Άσκηση 2

Άσκηση 2

Dim Name As StringDim Posotita As SingleDim Poson As SingleDim Sum As Single Dim Counter As Integer

Sum = 0Counter = 0

Άσκηση 2Do Name = InputBox("Ονοματεπώνυμο") If Name <> "Telos" Then posotita = InputBox("Ποσότητα παραγωγής") counter=counter +1 poson = 2 * posotita sum = sum + poson Print Name, "Ποσό είσπραξης="; poson End IfLoop While Name <> "Telos"

Άσκηση 2

Print "Συνολικό ποσό είσπραξης"; sumPrint "Συνολικό ποσό είσπραξης"; sum/counter