Hoofdstuk 3 - Conditionele logica Inleiding Controle structuren If/Then Selection Structure If/Then/Else Selection Structure While Repetition Structure Do While/Loop Repetition Structure Do Until/Loop Repetition Structure Assignment Operators For/next Select Case Exit keyword Logische operatoren Visual Basic.NET
3.1 Inleiding Alle programma’s kunnen geschreven worden in termen van 3 controle structuren Sequentie Selectie Iteratie Visual Basic.NET
3.2 Controle structuren Selectie structuren Iteratie structuren If/Then If/Then/Else Select Case Iteratie structuren While Do While/Loop Do/Loop While Do Until/Loop Do/Loop Until For/Next For Each/Next Visual Basic.NET
3.3 If/Then Uitvoeren van op 1 conditie gebaseerd statement Voorbeeld If studentGrade >= 60 Then Console.WriteLine(“Passed”) End If DE conditie evalueert naar een boolean type (true of false) Visual Basic.NET
3.4 If/Then/Else Voorbeeld If studentGrade >= 60 Then Console.WriteLine(“Passed”) Else Console.WriteLine(“Failed”) End If Geneste If/Then/Else structuren => ElseIf keyword If studentGrade = 100 Then Console.WriteLine(“Whaw”) Elseif studentGrade >= 60 Then Visual Basic.NET
3.5 While De lus zal worden doorlopen zolang aan de voorwaarde wordt voldaan. Voorbeeld Dim product As Integer=2 While product <=1000 product = product * 2 Console.Write (product & vbtab) End While Resultaat : 4 8 16 32 64 128 256 512 1024 2 4 8 16 32 64 128 256 512 Smallest power of 2 greater than 1000 is 1024 Visual Basic.NET
3.6 Do While Idem While Voorbeeld Dim product As Integer=2 Do While product <=1000 product = product * 2 Console.Write (product & vbtab) Loop Resultaat : 4 8 16 32 64 128 256 512 1024 Visual Basic.NET
3.7 Do Until/Loop De instructies binnen de do lus worden uitgevoerd zolang de voorwaarde False is. Voorbeeld Dim product As Integer=2 Do Until product >1000 product = product * 2 Console.Write (product & vbtab) Loop Resultaat : 4 8 16 32 64 128 256 512 1024 Visual Basic.NET
3.8 Do/Loop While De lus zal worden doorlopen zolang aan de voorwaarde wordt voldaan, maar wordt minstens 1 keer uitgevoerd Voorbeeld Dim product As Integer=2 Do product = product * 2 Console.Write (product & vbtab) Loop While product <=1000 Resultaat : 4 8 16 32 64 128 256 512 1024 Visual Basic.NET
3.9 Do/Loop Until De instructies binnen de do lus worden uitgevoerd zolang de voorwaarde False is, maar worden minstens 1 keer uitgevoerd. Voorbeeld Dim product As Integer=2 Do product = product * 2 Console.Write (product & vbtab) Loop Until product >1000 Resultaat : 4 8 16 32 64 128 256 512 1024 Visual Basic.NET
3.10 Assigment operators Binaire operatoren Voorbeeld +, -, *, ^, &, / , \ Gebruik variable = variable operator expression variable operator= expression Voorbeeld Optellen assignment operator, += value = value + 3 value += 3 / ; deling float; \ delen integer Visual Basic.NET
3.11 For/Next Een opgegeven aantal maal herhalen van een reeks statements Voorbeeld Dim sum = 0, number As Integer ' add even numbers from 2 to 100 For number = 2 To 100 Step 2 sum += number Next Resultaat : 2550 Sum = 2 + 4 + 6 + .... Visual Basic.NET
3.12 Voorbeeld For/Next : intrestberekening Een persoon plaats 1000$ op een spaarrekening tegen een intrest van 5%. Veronderstel dat de intrest op het spaarboekje blijft staan. Bereken en print per jaar, over een periode van 10 jaar, het bedrag op het spaarboekje. Berekening : bedrag(1 + intrestvoet) aantal jaren Opgave : persoon heeft bedrag van 1000 $ op zijn rekening staan aan een interest van 5%. Amount : initieel bedrag op de rekening Rate ; interestvoet N : aantal jaren Output : bedrag op rekening na n jaren We hebben een loop nodig om de 10 jaren dat het geld op de rekening blijft staan te overlopen. Visual Basic.NET
3.12 Voorbeeld For/Next : intrestberekening 1 ' Interest.vb 2 ' Calculating compound interest. 3 4 Imports System.Windows.Forms 5 6 Module modInterest 7 8 Sub Main() 9 10 Dim amount, principal As Decimal ' dollar amounts 11 Dim rate As Double ' interest rate 12 Dim year As Integer ' year counter 13 Dim output As String ' amount after each year 14 15 principal = 1000.00 16 rate = 0.05 17 18 output = "Year" & vbTab & "Amount on deposit" & vbCrLf 19 20 ' calculate amount after each year 21 For year = 1 To 10 22 amount = principal * (1 + rate) ^ year 23 output &= year & vbTab & _ 24 String.Format("{0:C}", amount) & vbCrLf 25 Next 26 27 ' display output 28 MessageBox.Show(output, "Compound Interest", _ 29 MessageBoxButtons.Ok, MessageBoxIcon.Information) 30 31 End Sub ' Main 32 33 End Module ' modInterest Namespace nodig voor Messagebox init bepaalt bedrag op rekening Genereert output : Jaar gevolgd door tab gevolgd door bedrag (geformatteerd als currency), en een nieuwe lijn Per jaar Lijn 4 : importeren namespace voor dialoogvenster Lijn 22-23 : output = aantal jaar, gevolgd door een tab karakter (vbtab, dit plaatst de cursor op de volgende kolom), methode string.format en een newline karakter(vbcrlf) om de volgende ouput op de volgende lijn te beginnen {0},... Zijn de digits die aanduiden welk argument getoond moet worden. In meer gecompliceerde format strings, zoals {0:c} , duidt de eerste digit nog steeds het argument aan. De c(currency) is een formatterings code die aanduidt hoe het bedrag geformatteerd dient te worden. Lijn 10 en 11 variabelen amount en principal zijn van het type decimal, daar we 2 cijfers na de komma nodig hebben. (Single en double laten geen juiste berekeningen toe na de komma). Lijn 11 : rate is van het type double (is een floating point nummer), want wordt gebruikt in de berekeningen. Specifieert C (voor “currency”) als formatterings code einde Visual Basic.NET
3.13 Select Case Meervoudige selectie Syntax Select Case testexpression [Case expressionlist-n [statements-n]] ... [Case Else [elsestatements]] End Select met expressionlist Case value => vb. Case 1 Case value1, value2,... => vb. Case 1,5 Case value3 to value4 => vb. Case 1 to 5 Case relational operator value => vb. Case >= 5 - identieke case statements => At runtime wordt steeds de eerste case uitgevoerd => logische fout - igv case to : als eindwaarde kleiner dan beginwaarde, dan wordt dit statement nooit uitgevoerd => logische fout - Case else moet laatste conditie zijn, zoniet syntax fout Visual Basic.NET
3.13 Select Case Voorbeeld : afdrukken van de behaalde graad voor een aantal studenten. Invoer wordt afgesloten met –1. Igv 100, print “Perfect score”. Bereken ook per graad hoeveel studenten de graad behaald hebben. Stel volgende graden A+ : 100 A : 90 - 99 B : 80-89 C : 70-79 D : 60-69 E : 50-59 F : 0-59 Visual Basic.NET
3.13 Select Case Enter a grade: 84 Letter Grade: B Enter a grade: 100 Enter a grade: 100 Perfect Score! Letter grade : A+ Enter a grade: 7 Invalid Input. Please enter a valid grade. Enter a grade: 95 Letter Grade: A Enter a grade: 78 Letter Grade: C Totals for each letter grade are: A: 2 B: 1 C: 1 D: 0 F: 0 Visual Basic.NET
2 ' Using the Select Case structure. 3 4 Module modEnterGrades 5 1 ' SelectTest.vb 2 ' Using the Select Case structure. 3 4 Module modEnterGrades 5 6 Sub Main() 7 Dim grade As Integer = 0 ' one grade 8 Dim aCount As Integer = 0 ' number of As 9 Dim bCount As Integer = 0 ' number of Bs 10 Dim cCount As Integer = 0 ' number of Cs 11 Dim dCount As Integer = 0 ' number of Ds 12 Dim fCount As Integer = 0 ' number of Fs 13 14 Console.Write("Enter a grade, -1 to quit: ") 15 grade = Console.ReadLine() 16 17 ' input and process grades 18 While grade <> -1 19 20 Select Case grade ' check which grade was input 21 22 Case 100 ' student scored 100 23 Console.WriteLine("Perfect Score!" & vbCrLf & _ 24 "Letter grade: A" & vbCrLf) 25 aCount += 1 26 27 Case 90 To 99 ' student scored 90-99 28 Console.WriteLine("Letter Grade: A" & vbCrLf) 29 aCount += 1 30 31 Case 80 To 89 ' student scored 80-89 32 Console.WriteLine("Letter Grade: B" & vbCrLf) 33 bCount += 1 34 Declareer variabele grade van type integer lijn 8-12 variabelen die totaal aantal per graad gaan bijhouden Lijn 18-57 : while loop voor ingave van grades. Stop bij ingave van grade –1 Lijn 20 : select case wordt sequentieel uitgevoerd totdat een matching waarde gevonden. Visual Basic.NET
35 Case 70 To 79 ' student scored 70-79 36 Console.WriteLine("Letter Grade: C" & vbCrLf) 37 cCount += 1 38 39 Case 60 To 69 ' student scored 60-69 40 Console.WriteLine("Letter Grade: D" & vbCrLf) 41 dCount += 1 42 43 ' student scored 0 or 10-59 (10 points for attendance) 44 Case 0, 10 To 59 45 Console.WriteLine("Letter Grade: F" & vbCrLf) 46 fCount += 1 47 48 Case Else 49 50 ' alert user that invalid grade was entered 51 Console.WriteLine("Invalid Input. " & _ 52 "Please enter a valid grade." & vbCrLf) 53 End Select 54 55 Console.Write("Enter a grade, -1 to quit: ") 56 grade = Console.ReadLine() 57 End While 58 59 ' display count of each letter grade 60 Console.WriteLine(vbCrLf & _ 61 "Totals for each letter grade are: " & vbCrLf & _ 62 "A: " & aCount & vbCrLf & "B: " & bCount _ 63 & vbCrLf & "C: " & cCount & vbCrLf & "D: " & _ 64 dCount & vbCrLf & "F: " & fCount) 65 66 End Sub ' Main 67 68 End Module ' modEnterGrades Visual Basic.NET
3.14 Exit Exit Do, Exit While, Exit For Vroegtijdig beëindigen van een loop Voorbeeld : demonstratie van exit Visual Basic.NET
Loop zou 10 moeten worden uitgevoerd 1 'ExitTest.vb 2 ' Using the Exit keyword in repetition structures. 3 4 Imports System.Windows.Forms 5 6 Module modExitTest 7 8 Sub Main() 9 Dim output As String 10 Dim counter As Integer 11 12 For counter = 1 To 10 13 14 ' skip remaining code in loop only if counter = 3 15 If counter = 3 Then 16 Exit For 17 End If 18 19 Next 20 21 output = "counter = " & counter & _ 22 " after exiting For/Next structure" & vbCrLf 23 24 Do Until counter > 10 25 26 ' skip remaining code in loop only if counter = 5 27 If counter = 5 Then 28 Exit Do 29 End If 30 31 counter += 1 32 Loop 33 Loop zou 10 moeten worden uitgevoerd Exit For wordt uitgevoerd als counter = 3, waardoor loop beëindigd wordt counter = 3 , bij begin loop. De loop zou moeten worden uitgevoerd totdat counter > 10 Exit Do wordt uitgevoerd als counter = 5, waardoor loop beëindigd wordt Visual Basic.NET
34 output &= "counter = " & counter & _ 35 " after exiting Do Until/Loop structure" & vbCrLf 36 37 While counter <= 10 38 39 ' skip remaining code in loop only if counter = 7 40 If counter = 7 Then 41 Exit While 42 End If 43 44 counter += 1 45 End While 46 47 output &= "counter = " & counter & _ 48 " after exiting While structure" 49 50 MessageBox.Show(output, "Exit Test", _ 51 MessageBoxButtons.OK, MessageBoxIcon.Information) 52 End Sub ' Main 53 54 End Module ' modExitTest counter = 5 , bij begin loop. De loop zou moeten worden uitgevoerd zolang counter <= 10 Exit While wordt uitgevoerd als counter = 7, waardoor loop beëindigd wordt Visual Basic.NET
Addendum : String.Format Methode format van de klasse String Is een functie die een string retourneert, geformatteerd volgens de instructie in de format String. Overloads Public Shared Function Format( ByVal format As String, _ ByVal ParamArray args() As Object ) As String Mogelijke waarden voor Format String Imports System Imports System.Globalization Imports System.Threading Module Module1 Sub Main() Thread.CurrentThread.CurrentCulture = New CultureInfo("en-us") Dim MyDouble As Double = 123456789 Console.WriteLine("The examples in en-US culture:") Console.WriteLine(MyDouble.ToString("C")) Console.WriteLine(MyDouble.ToString("E")) Console.WriteLine(MyDouble.ToString("P")) Console.WriteLine(MyDouble.ToString("N")) Console.WriteLine(MyDouble.ToString("F")) Thread.CurrentThread.CurrentCulture = New CultureInfo("de-DE") Console.WriteLine("The examples in de-DE culture:") End Sub End Module The preceding code example displays the following to the console. The examples in en-US culture: $123,456,789.00 1.234568E+008 12,345,678,900.00% 123,456,789.00 123456789.00 Visual Basic.NET The examples in de-DE culture: 123.456.789,00 DM 1,234568E+008 12,345,678,900.00% 123.456.789,00 123456789,00
Addendum : Messagebox Klasse in System.Windows.Forms Messagebox bestaat uit 12 verschillende formulieren (procedure overloading) Voorbeeld Public Sub ExitApplication() ' Display a message box asking users if they ' want to exit the application. If MessageBox.Show ("Do you want to exit?", "My Application", _ MessageBoxButtons.YesNo, MessageBoxIcon.Question) _ = DialogResult.Yes Then Application.Exit End If End Sub Dit vb gebruikt 4 argumenten Visual Basic.NET
Addendum : Messagebox Dit voorbeeld bevat 4 parameters Text : bericht in berichtvenster Caption : tekst in titelbalk berichtvenster Buttons : knoppen weer te geven in het berichtvenster. Met de enumeratie MessageBoxButtons kan je de knoppen specifieren. Een enumeratie is een lijst van constanten Icon : pictogram weer te geven in berichtvenster. Enumeratie MessageBoxIcons Verder kan je in bepaalde procedures ook meegeven DefaultButton : standaardknop voor berichtvenster. Enumeratie MessageDefaultButton Options : weergave- en koppelingsopties voor berichtvenster. Enumeratie MessageBoxOptions Retourneert welke knop de gebruiker heeft geselecteerd. Enumeratie DialogResult Visual Basic.NET
Addendum : Messagebox De enumeratie MessageBoxButtons Deze bevat constanten die worden gebruikt om knoppen voor het bericht venster te specifieren. Visual Basic.NET
Addendum : Messagebox De enumeratie MessageBoxIcons Deze bevat constanten die worden gebruikt om de pictogrammen voor het berichtvenster te specifieren Visual Basic.NET
Addendum : Messagebox De enumeratie MessageBoxDefaultButton De enumeratieconstante Button1 maakt van de eerste knop de standaardknop De enumeratieconstante Button2 maakt van de tweede knop de standaardknop ... Voorbeeld MessageBox.Show(“Hello World”, ”Sample”, MessageBoxButtons.OKCancel, MessageboxIcon.Exclamation, MessageboxDefaultButton.Button1) Visual Basic.NET
Addendum : Messagebox De enumeratie MessageBoxOptions Voorbeelden van mogelijke opties voor berichtvenster RightAlign : rechts aligneren van de tekst RtlReading : stelt leesvolgorde van het berichtvenster in van rechts naar links. Voorbeeld MessageBox.Show(“Hello World”, ”Sample”, MessageBoxButtons.OKCancel, MessageboxIcon.Exclamation, MessageboxDefaultButton.Button1, MessageBoxOptions.RightAlign) De enemuratie DialogResult DialogResult.OK DialogResult.Cancel DialogResult.Yes ... Note Be aware of the importance of calling the Dispose method on the form to properly dispose of the dialog box. Recall that this is not done automatically by clicking the Close box or calling the Close method. Visual Basic.NET
3.15 Logische operatoren Logische evaluatie van Boole-expressies XOR Expression1 expression2 result is True True False True False True False True True False False False Visual Basic.NET
3.15 Logische operatoren Gebruik AND en OR enkel wanneer een conditie een side effect genereert (beide expressies worden steeds geëvalueerd) Console.Writeline(“How old are you”)? If (gender=“F” and Console.Readline()>=65) then Console.Writeline(“You are a female senior citizen”) End if Waarheidstabel Visual Basic.NET
3.15 Logische operatoren Volgorde van uitvoering (binnen 1 operator steeds van links naar rechts) Visual Basic.NET
Alle icoontjes Vervolg zijn slides die ik niet meer zou geven. Ik denk dat ze al voorbeelden genoeg gezien hebben Visual Basic.NET
3.11 For/Next Controle variabele verhoogt met 2, van 2 tot 100 1 ' Sum.vb 2 ' Using For/Next structure to demonstrate summation. 3 4 Imports System.Windows.Forms 5 6 Module modSum 7 8 Sub Main() 9 10 Dim sum = 0, number As Integer 11 12 ' add even numbers from 2 to 100 13 For number = 2 To 100 Step 2 14 sum += number 15 Next 16 17 MessageBox.Show("The sum is " & sum, _ 18 "Sum even integers from 2 to 100", _ 19 MessageBoxButtons.OK, MessageBoxIcon.Information) 20 End Sub ' Main 21 22 End Module ' modSum Controle variabele verhoogt met 2, van 2 tot 100 Tekst in venster Toont MessageBox Tekst in titlebar Messagebox met OK knop Icoontje moet Information icon zijn Visual Basic.NET
3.16 Inleiding tot Windows Application Programming De IDE genereert de code die de GUI creëert. View > Code => toont code van Windows Applicatie in Code Editor Venster Demo Bevat geen Module, enkel klassen, gedefinieerd in FCL. Bevat minstens 1 klas die erft van de klasse Form uit de FCL System.Windows.Form namespace Visual Basic.NET
3.12 Voorbeeld For/Next : intrestberekening Principal = 1000 Rate = 0.5 Voeg hoofding toe aan output Programma Intrestberekening Bereken bedrag op spaarboek Voeg lijn met bedrag toe aan output Jaar * Toon output in Messagebox Visual Basic.NET
Zolang graad <> -1 3.13 Select Case Print “Perfecte score” en Graad A+ aCount += 1 aCount = 0 bCount = 0 cCount = 0 dCount = 0 eCount = 0 fCount = 0 Vraag graad Lees graad Graad=100 ° Print “Graad B” bCount += 1 Graad 90 - 99 ° ... Programma Graad Berekening Student * Zolang graad <> -1 Toon totalen in Messagebox Print “Invalid score” Anders Vraag graad Lees graad Visual Basic.NET