Visual Basic Kontrollstrukturer del 3 Løkker 2 Grethe Sandstrak 1 Repetisjon fra onsdag To løkke typer: For-Next brukes når vi vet antall gjennomløp Do-Loop betingelsesstyrt Felles elementer: initier Løkkebetingelse Gjør noe så lenge n er sann (Løkkekropp) Oppdater 2 1
Løkker Alle løkker består av fire elementer: Initiering av Løkkebetingelse Løkkekropp (det som skal gjentas) Oppdatering av 3 Løkker: For - Next Initiering av Dim sum As Integer = 0 Dim i As Integer For i = 1 To 3 sum += i Next i Oppdatering av MsgBox("Summen er: " & sum) 4 2
Løkker: Do While Loop Dim sum As Integer = 10 Dim i As Integer = 3 Initiering av Oppdatering av Do While i > 0 sum -= i i -= 1 Loop MsgBox("Summen er: " & sum) 5 Øving 3, oppgave 4 Oppgave: Produser følgende utskrift vha løkker: 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 3 4 5 6 1 2 3 4 5 6 7 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 10 6 3
Strategi Vi trenger en løkke som teller fra 1 til 10 og bygger opp en streng som vi skriver ut for hvert løkke-gjennomløp. Første løkke-gjennomløp er tekst 1. Vi skriver ut innholdet i tekst i en label eller listebox eller lignende. 2. løkke gjennomløp er teller lik 2 og tekst skal være lik 1 2. Det første tallet henger igjen fra første løkke gjennomløp. Pseudokode Tekst = Gjenta fra teller=1 til teller = 10 tekst = forrige tekst + et mellomrom + teller. skriv ut tekst Øk teller med 1 7 Flytskjema: teller = 1 tekst = teller > 10 teller <=10 tekst = tekst + teller + lblresultat.text += tekst teller = teller + 1 8 4
For - Next - Step Kan øke teller med mer enn 1: Dim teller as Integer For teller = 1 To 5 Step 2 MsgBox(teller & : God Morn! ) Next teller => Tre tekstbokser med følgende innhold: 1: God Morn! 3: God Morn! 5: God Morn! - Hva skjer om vi endrer Step til 3?? 9 Kontroll av inndata Enkelt å teste ved hjelp av løkker Spør bruker på nytt når ugyldig data skrives inn Dim passord = txtpassord.text.trim Do While passord = " OR passord <> de1gp passord = InputBox("Du må oppgi passord:", Passord ) Loop MsgBox("Du er nå logget inn",msgboxstyle.information) 10 5
Nøstede kontrollstrukturer Kan ha løkker inni hverandre Kan ha if inni løkker og omvendt 11 Hva skrives ut her 1? Dim ytre, indre As Integer For ytre = 1 To 5 For indre = 1 To ytre res += ytre & "-" & indre & ": VB er Gøy dere!" & vblf Next indre Next ytre 12 6
Resultat ved kjøring 13 Hva skrives ut her 2? Dim ytre, indre As Integer For ytre = 1 To 5 res += "Ytre- " For indre = 1 To ytre res += "Indre " Next indre res += vblf Next ytre 14 7
Resultat av kjøring Ytre Indre Ytre Indre Indre Ytre Indre Indre Indre Ytre Indre Indre Indre Indre Ytre Indre Indre Indre Indre Indre 15 Hva skrives ut her 3? Dim linjeteller, tall, sum As Integer Dim tekst As String = "Summen blir: " For linjeteller = 1 To 10 sum = 0 For tall = 1 To linjeteller - 1 sum += tall res = res & tall & " " Next tall res = res & "Summen blir: " & sum & vblf Strategi: Bygg opp en tekststreng og skriv ut denne når løkkene er gjennomløpt. Next linjeteller 16 8
Eksempel på kjøring Summen blir: 0 1 Summen blir: 1 1 2 Summen blir: 3 1 2 3 Summen blir: 6 1 2 3 4 Summen blir: 10 1 2 3 4 5 Summen blir: 15 1 2 3 4 5 6 Summen blir: 21 1 2 3 4 5 6 7 Summen blir: 28 1 2 3 4 5 6 7 8 Summen blir: 36 1 2 3 4 5 6 7 8 9 Summen blir: 45 17 Program fra forelesning 18 9
Dim antallforsøk As Integer = 1 Programkode del 1 Private Sub btnlogin_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnlogin.click Dim passord = txtpassord.text.trim 'Do While passord = "" Or passord <> "de1gp" 'Dette Er 1 Godt Passord ' passord = InputBox("Du må oppgi passord:", "Passord") 'Loop If antallforsøk >= 3 Then MsgBox("Antall forsøk er brukt opp!", MsgBoxStyle.Critical) ElseIf passord = "de1gp" Then MsgBox("Du er nå logget inn", MsgBoxStyle.Information) antallforsøk = 1 Else MsgBox("Du må skrive inn rett passord!", MsgBoxStyle.Critical) txtpassord.text = "" txtpassord.focus() antallforsøk += 1 End If End Sub Merk: Avvik fra forelesning: Dette programmet lar bruker kun få tre forsøk på å skrive inn passord. Legg merke til at vi da ikke bruker do-loop, men bruker en global variabel som teller antall forsøk. Hver gang loginknappen trykkes sjekker vi om antall forsøk er mindre enn 3, og om det er korrekt passord. Ved feil passord økes antallforsøk med 1. Se nøye på koden og prøv å forstå hvordan den virker. 19 Programkode del 2 Private Sub btnlokke1_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnlokke1.click Dim ytre, indre As Integer For ytre = 1 To 5 For indre = 1 To ytre res += ytre & "-" & indre & ": VB er utrolig gøy dere :o)" & vblf Next Next End Sub Private Sub btnlokke2_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnlokke2.click Dim ytre, indre As Integer For ytre = 1 To 5 res += "Ytre- " For indre = 1 To ytre res += "Indre " Next indre res += vblf Next ytre End Sub 20 10
Programkode del 3 Private Sub btnlokke3_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnlokke3.click Dim linjeteller, tall, sum As Integer Dim tekst As String = "Summen blir: " For linjeteller = 1 To 10 sum = 0 For tall = 1 To linjeteller - 1 sum += tall res = res & tall & " " Next tall res = res & "Summen blir: " & sum & vblf Next linjeteller End Sub 21 11