Mer sortering Mer Debugging Introduksjon til strukturer
Øv. 7 relatert •Lage histogram •Utskrift av histogram –Lag prosedyre SkrivUt() •Med kode for hver søyle •Med løkke som skriver ut alle søylene
Foreta utskrift i en prosedyre Private Sub btnVis_Click() Handles btnVis.Click Dim randomNum As New Random Dim frekvenstabell(9) As Integer ' plass til 10 Dim soyle As String For i As Integer = 0 To 100 frekvenstabell(randomNum.Next(0, 10)) += 1 Next SkrivUt(frekvenstabell) End Sub
Prosedyre SkrivUt(), Med kode for hver søyle Sub SkrivUt(ByVal frekvenstabell() As Integer) Dim soyle As String lstHistogram.Items.Clear() ’Skriv ut søyle for 0’erne soyle = frekvenstabell(0) & ": " For i As Integer = 0 To frekvenstabell(0) soyle = soyle & "*" Next lstHistogram.Items.Add(soyle) ’Skriv ut søyle for 1’erne soyle = frekvenstabell(1) & ": " For i As Integer = 0 To frekvenstabell(1) soyle = soyle & "*" Next lstHistogram.Items.Add(soyle) ’Skriv ut søyle for 2’erne soyle = frekvenstabell(2) & ": " For i As Integer = 0 To frekvenstabell(2) soyle = soyle & "*" Next lstHistogram.Items.Add(soyle) ’Skriv ut søyle for 3’erne soyle = frekvenstabell(3) & ": " For i As Integer = 0 To frekvenstabell(3) soyle = soyle & "*" Next lstHistogram.Items.Add(soyle) ’Skriv ut søyle for 4’erne soyle = frekvenstabell(4) & ": " For i As Integer = 0 To frekvenstabell(4) soyle = soyle & "*" Next lstHistogram.Items.Add(soyle) ’Skriv ut søyle for 5’erne soyle = frekvenstabell(5) & ": " For i As Integer = 0 To frekvenstabell(5) soyle = soyle & "*" Next lstHistogram.Items.Add(soyle) ’Skriv ut søyle for 6’erne soyle = frekvenstabell(6) & ": " For i As Integer = 0 To frekvenstabell(6) soyle = soyle & "*" Next lstHistogram.Items.Add(soyle) ’Skriv ut søyle for 7’erne soyle = frekvenstabell(7) & ": " For i As Integer = 0 To frekvenstabell(7) soyle = soyle & "*" Next lstHistogram.Items.Add(soyle) ’Skriv ut søyle for 8’erne soyle = frekvenstabell(8) & ": " For i As Integer = 0 To frekvenstabell(8) soyle = soyle & "*" Next lstHistogram.Items.Add(soyle) ’Skriv ut søyle for 9’erne soyle = frekvenstabell(9) & ": " For i As Integer = 0 To frekvenstabell(9) soyle = soyle & "*" Next lstHistogram.Items.Add(soyle) End Sub
Sub SkrivUt(ByVal frekvenstabell() As Integer) Dim soyle As String lstHistogram.Items.Clear() ’ legg inn løkke End Sub Prosedyre SkrivUt() Oppgave: Lag løkke som skriver ut alle søylene
Prosedyre SkrivUt() Med løkke som skriver ut alle søylene Sub SkrivUt(ByVal frekvenstabell() As Integer) Dim soyle As String lstHistogram.Items.Clear() For tall As Integer = 0 To 9 soyle = frekvenstabell(tall) & ": " For i As Integer = 0 To frekvenstabell(tall) soyle = soyle & "*" Next lstHistogram.Items.Add(soyle) Next End Sub
Mer introduksjon til sortering... først fra forrige gang •Anta at vi har en tabell med to tekst-elementer som er navnene Berit og Anne i posisjon 0 og 1 •Vi ønsker at disse skal stå i alfabetisk rekkefølge, de må derfor bytte plass. •Skrive kode for dette 1.Uten prosedyre 2.Med en prosedyre ByttOm(ByRef til tabell)
Innhold i 2 tabellplasser skal bytte plass Private Sub btnBytt_Click() Handles btnBytt.Click Dim tabell(1) As String ' plass til 2 tabell(0) = ”Berit” tabell (1) = ”Anne” ’BRØVER Å BYTTE: tabell(0) = tabell (1) tabell (1) = tabell(0) ’KJØR I DEBUGGER, HVA ER GALT? End Sub
Innhold i 2 tabellplasser skal bytte plass Bruker hjelpevariabel Private Sub btnBytt_Click() Handles btnBytt.Click Dim tabell(1) As String ' plass til 2 Dim hjelpevariabel As String tabell(0) = ”Berit” tabell (1) = ”Anne” hjelpevariabel = tabell(0) tabell(0) = tabell (1) tabell (1) = hjelpevariabel End Sub
Innhold i 2 tabellplasser skal bytte plass Gjør dette i prosedyre ByttOm() Private Sub btnBytt_Click() Handles btnBytt.Click Dim tabell(1) As String ' plass til 2 tabell(0) = ”Berit” tabell (1) = ”Anne” ByttOm(tabell) End Sub Sub ByttOm(ByRef tabell() As String) Dim hjelpevariabel As String hjelpevariabel = tabell(0) tabell(0) = tabell (1) tabell (1) = hjelpevariabel End Sub
Gjør prosedyre ByttOm() mer generell Private Sub btnBytt_Click() Handles btnBytt.Click Dim tabell(1) As String ' plass til 2 tabell(0) = ”Berit” tabell (1) = ”Anne” ByttOm(tabell(0), tabell(1)) End Sub Sub ByttOm(ByRef ordEn As String, ByRef ordTo As String) Dim hjelpevariabel As String hjelpevariabel = ordEn ordEn = ordTo ordTo = hjelpevariabel End Sub
Sortering av tabeller Eksempel: Dim tabell(2) As String tabell(0) = “Cecilie” tabell(1) = “Berit” tabell(2) = “Anne” CecilieBeritAnne 012 Skriv kode for å sortere tabellen alfabetisk
Sortering av tabeller Eksempel: Dim tabell(5) As String CecilieBeritAnne 012 Skriv kode for å sortere tabellen alfabetisk GreteYaraAmanda 345
Sorteringsrutine “boble-sortering” “bubble sort” Private Sub btnSorter_Click() Handles btnSorter.Click Dim tabell() As String = {"cecilie", "Berit", "Anne", "Grete", "Yara", "Amanda"} For i As Integer = 0 To tabell.GetUpperBound(0) - 1 For j As Integer = i + 1 To tabell.GetUpperBound(0) If tabell(j) < tabell(i) Then ByttOm(tabell(j), tabell(i)) End If Next
Visual Basic Debugger (s. 627) •Debuggingsvinduer: –Immediate: Kan endre verdier i variabler mens prog kjører –Watch: Kan velge variabler vi vil se innholdet i –Locals: Ser på dette nå:
Locals-window •Viser innholdet i alle lokale variabler til en prosedyre eller funksjon •Viser ikke globale variabler –Prøv: •Gjøre frekvenstabell om fra inn-paramenter til SkrivUt() og til en global variabel •Observer forskjellen i Locals-vinduet
Holde rede på informasjon som logisk sett hører sammmen •F.eks. dersom vi har navn, adresse og alder for 10 personer vil vi gjerne at opplysningene for en person behandles som en gruppe •Structures, side 343: Defineres øverst i kodevinduet, etter Public Class frmMittProgram: Structure Person Dim navn As String Dim adresse As String Dim alder As Integer End Structure
Bruk av strukturer, eksempel Private Sub btnTest_Click() Handles btnTest.Click Dim person1 As Person 'Deklarasjon av 1 person 'Bruker strukturen: gir den verdier og skriver den ut person1.navn = "Bjørn Jæger" person1.adresse = "Bjørsetsletta 2, 6411 Molde" person1.alder = 46 lstutskrift.Items.Add(person1.navn) lstutskrift.Items.Add(person1.adresse) lstutskrift.Items.Add(person1.alder) End Sub