190 likes | 343 Vues
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
E N D
Ø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 ’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() ’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)
Prosedyre SkrivUt() Oppgave: Lag løkke som skriver ut alle søylene Sub SkrivUt(ByVal frekvenstabell() As Integer) Dim soyle As String lstHistogram.Items.Clear() ’ legg inn løkke End Sub
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 • Uten prosedyre • 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 plassBruker 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 plassGjø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” 0 1 2 Cecilie Berit Anne Skriv kode for å sortere tabellen alfabetisk
Sortering av tabeller Eksempel: Dim tabell(5) As String 0 1 2 3 4 5 Cecilie Berit Anne Grete Yara Amanda Skriv kode for å sortere tabellen alfabetisk
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 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