ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Προγραμματισμός Η/Υ Ενότητα 3 η : Η Γλώσσα Προγραμματισμού VB.NET (2 ο Μέρος) Ι. Ψαρομήλιγκος Χ. Κυτάγιας Τμήμα Λογιστικής & Χρηματοοικονομικής
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα» έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3
Σκοποί ενότητας Στην συγκεκριμένη ενότητα παρουσιάζονται οι εντολές λήψης αποφάσεων «If...Then», «If... Then... Else», «If... Then... ElseIf» και «Select Case» καθώς και οι εντολές επανάληψης «For Next» και «Do Loop» της γλώσσας προγραμματισμού Visual Basic.NET. 4
Περιεχόμενα Η Δομή If...Then Η Δομή If... Then... Else Η Δομή If... Then... ElseIf Η Δομή Select Case Η Δομή For... Next Η Δομή Do... Loop 5
Εντολές Λήψης Αποφάσεων Η Visual Basic παρέχει τρεις εντολές Λήψης Αποφάσεων. Οι εντολές αυτές επηρεάζουν τη ροή του προγράμματός μας με βάση την ικανοποίηση ή μη κάποιας ή κάποιων συνθηκών. Με τη χρήση των εντολών λήψης αποφάσεων τα προγράμματά μας γίνονται περισσότερο ευέλικτα και ικανά να διαχειριστούν την επίλυση των διαφόρων προβλημάτων - καταστάσεων. Οι 3 εντολές Λήψης Αποφάσεων είναι: If...Then If... Then... Else και If... Then... ElseIf Select Case 6
Η Δομή If Then Η δομή If... Then ελέγχει μια συνθήκη. Εάν η συνθήκη αυτή είναι αληθής (True) εκτελούνται οι εντολές που βρίσκονται μετά το Then. Οι εντολές μπορούν να γραφούν σε μια γραμμή ή σε ξεχωριστές Εαν επιλέξουμε σύνταξη μιας γραμμής τότε οι εντολές διαχωρίζονται με το σύμβολο «:» Εαν επιλέξουμε σύνταξη πολλών γραμμών τότε μετά την τελευταία εντολή πρέπει να προσθέσουμε End If. 7
Παραδείγματα Dim count As Integer = 0 Dim message As String If count = 0 Then message = "There are no items." ElseIf count = 1 Then message = "There is 1 item." Else message = "There are " & count & " items." End If 8
Η Δομή If Then Else Η δομή If... Then... Else χρησιμοποιείται όταν έχουμε δύο εναλλακτικές με βάση τη συνθήκη και μας ενδιαφέρει η εκτέλεση ενός συνόλου εντολών Έτσι στην παρακάtω δομή If εκτελείται μόνο το Σύνολο_Εντολών_1 ή μόνο το Σύνολο_Εντολών_2 ανάλογα με το αν η συνθήκη είναι αληθής (True) ή ψευδής (False) αντίστοιχα. If <συνθήκη> Then Else End If Σύνολο_Εντολών_1 Σύνολο_Εντολών_2 9
Η Δομή If Then ElseIf Όταν έχουμε περισσότερες των δυο πιθανών εναλλακτικών περιπτώσεων που καθορίζουν τη ροή του προγράμματός μας, χρησιμοποιούμε την παρακάτω δομή If : If <συνθήκη1> Then Σύνολο_Εντολών_1 ElseIf <συνθήκη2> Then Σύνολο_Εντολών_2 ElseIf <συνθήκη3> Then... Else End If Σύνολο_Εντολών_3 Σύνολο_ΕντολώνN 10
Παραδείγματα If mesos_oros < 10 Then result = "Failed" Else result = "Passed" End If If mesos_oros>=8.5 Then msg = "Άριστα" ElseIf mesos_oros>=7 Then msg = "Λίαν Καλώς" ElseIf mesos_oros>=6 Then msg = "Καλώς" ElseIf mesos_oros>=5 Then msg = "Μέτρια" Else msg = "Απορρίπτεται" End If Πρέπει να είστε ιδιαίτερα προσεκτικοί στην επιλογή της σειράς των εντολών. Για παράδειγμα αν στον παραπάνω κώδικα,που χαρακτηρίζει το βαθμό του πτυχίου βάσει του μέσου όρου των μαθημάτων, η συνθήκη mesos_oros>=5 μπεί στο πρώτο If τότε φοιτητής με μέσο όρο 6 θα χαρακτηριστεί με άριστη απόδοση. 11
Η Δομή Select Case Η συγκεκριμένη εντολή δέχεται μια τιμή (προκύπτει από την "έκφραση") και με βάση αυτήν επιλέγεται η πρώτη περίπτωση που η τιμή της αντιστοιχεί με την τιμή της έκφρασης. Έτσι εκτελούνται μόνο οι εντολές που αντιστοιχούν σε αυτήν την περίπτωση (case) Π.χ Οι διάφορες περιπτώσεις μπορεί να πάρουν και πιο ευέλικτες μορφές όπως: Select Case έκφραση Case τιμή1 Σύνολο_Εντολών_1 Case τιμή2 Σύνολο_Εντολών_2... Case τιμήν Σύνολο_Εντολών_Ν Case Else Σύνολο_Εντολών End Select Case -2 To 2, 5 To 9,11, 13, Is > maxnumber 12
Παραδείγματα Dim grade As Char grade = "B" Select Case grade Case "A" Console.WriteLine("Excellent!") Case "B", "C" Console.WriteLine("Well done") Case "D" Console.WriteLine("You passed") Case "F" Console.WriteLine("Better try again") Case Else Console.WriteLine("Invalid grade") End Select Console.WriteLine("Your grade is " & grade) Select Case Season Case 1 msg = "Winter" Case 2 msg = "Spring" Case 3 msg = "Summer" Case 4 msg = "Autumn" End Select Select Case agerange Case 16 To 21 Console.WriteLine( Still Young ) Case 50 To 64 Console.WriteLine( Start Lying ) End Select 13
Select Case vs ElseIf Η Select Case μπορεί να αντικαταστήσει τα πολλαπλά ElseIf σε μια δομή επιλογής. Ας δούμε το παράδειγμα με το χαρακτηρισμό της βαθμολογίας και με τις δυο περιπτώσεις. If mesos_oros>=8.5 Then msg = "Άριστα" ElseIf mesos_oros>=7 Then msg = "Λίαν Καλώς" ElseIf mesos_oros>=6 Then msg = "Καλώς" ElseIf mesos_oros>=5 Then msg = "Μέτρια" Else msg = "Απορρίπτεται" End If Select Case mesos_oros Case Is >= 8.5 msg = "Άριστα" Case Is >= 7 msg = "Λίαν Καλώς" Case Is >= 6 msg = "Καλώς" Case Is >= 5 msg = "Μέτρια" Case Else msg = "Απορρίπτεται" End Select 14
Η Δομή For Next Χρησιμοποιούμε τη δομή "For...Next" για να επαναλάβουμε ένα συγκεκριμένο αριθμό φορών την εκτέλεση ενός συνόλου εντολών (το σύνολο των εντολών το δηλώνουμε μεταξύ του For και του Next). Η συγκεκριμένη δομή χρησιμοποιεί μια μεταβλητή ελέγχου ως "μετρητή" των επαναλήψεων. Εμείς μπορούμε να καθορίσουμε την αρχική και την τελική τιμή του μετρητή καθώς και το "βήμα" της αύξησης ή μείωσης (το βήμα μπορεί να είναι και αρνητικό). For Μετρητής = Αρχική_τιμή to Τελική_τιμή [Step βήμα] εκτελέσιμη εντολή 1 εκτελέσιμη εντολή 2... εκτελέσιμη εντολή K Next [Μετρητής] 15
Παραδείγματα (1) For X=1 to 100 Console.WriteLine(X) Νext X S = 0 For X=0 to 100 If X Mod 2 = 0 Then S = S + X^2 Νext X S = 0 For X=1 to 100 Step 2 S = S + X Νext X Dim Index, S as Integer For Index=1 to 100 S=S+Index If (S>10) Then Exit For Νext Index 16
Παραδείγματα (2) Στο παρακάτω τμήμα προγράμματος υπολογίζεται με τη βοήθεια της μεταβλητής s το άθροισμα: 1 2 +(0.9) 2 +(0.8) 2 +...+(0.1) 2 [=3.85] Dim i as double, s as double s = 0 For i=1 to 0.1 step 0.1 s = s + i^2 Next I 17
Η Δομή Do Loop (1) Οταν ο αριθμός των επαναλήψεων δεν είναι γνωστός και εξαρτάται από κάποια συνθήκη χρησιμοποιούμε τη δομή "Do... Loop" Η δομή "Do... Loop" παρουσιάζεται με τις παρακάτω μορφές: --- 1η Μορφή --- --- 2η Μορφή --- Do {While Until} συνθήκη Do [εντολές] [εντολές] Loop Loop {While Until} συνθήκη 18
Η Δομή Do Loop (2) --- 1η Μορφή --- --- 2η Μορφή --- Do {While Until} συνθήκη Do [εντολές] [εντολές] Loop Loop {While Until} συνθήκη Στην 1η μορφή η συνθήκη εξετάζεται πρώτα ενώ στη 2η μορφή εξετάζεται στο τέλος. Συνεπώς, στην 1η μορφή η συνθήκη μπορεί να αποτρέψει εντελώς τις επαναλήψεις ενώ στη 2η μορφή θα έχουμε τουλάχιστον μια επανάληψη. Η συνθήκη συνοδεύεται με το While ή το Until. Αν έχουμε "While συνθήκη" σημαίνει "Οσο η συνθήκη=true επανέλαβε" ενώ αν έχουμε "Until συνθήκη" σημαίνει "Μέχρι η συνθήκη να γίνει ίση με true επανέλαβε". Αρα με While τερματίζουμε τις επαναλήψεις όταν γίνει "συνθήκη=false" ενώ με Until όταν γίνει "συνθήκη=true" 19
Παράδειγμα Do While Loop Στο επόμενο τμήμα προγράμματος εισάγεται ένας αριθμός στη μεταβλητή number τύπου Integer. Οσο η τιμή που πληκτρολογούμε δε βρίσκεται εντός του διαστήματος [1,10], εμφανίζεται σχετικό μήνυμα και ξαναζητείται τιμή για τη number. Dim number As Integer Console.Write("Δώσε έναν αριθμό από το 1 έως το 10=") number = Console.ReadLine() Do While (number < 1 Or number > 10) Console.WriteLine("Ο αριθμός δεν είναι στο διάστημα [1,10]") Console.Write("Δώσε έναν αριθμό από το 1 έως το 10=") number = Console.ReadLine() Loop 20
Παράδειγμα Do Until Loop Το επόμενο τμήμα προγράμματος κάνει ακριβώς ότι και το προηγούμενο χρησιμοποιώντας "Until συνθήκη". Eισάγεται ένας αριθμός στη μεταβλητή number τύπου Integer. Οσο η τιμή που πληκτρολογούμε δε βρίσκεται εντός του διαστήματος [1,10], εμφανίζεται σχετικό μήνυμα και ξαναζητείται τιμή για τη number. Dim number As Integer Console.Write("Δώσε έναν αριθμό από το 1 έως το 10=") number = Console.ReadLine() Do Until (number >= 1 And number <= 10) Console.WriteLine("Ο αριθμός δεν είναι στο διάστημα [1,10]") Console.Write("Δώσε έναν αριθμό από το 1 έως το 10=") number = Console.ReadLine() Loop 21
Παράδειγμα Do Loop While Το επόμενο τμήμα προγράμματος κάνει ακριβώς ότι και τα προηγούμενα δύο χρησιμοποιώντας "While συνθήκη" στο τέλος. Eισάγεται ένας αριθμός στη μεταβλητή number τύπου Integer. Οσο η τιμή που πληκτρολογούμε δε βρίσκεται εντός του διαστήματος [1,10], εμφανίζεται σχετικό μήνυμα και ξαναζητείται τιμή για τη number. Dim number As Integer Do Console.Write("Δώσε έναν αριθμό από το 1 έως το 10=") number = Console.ReadLine() If (number < 1 Or number > 10) Then Console.WriteLine("Ο αριθμός δεν είναι στο διάστημα [1,10]") End If Loop While (number < 1 Or number > 10) 22
Παράδειγμα Do Loop Until Το επόμενο τμήμα προγράμματος κάνει ακριβώς ότι και το προηγούμενο χρησιμοποιώντας "Until συνθήκη" στο τέλος. Eισάγεται ένας αριθμός στη μεταβλητή number τύπου Integer. Οσο η τιμή που πληκτρολογούμε δε βρίσκεται εντός του διαστήματος [1,10], εμφανίζεται σχετικό μήνυμα και ξαναζητείται τιμή για τη number. Dim number As Integer Do Console.Write("Δώσε έναν αριθμό από το 1 έως το 10=") number = Console.ReadLine() If (number < 1 Or number > 10) Then Console.WriteLine("Ο αριθμός δεν είναι στο διάστημα [1,10]") End If Loop Until (number >= 1 And number <= 10) 23
Ατέρμονες επαναλήψεις Είναι επαναλήψεις στις οποίες δεν υπάρχει τρόπος διαφυγής. Δείτε το παρακάτω τμήμα κώδικα: Dim number As Integer Do Console.Write("Δώσε έναν αριθμό ή -1 για ΤΕΡΜΑΤΙΣΜΟ. ") number = Console.ReadLine() number = number ^ 2 Console.WriteLine("To τετράγωνό του είναι " & number) Loop While number <> -1 24
Ατέρμονες επαναλήψεις παράδειγμα Μια βελτίωση του προηγούμενου προγράμματος για να έχουμε τρόπο διαφυγής είναι και η παρακάτω: Dim number As Integer Do Console.Write("Δώσε έναν αριθμό ή -1 για ΤΕΡΜΑΤΙΣΜΟ. ") number = Console.ReadLine() if number = -1 Then Exit Do number = number ^ 2 Console.WriteLine("To τετράγωνό του είναι " & number) Loop 25
Τέλος Ενότητας