Βρόχος Do … Loop Σκοπός Μαθήματος Χρήση Do… Loop για την εκτέλεση μιας ομάδας εντολών μέχρι να εκπληρωθεί μια συγκεκριμένη συνθήκη. Αθήνα, 2015
Επαναληπτικές Εντολές Η Visual Basic υποστηρίζει επαναλήψεις ενός συνόλου εντολών: Για προκαθορισμένο αριθμό επαναλήψεων (For … Next). Όσο μια συνθήκη είναι αληθής (Do While ή Do Loop While). Μέχρι μια συνθήκη να γίνει αληθής (Do Until ή Do Loop Until).
Do … Loop Εναλλακτικός βρόχος του For…Next, είναι ο βρόχος Do…Loop, με τον οποίο εκτελούμε μια σειρά εντολών έως ότου μία συγκεκριμένη συνθήκη μέσα στον βρόχο είναι αληθής ή ψευδής. Ένας βρόχος Do…Loop μπορεί να περιέχει μια ή περισσότερες εντολές.
Do … Loop Αυτός ο τύπος βρόχων είναι χρήσιμος όταν δεν γνωρίζουμε τον ακριβή αριθμό των επαναλήψεων των εντολών. Ο βρόχος Do… Loop έχει διάφορες μορφές (τύπους).
Do While … Loop Τύπος 1: Do While Συνθήκη Εντολή(ές) Loop
1. Do While … Loop Συντακτικό Λειτουργικότητα Do While συνθήκη εντολή-a1 … εντολή-am Loop Λειτουργικότητα Εν όσω ικανοποιείται η συνθήκη να εκτελείς τις εντολές εντολή-a1 … εντολή-am
1. Do While … Loop Λογικό Διάγραμμα Συντακτικό Do While συνθήκη εντολή-a1 … εντολή-am Loop συνθήκη εντολή-a1 … εντολή-am ΝΑΙ ΟΧΙ Λογικό Διάγραμμα
Πρόγραμμα (προηγούμενο μάθημα) Διαβάζει ένα βαθμό. Τυπώνει το βαθμό. Αν ο βαθμός είναι έγκυρος τυπώνει ένα από τα μηνύματα ΕΥΓΕ, ΠΕΡΑΣΕΣ!!! ή ΚΟΠΗΚΕΣ! ΔΙΑΒΑΣΕ ΠΕΡΙΣΣΟΤΕΡΟ!" Στην αντίθετη περίπτωση (αν ο βαθμός είναι άκυρος) τυπώνει το μήνυμα ΜΗ ΕΓΚΥΡΟΣ ΒΑΘΜΟΣ!!! Στο τέλος τυπώνει το μήνυμα ΤΕΛΟΣ ΑΞΙΟΛΟΓΗΣΗΣ.
ΚΟΠΗΚΕΣ! ΔΙΑΒΑΣΕ ΠΕΡΙΣΣΟΤΕΡΟ! Τώρα Θέλομε … Το πρόγραμμα να τρέχει μέχρι να διαβάσει έγκυρο βαθμό και ακολούθως να βγάλει ένα από τα μηνύματα ΕΥΓΕ, ΠΕΡΑΣΕΣ!!! ή ΚΟΠΗΚΕΣ! ΔΙΑΒΑΣΕ ΠΕΡΙΣΣΟΤΕΡΟ! Στο τέλος τυπώνει το μήνυμα ΤΕΛΟΣ ΑΞΙΟΛΟΓΗΣΗΣ.
Επαναληπτική Εντολή Do … Loop ΚΟΠΗΚΕΣ! ΔΙΑΒΑΣΕ ΠΕΡΙΣΣΟΤΕΡΟ! Να γραφεί πρόγραμμα το οποίο, αφού διασφαλίσει ότι διάβασε έγκυρο βαθμό (βαθμός στο διάστημα [0, 10]), τυπώνει το βαθμό και ένα από τα μηνύματα ΕΥΓΕ, ΠΕΡΑΣΕΣ!!! ή ΚΟΠΗΚΕΣ! ΔΙΑΒΑΣΕ ΠΕΡΙΣΣΟΤΕΡΟ! Στο τέλος τυπώνει το μήνυμα ΤΕΛΟΣ ΑΞΙΟΛΟΓΗΣΗΣ.
1. Do While … Loop: Επιλογή Συνθήκης συνθήκη εντολή-a1 … εντολή-am ΝΑΙ ΟΧΙ Do While … Loop ΕΓΚΥΡΟΣ ΒΑΘΜΟΣ (bathmos >= 0) And (bathmos <= 10) (bathmos < 0) Or (bathmos > 10) ΑΚΥΡΟΣ ΒΑΘΜΟΣ
1. Do While … Loop Private Sub Command1_Click() Dim bathmos As Single bathmos = InputBox("ΔΩΣΕ ΒΑΘΜΟ ΣΤΟ ΔΙΑΣΤΗΜΑ [0, 10] ") Print "ΒΑΘΜΟΣ ΠΟΥ ΔΟΘΗΚΕ: " & bathmos Do While (bathmos < 0) Or (bathmos > 10) ‘ EΛΕΓΧΟΣ ΑΚΥΡΟΥ ΒΑΘΜΟΥ Loop If bathmos >= 5 Then Print " ΕΥΓΕ, ΠΕΡΑΣΕΣ!!!" Else Print " ΚΟΠΗΚΕΣ! ΔΙΑΒΑΣΕ ΠΕΡΙΣΣΟΤΕΡΟ!" End If Print "ΤΕΛΟΣ ΑΞΙΟΛΟΓΗΣΗΣ" End Sub
Παράδειγμα 1 : Do … Loop Να γραφεί πρόγραμμα το οποίο δέχεται σαν είσοδο ένα όνομα και το εμφανίζει στην οθόνη. Η διαδικασία αυτή να επαναλαμβάνεται συνεχώς για διάφορα ονόματα και να τερματίζεται με τη λέξη "Τέλος".
Παράδειγμα 1.1: Do … Loop Dim Name As String Name = "Μαρία" Do While Name <> "Τέλος" Name = InputBox("Δώσε όνομα ή Τέλος για έξοδο") Print Name Loop
Παράδειγμα 1.2 : Do … Loop Dim Name As String Name = "Μαρία" Do While Name <> "Τέλος" Name = InputBox("Δώσε όνομα ή Τέλος για έξοδο") If Name <> "Τέλος" Then Print Name End If Loop
Παράδειγμα 1.3: Do … Loop Dim Name As String Name = InputBox("Δώσε όνομα ") Do While Name <> "Τέλος“ Print Name Name = InputBox("Δώσε όνομα ή Τέλος για έξοδο") Loop
Do … Loop While Τύπος 2: Do Εντολή(ές) Loop While Συνθήκη
2. Do … Loop While Συντακτικό Λειτουργικότητα Να εκτελείς τις εντολές εντολή-a1 … εντολή-am Loop While συνθήκη Λειτουργικότητα Να εκτελείς τις εντολές εντολή-a1 … εντολή-am εν όσω ικανοποιείται η συνθήκη
2. Do … Loop While Λογικό Διάγραμμα Συντακτικό Do εντολή-a1 … εντολή-am ΝΑΙ ΟΧΙ Λογικό Διάγραμμα συνθήκη Συντακτικό Do εντολή-a1 … εντολή-am Loop While συνθήκη
2. Do … Loop While: Επιλογή Συνθήκης εντολή-a1 … εντολή-am ΝΑΙ ΟΧΙ Do … Loop While συνθήκη ΕΓΚΥΡΟΣ ΒΑΘΜΟΣ (bathmos >= 0) And (bathmos <= 10) (bathmos < 0) Or (bathmos > 10) ΑΚΥΡΟΣ ΒΑΘΜΟΣ
2. Do … Loop While Option Explicit Dim bathmos As Single Private Sub Command1_Click() Do bathmos = InputBox("ΔΩΣΕ ΒΑΘΜΟ ΣΤΟ ΔΙΑΣΤΗΜΑ [0, 10] ") Print "ΒΑΘΜΟΣ ΠΟΥ ΔΟΘΗΚΕ: " & bathmos Loop While (bathmos < 0) Or (bathmos > 10) 'ΕΛΕΓΧΟΣ ΑΚΥΡΟΥ ΒΑΘΜΟΥ If bathmos >= 5 Then Print "ΕΥΓΕ, ΠΕΡΑΣΕΣ!!!" Else Print "ΚΟΠΗΚΕΣ! ΔΙΑΒΑΣΕ ΠΕΡΙΣΣΟΤΕΡΟ!" End If Print "ΤΕΛΟΣ ΑΞΙΟΛΟΓΗΣΗΣ" End Sub
Διαφορές μεταξύ των δυο Εντολών συνθήκη εντολή-a1 … εντολή-am ΝΑΙ ΟΧΙ 1. Do While … Loop εντολή-a1 … εντολή-am ΝΑΙ ΟΧΙ 2. Do … Loop While συνθήκη
Παράδειγμα 2 : Do … Loop Dim Name As String Do Name = InputBox("Δώσε όνομα ή Τέλος για έξοδο") If Name <> "Τέλος" Then Print Name End If Loop While Name <> "Τέλος"
Παράδειγμα 3: Do … Loop Να γραφεί πρόγραμμα για τη μετατροπή θερμοκρασιών από Φαρενάϊτ σε Κελσίου βάσει του τύπου: Κελσίου = (Φαρενάϊτ + 40)*5 /9 – 40
Παράδειγμα 3: Do … Loop Το πρόγραμμα θα πρέπει να ζητά από το χρήστη δεδομένα (θερμοκρασία σε Φαρενάϊτ) με τη χρήση της συνάρτησης InputBox, να μετατρέπει τη θερμοκρασία και να εμφανίζει το αποτέλεσμα σε ένα πλαίσιο μηνύματος. Η διαδικασία να επαναλαμβάνεται συνεχώς και να τερματίζεται με την κενή ακολουθία χαρακτήρων.
Dim FTemp As Single, Celsius As Single Do Παράδειγμα 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 If Loop While FTemp <> ""
Παράδειγμα 4: Ατέρμονος βρόχος Do Number=InputBox("Δώσε τον αριθμό που θα υψωθεί στο τετράγωνο ή -1 για έξοδος") Number=Number* Number Print Number Loop While Number>=0
Άσκηση 1 Να γραφεί πρόγραμμα όπου για κάθε παραγωγό ενός συνεταιρισμού διαβάζει το όνομά του και την ποσότητα του προϊόντος που παρήγαγε. Η εισαγωγή στοιχείων τερματίζεται όταν αντί για όνομα, δοθεί η συνθηματική λέξη “end”. Το πρόγραμμα να εμφανίζει τη μέση ποσότητα προϊόντος ανά παραγωγό.
Άσκηση 1 sum =0 counter = 0 Do Name = InputBox("Δώσε όνομα ή end για τέλος") posotita = InputBox("Δώσε ποσότητα") sum = sum + posotita counter = counter + 1 Loop While Name <> "end" Print "Η μέση ποσότητα είναι: "; sum / counter
Άσκηση 1 sum =0 counter = 0 Do Name = InputBox("Δώσε όνομα ή end για τέλος") If Name <> "end" Then posotita = InputBox("dose posotita") sum = sum + posotita counter = counter + 1 End If Loop While Name <> "end" Print "Η μέση ποσότητα είναι: "; sum / counter
Do … Loop Ο βρόχος Do… Loop μπορεί να χρησιμοποιήσει τη δεσμευμένη λέξη Until για επανάληψη εκτέλεσης των εντολών του βρόχου μέχρι (Until) την επαλήθευση μιας συγκεκριμένης συνθήκης. Οι βρόχοι που χρησιμοποιούν τη λέξη Until μοιάζουν σε πολύ μεγάλο βαθμό με αυτούς που χρησιμοποιούν τη λέξη While με τη διαφορά ότι η συνθήκη περιλαμβάνει συνήθως τον αντίθετο τελεστή.
Do Until … Loop Τύπος 3: Do Until Συνθήκη Εντολή(ές) Loop
3. Εντολή Do Until … Loop Συντακτικό Λειτουργικότητα εντολή-a1 … εντολή-am Loop Λειτουργικότητα Μέχρις ότου ικανοποιηθεί η συνθήκη να εκτελείς τις εντολές εντολή-a1 … εντολή-am
3. Εντολή Do Until … Loop Λογικό Διάγραμμα Συντακτικό Do Until συνθήκη εντολή-a1 … εντολή-am ΝΑΙ ΟΧΙ Λογικό Διάγραμμα Συντακτικό Do Until συνθήκη εντολή-a1 … εντολή-am Loop
3. Do Until … Loop: Επιλογή Συνθήκης συνθήκη εντολή-a1 … εντολή-am ΝΑΙ ΟΧΙ Do Until … Loop ΕΓΚΥΡΟΣ ΒΑΘΜΟΣ (bathmos >= 0) And (bathmos <= 10) (bathmos < 0) Or (bathmos > 10) ΑΚΥΡΟΣ ΒΑΘΜΟΣ
3. Do Until … Loop Private Sub Command1_Click() Dim bathmos As Single bathmos = InputBox("ΔΩΣΕ ΒΑΘΜΟ ΣΤΟ ΔΙΑΣΤΗΜΑ [0, 10] ") Print "ΒΑΘΜΟΣ ΠΟΥ ΔΟΘΗΚΕ: " & bathmos Do Until (bathmos >= 0) And (bathmos <= 10) 'ΕΛΕΓΧΟΣ ΕΓΚΥΡΟΥ ΒΑΘΜΟΥ Loop If bathmos >= 5 Then Print "ΕΥΓΕ, ΠΕΡΑΣΕΣ!!!" Else Print "ΚΟΠΗΚΕΣ! ΔΙΑΒΑΣΕ ΠΕΡΙΣΣΟΤΕΡΟ!" End If Print "ΤΕΛΟΣ ΑΞΙΟΛΟΓΗΣΗΣ" End Sub
Do … Loop Dim Name As String Name = "Μαρία" Do Until Name="Τέλος" Name = InputBox("Δώσε όνομα ή Τέλος για έξοδο") If Name <> "Τέλος" Then Print Name End If Loop
Do … Loop Until Τύπος 4: Do Εντολή(ές) Loop Until Συνθήκη
4. Do … Loop Until Συντακτικό Λειτουργικότητα Do εντολή-a1 … εντολή-am Loop Until συνθήκη Λειτουργικότητα Να εκτελείς τις εντολές εντολή-a1 … εντολή-am μέχρις ότου ικανοποιηθεί η συνθήκη
4. Do … Loop Until Λογικό Διάγραμμα Συντακτικό Do εντολή-a1 … εντολή-am ΝΑΙ ΟΧΙ Λογικό Διάγραμμα συνθήκη Συντακτικό Do εντολή-a1 … εντολή-am Loop Until συνθήκη
4. Do Loop … Until: Επιλογή Συνθήκης εντολή-a1 … εντολή-am ΝΑΙ ΟΧΙ Do Loop … Until συνθήκη ΕΓΚΥΡΟΣ ΒΑΘΜΟΣ (bathmos >= 0) And (bathmos <= 10) (bathmos < 0) Or (bathmos > 10) ΑΚΥΡΟΣ ΒΑΘΜΟΣ
4. Do … Loop Until Private Sub Command1_Click() Dim bathmos As Single bathmos = InputBox("ΔΩΣΕ ΒΑΘΜΟ ΣΤΟ ΔΙΑΣΤΗΜΑ [0, 10] ") Print "ΒΑΘΜΟΣ ΠΟΥ ΔΟΘΗΚΕ: " & bathmos Loop Until (bathmos >= 0) And (bathmos <= 10) ' ΕΛΕΓΧΟΣ ΕΓΚΥΡΟΥ ΒΑΘΜΟΥ If bathmos >= 5 Then Print "ΕΥΓΕ, ΠΕΡΑΣΕΣ!!!" Else Print "ΚΟΠΗΚΕΣ! ΔΙΑΒΑΣΕ ΠΕΡΙΣΣΟΤΕΡΟ!" End If Print "ΤΕΛΟΣ ΑΞΙΟΛΟΓΗΣΗΣ" End Sub
Do … Loop Dim Name As String Do Name = InputBox("Δώσε όνομα ή Τέλος για έξοδο") If Name <> "Τέλος" Then Print Name End If Loop Until Name="Τέλος"
Άσκηση 2 Να γραφεί πρόγραμμα όπου για κάθε παραγωγό ενός συνεταιρισμού δέχεται σαν είσοδο το όνομά του και την ποσότητα του προϊόντος σε κιλά που παρήγαγε. Η τιμή του προϊόντος είναι 2 € /κιλό. Η εισαγωγή στοιχείων τερματίζεται όταν αντί για όνομα, δοθεί η συνθηματική λέξη “end”. Το πρόγραμμα εμφανίζει : Το όνομα κάθε παραγωγού και το ποσό που αυτός εισέπραξε Το ποσό που εισέπραξαν συνολικά οι παραγωγοί. Τη μέση είσπραξη ανά παραγωγό.
Άσκηση 2 Dim Name As String Dim Posotita As Single Dim Poson As Single Dim Sum As Single Dim Counter As Integer Sum = 0 Counter = 0
Άσκηση 2 Do Name = InputBox("Ονοματεπώνυμο") If Name <> "Telos" Then posotita = InputBox("Ποσότητα παραγωγής") counter=counter +1 poson = 2 * posotita sum = sum + poson Print Name, "Ποσό είσπραξης="; poson End If Loop While Name <> "Telos"
Άσκηση 2 Print "Συνολικό ποσό είσπραξης"; sum Print "Συνολικό ποσό είσπραξης"; sum/counter
Άσκηση 3 Σε ένα θερμοκήπιο γίνεται καταγραφή των παραγγελιών. Το θερμοκήπιο παράγει άνθη, και συγκεκριμένα τριαντάφυλλα, γαρίφαλα και τουλίπες. Για κάθε πελάτη καταγράφονται ο κωδικός του (θετικός ακέραιος), το ονοματεπώνυμό του, και ο αριθμός των λουλουδιών που θέλει να παραγγείλει, από κάθε είδος. Κάθε τριαντάφυλλο κοστίζει 0,5 €, κάθε γαρίφαλο 0.3 € και κάθε τουλίπα 0,6 €.
Άσκηση 3 Να γραφεί πρόγραμμα το οποίο: 1. Διαβάζει από το πληκτρολόγιο τα στοιχεία του κάθε πελάτη, καθώς και 3 αριθμούς, που αντιστοιχούν στον αριθμό των λουλουδιών που θέλει να παραγγείλει, από κάθε είδος. 2. Για κάθε πελάτη υπολογίζει το ποσό που πρέπει να πληρώσει για την παραγγελία του και εμφανίζει στην οθόνη το όνομα του πελάτη, τον κωδικό του και το ποσό αυτό. Η εισαγωγή των δεδομένων τελειώνει όταν ο χρήστης δώσει την τιμή -1 αντί για κωδικό πελάτη.
Άσκηση 3 Μετά το τέλος της εισαγωγής των δεδομένων το πρόγραμμα: 3. Υπολογίζει και εμφανίζει το συνολικό ποσό που πρέπει να εισπράξει το θερμοκήπιο από τις παραγγελίες. 4. Υπολογίζει και εμφανίζει το συνολικό αριθμό λουλουδιών από κάθε είδος, που έχουν παραγγελθεί. 5. Υπολογίζει και εμφανίζει τη μεγαλύτερη παραγγελία σε τριαντάφυλλα. 6. Αν ο συνολικός αριθμός λουλουδιών που παραγγέλθηκαν είναι πάνω από 10.000, το πρόγραμμα εμφανίζει στην οθόνη το μήνυμα, "Αδυναμία ικανοποίησης των παραγγελιών"
Άσκηση 4 Στους παραγωγούς των ενεργειακών φυτών γλυκού σόργου και ελαιοκράμβης χορηγήθηκε οικονομική ενίσχυση για το έτος 2014. Να γραφεί πρόγραμμα το οποίο: Α. Για κάθε παραγωγό: Διαβάζει (α) τον ονοματεπώνυμό του (name), (β) τον αριθμό στρεμμάτων (strem) που καλλιεργεί και (γ) το είδος (eidos) της καλλιέργειας (1 για σόργο και 2 για κράμβη). Υποθέτουμε ότι κάθε παραγωγός καλλιεργεί μόνο ένα είδος. Υπολογίζει το χρηματικό ποσό που θα εισπράξει ως ενίσχυση σύμφωνα με τον παρακάτω πίνακα:
Άσκηση 4 Καλλιέργεια Ποσό σε € ανά στρέμμα 1 - Σόργο 10 € 2 – Ελαιοκράμβη 20 €
Άσκηση 4 Εμφανίζει το ονοματεπώνυμο του παραγωγού και το χρηματικό ποσό που θα εισπράξει. Η εισαγωγή των δεδομένων επαναλαμβάνεται μέχρι να δοθεί ως ονοματεπώνυμο παραγωγού η τιμή «Τέλος». Β. Μετά το τέλος της εισαγωγής των δεδομένων, το πρόγραμμα: Υπολογίζει και εμφανίζει το μέσο όρο του αριθμού των στρεμμάτων σόργου που καλλιεργήθηκαν. Υπολογίζει και εμφανίζει το συνολικό χρηματικό ποσό που θα εισπράξουν οι παραγωγοί που καλλιέργησαν ελαιοκράμβη. Υπολογίζει και εμφανίζει το συνολικό αριθμό στρεμμάτων που καλλιεργήθηκαν.