ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ενότητα: ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ ΚΥΡΟΠΟΥΛΟΣ ΚΩΝΣΤΑΝΤΙΝΟΣ Τμήμα Διοίκηση Επιχειρήσεων (Κοζάνη)
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο TEI Δυτικής Μακεδονίας και στην Ανώτατη Εκκλησιαστική Ακαδημία Θεσσαλονίκης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 2
Περιεχόμενα 1. ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ... 4 2. FOR-NEXT... 5 3. DO-WHILE... 6 4. DO-UNTIL... 8 5. Παράρτημα... 13 3
1. ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ Δημιουργήστε Λογικό Διάγραμμα το οποίο να τυπώνει τους 30 πρώτους όρους της σειράς 1,4,7,10,13,...Για τον υπολογισμό του επόμενου όρου χρησιμοποιήστε τον τύπο l a ( n 1) * d. Όπου α η αρχική τιμή της σειράς (α=1), «η» η θέση του όρου ο οποίος θα υπολογιστεί, και d η σταθερή διαφορά μεταξύ δύο συνεχόμενων όρων της σειράς. Χρησιμοποιώντας προκαταρτική εκτέλεση, μπορούμε να δημιουργήσουμε ένα πίνακα και να παρακολουθήσουμε τις τιμές των μεταβλητών a d n l 1 3 1 1 1 3 2 4 1 3 3 7 1 3 4 10 1 3 5 13 1 3 6 16 1 3 7 19 1 3 8 22 1 3 9 25 1 3 10 28.... 1 3 29 85 1 3 30 88 Όπως βλέπετε οι μεταβλητές «a» και «d» δεν αλλάζουν τις τιμές τους, ενώ οι άλλες δύο μεταβλητές παίρνουν κάθε φορά καινούργια τιμή. Αυτό βασικά συμβαίνει στο σημείο της συνθήκης όπου το λογικό διάγραμμα ελέγχει αν η τιμή της μεταβλητής «n» είναι μικρότερη ή ίση με 30. Αν ναι τότε αυξάνει την μεταβλητή αυτή, και επιστρέφει να υπολογίσει την καινούργια τιμή της μεταβλητής «l» και να τυπώσει τις δύο μεταβλητές. Εν συνεχεία ξανά ελέγχει την τιμή της μεταβλητής «n», και αν 4
συνεχίζει να είναι μικρότερη ίση του 30 επαναλαμβάνει την ίδια διαδικασία. Η διαδικασία αυτή θα σταματήσει μόνο όταν η τιμή της μεταβλητής «n» γίνει μεγαλύτερη του 30. Η διαδικασία αυτή ονομάζεται ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ, και μας επιτρέπει να επαναλαμβάνομε συγκεκριμένα βήματα του λογικού διαγράμματος ή εντολές ενός προγράμματος. Οι διάφορες γλώσσες προγραμματισμού μπορεί να έχουν περισσότερους του ενός τρόπου για να δημιουργήσουν ή να διατυπώσουν την δομή επανάληψης, αλλά η βασική ιδέα είναι η ίδια. Στην Visual Basic έχομε 3 βασικούς τρόπους τους (1) FOR- NEXT, (2) Do WHILE (3) Do Until 2. FOR-NEXT Οι εντολές για να δημιουργηθεί η δομή επανάληψης του πιο πάνω λογικού διαγράμματος εμφανίζονται πιο κάτω. Για να γίνει κατανοητό το όλο πρόγραμμα ακολουθήστε τα βήματα με τον τρόπο που σας δίνονται (1) Ανοίξετε μια φόρμα Visual Basic και δημιουργήστε ένα κουμπί εκτέλεσης (σχήμα 1) Σχήμα 1 (2) Διπλοπατήστε το κουμπί εκτέλεσης και γράψετε τον κώδικα που σας δίνετε (σχήμα 2) Dim n, a, d, l As Integer a = 1 d = 3 For n = 1 To 30 Σχήμα 2 5
Οι εντολές που αποτελούν την δομή επανάληψης (στα Αγγλικά LOOP) είναι οι σκιασμένες εντολές «FOR-NEXT». Το τι λένε στο σύστημα αυτές οι εντολές είναι το ακόλουθο: For n = 1 To 30 Next n Ξεκίνα να μετράς από την τιμή 1, την οποία αποθήκευσε στην μεταβλητή «n». Κάθε φορά να ελέγχεις αν η τιμή που είναι αποθηκευμένη στην μεταβλητή «n» είναι μικρότερη ίση στο 30. Αν ΝΑΙ εκτέλεσε τις εντολές που ακολουθούν, αν ΟΧΙ πήγαινε και εκτέλεσε την εντολή που έρχεται αμέσως μετά την εντολή «Next n» Η εντολή αυτή αυξάνει κατά 1 το περιεχόμενο της μεταβλητής «n», και στέλνει την εκτέλεση του προγράμματος πίσω στην εντολή «FOR» για να ελέγξει αν η τιμή της μεταβλητής «n» είναι μικρότερη ίση τού 30 Οι εντολές l = a + (n - 1) * d Print n, l Αποτελούν το σώμα του «LOOP» δηλαδή οι εντολές που εκτελούνται όσο η τιμή της μεταβλητής «n» είναι μικρότερη ίση του 30. Η μεταβλητή «n» ονομάζεται «μετρητής» (στα Αγγλικά counter) 3. DO-WHILE Η Visual Basic προσφέρει ένα δεύτερο τρόπο δημιουργίας μιας δομής επανάληψης «LOOP» χρησιμοποιώντας τις εντολές DO-WHILE. (1) Στην φόρμα που έχετε είδη δημιούργησε προσθέστε ένα δεύτερο κουμπί εκτέλεσης (σχήμα 3) 6
Σχήμα 3 (2) Διπλοπατήστε στο κουμπί εκτέλεσης «DO_WHILE» και γράψετε τον κώδικα που σας δίνετε στο σχήμα 4 Dim n, a, d, l As Integer a = 1 d = 3 n = 1 Do While (n <= 30) Loop l = a + (n - 1) * d Print n, l n = n + 1 Σχήμα 4 Οι σκιασμένες εντολές είναι οι εντολές ελέγχου του «LOOP» και οι εντολές σε έντονη γραφή το σώμα του «LOOP». Do While (n <= 30) n = n + 1 Η εντολή «Do While» κάνει τον έλεγχο της συνθήκης που βρίσκετε μέσα στην παρένθεση. Δηλαδή ελέγχει σε αυτό το παράδειγμα αν όντος η τιμή της μεταβλητής «n» είναι μικρότερη ή ίση με 30. Για αυτό τον λόγο είναι σημαντικό να δώσουμε μια αρχική τιμή στην μεταβλητή «n» (n = 1) για να μπορεί να γίνει η πρώτη σύγκριση. Αν δεν δώσουμε μια αρχική τιμή είναι άγνωστο στο πώς θα συμπεριφερθεί το «LOOP» (ή ΒΡΟΓΧΟΣ σε άλλη ελληνική ονομασία) Σε αυτού του τύπου «LOOP» θα πρέπει να συμπεριλάβουμε στο σώμα του «LOOP», μία εντολή η οποία να μεταβάλει την τιμή της μεταβλητής «n» η οποία ελέγχει τον αριθμό των 7
Loop επαναλήψεων του «LOOP» και όπως είπαμε ονομάζετε «μετρητής». Στις πιο πολλές φορές αυτή η εντολή τοποθετείται στην προτελευταία γραμμή του «LOOP» Η εντολή αυτή αναγκάζει το σύστημα να επιστρέψει στη αρχική γραμμή του «LOOP» δηλαδή στην γραμμή «Do While» όπου γίνεται ο έλεγχος της τιμής του «μετρητή» «η». Αν ο έλεγχος είναι επιτυχής οι εντολές του σώματος του «LOOP» εκτελούνται, αν όχι το σύστημα εκτελεί την πρώτη εντολή μετά το τέλος του «LOOP» δηλαδή την πρώτη εντολή μετά την εντολή Loop 4. DO-UNTIL Ένας άλλος τρόπος λειτουργίας της δομής επανάληψης στην Visual Basic είναι με τον συνδυασμό των εντολών «Do Until». Η όλη δομή αυτών των εντολών είναι ίδια με την δομή των εντολών «Do While». Η διαφορά είναι στον τρόπο ερώτησης της συνθήκης. Δηλαδή, στην περίπτωση του «Do While» ερωτούμε «Εκτέλα τις εντολές που ακολουθούν ΟΣΟ η συνθήκη είναι ΟΡΘΗ», ενώ με την εντολή «Do Until» το τι λέμε στο σύστημα είναι «Εκτέλα τις εντολές που ακολουθούν ΜΕΧΡΙ η συνθήκη να φτάσει ή να ικανοποιήσει μία συγκεκριμένη τιμή». Στο παράδειγμα που δουλεύουμε ο κώδικας θα πρέπει να μετατραπεί αναλόγως. (1) Στην φόρμα που έχετε είδη χρησιμοποιήσει, δημιουργήστε ένα τρίτο κουμπί εκτέλεσης (σχήμα 5) Σχήμα 5 (2) Διπλοπατήστε στο κουμπί εκτέλεσης που δημιουργήσατε «DO_UNTIL» και γράψετε τον κώδικα που σας δίνετε (σχήμα 6) 8
(3) Dim n, a, d, l As Integer a = 1 d = 3 n = 1 Do Until (n > 30) Σχήμα 6 Το πιο βασικό σημείο στον κώδικα αυτού του τύπου «LOOP» είναι το σημείο της συνθήκης στη πρώτη γραμμή, ενώ όπως στην προηγούμενη περίπτωση η μεταβλητή που χρησιμοποιείται σαν ο μετρητής του «LOOP» (στην περίπτωση μας η μεταβλητή «η») θα πρέπει να πάρει την αρχική της τιμή πριν να αρχίσει η εκτέλεση του «LOOP». Do Until (n > 30) Αν προσέξετε εδώ η συνθήκη έχει αλλάξει σε «n>30» ενώ πριν ήταν «n<=30». Αυτή είναι η κύρια διαφορά από το «Do While». Το σύστημα θα εκτελέσει τις εντολές του σώματος του «LOOP» ΜΕΧΡΙ η τιμή του μετρητή «η» να γίνει 31. Όταν ο μετρητής «n» πάρει αυτή την τιμή το σύστημα δεν εκτελεί το σώμα του «LOOP», έτσι εκτελούνται οι εντολές μέχρι και την τιμή 30 άλλα όχι 31 n = n + 1 Αυξάνει την τιμή του μετρητή κατά 1 Loop Επιστρέφει τον έλεγχο του «LOOP» στην πρώτη γραμμή του «Do Until» Δομή επανάληψης FOR-NEXT με χρήση της εντολής STEP Στο προηγούμενο παράδειγμα είχαμε με την σειρά 1, 4, 7, 10, 13... και χρησιμοποιώντας την μαθηματική φόρμουλα l a ( n 1) * d μπορούσαμε να υπολογίζουμε τους όρους της σειράς. Μελετώντας προσεκτικά την σειρά μπορούμε να αντιληφθούμε ότι οι όροι έχουν διαφορά 3.Τι θα γινόταν αν στην ερώτηση είχαμε να τυπώσουμε μόνο τους όρους 1, 10,19... δηλαδή να τυπώνουμε μια φορά κάθε 3 όρους με αυτό υπόψη μας μπορούμε να τροποποιήσουμε το «FOR-NEX LOOP» να αυξάνει από μόνο του κατά 3 αντί 1, χρησιμοποιώντας την εντολή «STEP» (1) Δημιουργήστε ακόμη ένα κουμπί εκτέλεσης πάνω στην φόρμα σας (σχήμα 7) 9
Σχήμα 7 (4) Διπλοπατήστε στο κουμπί «FOR_NEXT STEP» και συμπληρώστε τον κώδικα πιο κάτω Dim n, a, d, l As Integer a = 1 d = 3 For n = 1 To 30 Step 3 Σχήμα 8 For n = 1 To 30 Step 3 Next n Η εντολή αυτή αναγκάζει το σύστημα να αρχίσει να μετρά από το 1 αλλά κάθε 3. Η εντολή που αναγκάζει το «LOOP» να πηγαίνει κάθε 3 είναι η εντολή «Step 3». Οι υπόλοιπες ενέργειες της εντολής «FOR» είναι οι ίδιες όπως επεξηγήθηκαν προηγούμενος Αυτή η εντολή κάνει την ίδια δουλειά όπως πριν, με την διαφορά ότι η αύξηση του μετρητή «n» είναι κατά 3 Επιπρόσθετες Δομές Επανάληψης Οι δύο τελευτές δομές επανάληψης με τα «Do While», «Do Until» μπορεί να γραφτούν με διαφορετικό χρησιμοποιώντας τις εντολές «DO. LOOP WHILE» και «DO LOOP UNTIL» και πάλι να επιφέρουν το ίδιο αποτέλεσμα. Ας υποθέσουμε ότι θέλουμε να ξαναγράψουμε τον κώδικα που χρησιμοποιήσαμε για την εντολή «FOR_NEXT STEP» με την εντολή «DO. LOOP WHILE». Αυτή η 10
εντολή είναι διαφορετική από την εντολή «Do While» διότι η συνθήκη σύγκρισης βρίσκετε στο τέλος (1) Δημιουργήστε ακόμη ένα κουμπί εκτέλεσης στην φόρμα σας (σχήμα 9) Σχήμα 9 (2) Γράψετε τον κώδικα που σας δίνετε για το κουμπί εκτέλεσης «DO LOOP WHILE» Dim n, a, d, l As Integer a = 1 d = 3 n = 1 Do Σχήμα 10 Η κύρια διαφορά σε αυτό το «Loop» είναι ότι η συνθήκη γίνεται στο τέλος, έτσι έστω και αν η συνθήκη δεν είναι ορθή, όλες οι εντολές στο σώμα του «Loop» θα εκτελεσθούν μια φορά. Με το ίδιο τρόπο θα μπορούσαμε να χρησιμοποιήσουμε την εντολή «DO LOOP UNTIL» (1) Δημιουργήστε ακόμη ένα κουμπί εκτέλεσης (σχήμα 11) 11
Σχήμα 11 (2) Διπλοπατήστε το κουμπί εκτέλεσης «DO LOOP UNTIL» και γράψετε τον κώδικα του σχήματος 12 Dim n, a, d, l As Integer a = 1 d = 3 n = 1 Do Σχήμα 12 Πάλι σε αυτή την περίπτωση το «Loop» θα εκτελεσθεί τουλάχιστον μια φορά είτε είναι ορθή είτε είναι λάθος η συνθήκη στο τέλος 12
5. Παράρτημα Σημείωμα Αναφοράς. Copyright ΤΕΙ Δυτικής Μακεδονίας, ΚΥΡΟΠΟΥΛΟΣ ΚΩΝΣΤΑΝΤΙΝΟΣ. «ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ». Έκδοση: 1.0. Κοζάνη 2015. Σημείωμα Αδειοδότησης. Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εμπορική Χρήση Παρόμοια Διανομή 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] http://creativecommons.org/licenses/by-nc-sa/4.0/ Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο. που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο. που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο. Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί. Διατήρηση Σημειωμάτων. Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να συμπεριλαμβάνει: το Σημείωμα Αναφοράς. το Σημείωμα Αδειοδότησης. τη δήλωση Διατήρησης Σημειωμάτων. το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει). μαζί με τους συνοδευόμενους υπερσυνδέσμους. 13