Upload
emmly
View
52
Download
0
Embed Size (px)
DESCRIPTION
Tabeller – Arrays Lage frekvenstabell Norske Bokstaver. Tabeller – en samling variabler. Eksempel: Dim tabellÅr(3) As Integer. Deklarerer en tabell. Innhold etter deklarasjon. 0. 0. 0. 0. 0. 1. 2. 3. Index, dvs. plassnummer i tabellen. tabellÅr(0) = 2005 tabellÅr(1) = 2006 - PowerPoint PPT Presentation
Citation preview
Tabeller – ArraysLage frekvenstabellNorske Bokstaver
Tabeller – en samling variabler
Eksempel: Dim tabellÅr(3) As Integer
tabellÅr(0) = 2005
tabellÅr(1) = 2006
tabellÅr(2) = 2007
tabellÅr(3) = 2008
2005 2006 2007 2008
0 0 0 0
0 1 2 3 Index, dvs. plassnummer i tabellen
0 1 2 3
Deklarerer en tabell
Bruker tabellen, tildeler verdier
Innhold etter tildeling
Innhold etter deklarasjon
Tabell med tellinger av biler
Eksempel: Dim tabellMedTellinger(51) As Integer
sr = IO.File.OpenText("c:\antallBiler.txt")
Do While (sr.peek() <> -1)
tabellMedTellinger(nr) = sr.ReadLine
nr = nr + 1
Loop
13 45 120 105
0 0 0 0 0...
0 1 2 3 51
2
510 1 2 3...
Fra forrige gang: Les fra fil til tabell i Form_Load(),
bruk verdiene i btnFinnMinste_Click()Public Class frmTabellTest Dim tabellMedTellinger(51) As Integer ’plass til 52
Private Sub frmTabellTest_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim sr As IO.StreamReader Dim nr As Integer sr = IO.File.OpenText("c:\antallBiler.txt") Do While (sr.peek() <> -1) tabellMedTellinger(nr) = sr.ReadLine lstTellinger.Items.Add(tabellMedTellinger(nr)) nr = nr + 1 Loop sr.Close() End Sub
Private Sub btnFinnMinste_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFinnMinste.Click Dim i As Integer = 0 Dim minste As Integer = 1000 For i = 0 To 51 lstTellinger.Items.Add(i & ": " & tabellMedTellinger(i)) If (tabellMedTellinger(i) < minste) Then minste = tabellMedTellinger(i) End If Next MsgBox("Minste Verdi er: " & minste) End SubEnd Class
Størrelse på tabeller
Når vi skriver programmet deklarerer vi tabellene vi har bruk for
Dim antalltellinger(51) As Integer
Tabellen har 52 plasser siden vi vet at filen med tellinger har 52 linjer.
Men ofte vet vi ikke hvor stor tabell en bruker av programmet trenger.
Vi kan da gjøre deklarasjonen uten å angi størrelse:
Dim antalltellinger() As Integer
Senere når vi har lest filen vet vi hvor mange plasser som trengs:
ReDim tabellMedTellinger(antallElement)
Finne tabellstørrelse mens programmet kjører
• Format: ReDim arrayName(m)• Deklarasjon: Dim tabellMedTellinger() As Integer• Størrelse angis: ReDim tabellMedTellinger(antElement)
Vi brukte at tabellstørrelsen var kjent når vi skrev en løkke:For i = 0 To 51 lstTellinger.Items.Add(i & ": " & tabellMedTellinger(i)) If (tabellMedTellinger(i) < minste) Then minste = tabellMedTellinger(i) End IfNext
Metoden GetUpperBound() gir størrelsen på tabellen:For i = 0 To tabellMedTellinger.GetUpperBound(0)
...Next
Endre og finn tabellstørrelse mens programmet kjører
• Skriv om eksemplet foran til å bruke:– ReDim tabell(dim)
• Merk: Må ha to gjennomganger av filen i Form_Load
– tabell.GetUpperBound(0)
Public Class frmTabellTest Dim tabellMedTellinger() As Integer 'plass til 52
Private Sub frmTabellTest_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim sr As IO.StreamReader Dim nr As Integer sr = IO.File.OpenText("c:\antallBiler.txt") Do While (sr.Peek() <> -1) sr.ReadLine() nr = nr + 1 Loop sr.Close() ReDim tabellMedTellinger(nr) nr = 0 sr = IO.File.OpenText("c:\antallBiler.txt") Do While (sr.Peek() <> -1) tabellMedTellinger(nr) = sr.ReadLine lstTellinger.Items.Add(tabellMedTellinger(nr)) nr = nr + 1 Loop sr.Close() End Sub
Private Sub btnFinnMinste_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFinnMinste.Click Dim i As Integer = 0 Dim sum, antall As Integer, minste As Integer = 1000 Dim snitt As Double sum = 0 antall = 0 For i = 0 To tabellMedTellinger.GetUpperBound(0) lstTellinger.Items.Add(i & ": " & tabellMedTellinger(i)) If (tabellMedTellinger(i) < minste) Then minste = tabellMedTellinger(i) End If sum += tabellMedTellinger(i) antall += 1 Next snitt = sum / antall MsgBox("Minste: " & minste & " sum: " & sum & " antall: " & antall & " snitt: " & snitt) End SubEnd Class
Dim i As Integer = 0
Dim minste as Integer = 1000
Dim tabellMedTellinger(51) As Integer ‘plass til 52
Dim plassenTilMinste As Integer
For i = 0 To 51 lstTellinger.Items.Add(i & ": " & tabellMedTellinger(i))
If (tabellMedTellinger(i) < minste) Then
minste = tabellMedTellinger(i)
plassenTilMinste = i
End If
NextMsgBox(“Minste Verdi er: “ & minste & “ Nummer: ” & plassenTilMinste)
Modifiser koden som finner plassen til minste slik at den finner plassen til største tall
Kode som finner på hvilken plass i tabellen største tall er
Dim i As Integer = 0Dim storste As Integer = 0Dim plassenTilStorste As Integer = 0
Dim tabellMedTellinger(51) As Integer ‘plass til 52
For i = 0 To 51 lstTellinger.Items.Add(i & ": " & tabellMedTellinger(i))
If (tabellMedTellinger(i) > storste) Then storste = tabellMedTellinger(i) plassenTilStorste = i End If
NextMsgBox(“Storste verdi er: “ & storste & “ Nummer: ” & plassenTilStorste)
Oppgave: Beregne gjennomsnitt
Modifiser koden foran slik at den beregner gjennomsnitt
Bokstaver og konvertering (side 315)
Gjør om til STORE bokstaver:setning = (TextBox1.Text).ToUpper
Til et tall mellom 0 og 25 (uten æ, ø, å): index = Asc(bokstav) – 65
Til en ASCII-verdi:bokstav = Chr(i + 65)
Frekvenstabell for bokstaver (side 315)Dim bokstavTellinger(25) 'kun Engelske
Dim index As Integer Dim setning, bokstav As String Dim bokstavTellinger(25) As Integer setning = (txtSetning.Text).ToUpper
For letterNum As Integer = 1 To setning.Length bokstav = setning.Substring(letterNum - 1, 1) If (bokstav >= "A") And (bokstav <= "Z") Then index = Asc(bokstav) - 65 bokstavTellinger(index) += 1 End If Next
lstTellinger.Items.Clear() For i As Integer = 0 To 25 bokstav = Chr(i + 65) If bokstavTellinger(i) > 0 Then lstTellinger.Items.Add(bokstav & " " & bokstavTellinger(i)) End If Next End Sub
Problemer med Æ, Ø og Å
Prøv: MsgBox("Æ: " & Asc("Æ")) ’ gir 198 MsgBox("Ø: " & Asc("Ø")) ’gir 216 MsgBox("Å: " & Asc("Å")) ’gir 197
Dette gir for høyt tall for index:index = Asc(bokstav) – 65bokstavTeller(index) += 1
Æ, Ø og Å må behandles separat.
Private Sub btnFrekvenstab_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFrekvenstab.Click Dim index As Integer Dim setning, bokstav As String Dim bokstavTeller(28) As Integer ’ det er totalt 29 bokstaver inkl æ, ø og å
setning = (txtSetning.Text).ToUpper
For letterNum As Integer = 1 To setning.Length bokstav = setning.Substring(letterNum - 1, 1) If (bokstav >= "A") And (bokstav <= "Z") Then index = Asc(bokstav) - 65 ' ASCII value of A is 65 bokstavTeller(index) += 1 ElseIf (bokstav = "Æ") Then bokstavTeller(26) += 1 ElseIf (bokstav = "Ø") Then bokstavTeller(27) += 1 ElseIf (bokstav = "Å") Then bokstavTeller(28) += 1 End If Next lstFrekvensTabell.Items.Clear() For i As Integer = 0 To 25 bokstav = Chr(i + 65) If bokstavTeller(i) > 0 Then lstFrekvensTabell.Items.Add(bokstav & " " & bokstavTeller(i)) End If Next If bokstavTeller(26) > 0 Then lstFrekvensTabell.Items.Add("Æ " & bokstavTeller(26)) End If If bokstavTeller(27) > 0 Then lstFrekvensTabell.Items.Add("Ø " & bokstavTeller(27)) End If If bokstavTeller(28) > 0 Then lstFrekvensTabell.Items.Add("Å " & bokstavTeller(28)) End If
End Sub
Frekvenstabell
• Lag en frekvenstabell som viser hvor mange tellinger det er i intervallene:– Mindre enn 5 tellinger– Mellom 5 og 10 tellinger– Mellom 10 og 15 tellinger– Mellom 15 og 20 tellinger– Over 20 tellinger
Prinsipp for kode
Dim FrekvensTabell(5) As Integer
If (tabellMedTellinger(i) < 5) Then
FrekvensTabell(1) = FrekvensTabell(1) + 1
ElseIf (tabellMedTellinger(i) >= 5) or (tabellMedTellinger(i) < 10) Then
FrekvensTabell(2) = FrekvensTabell(2) + 1
’osv for alle intervallene
End If
stasjon-og-antallBiler.txt
Kleive13Nordbyen45Bjørset12Kvam34Fuglset89Sentrum96
Eksempel: stasjonsnavn og tellinger
• 5 tellestasjoner teller antall biler som passerer på en time
• På filen stasjon-og-antallBiler.txt er det lagret stasjonsnavn og tellinger for hver stasjon
• Du skal:– beregne gjennomsnittlig antall biler for alle stasjonene
– finne minste antall tellinger på en stasjon hvilken stasjon det er.
– finne største antall tellinger på en stasjon hvilken stasjon det er.
– Lage en frekvenstabell som viser hvor mange ...
Dim sr As IO.StreamReader
sr = IO.File.OpenText(“stasjon-og-antallBiler.txt”)
Do While (sr.peek() <> -1)
stasjon = sr.ReadLine
antallBilerPrStasjon = sr.ReadLine
sum = sum + antallBilerPrStasjon
antallStasjoner = antallStasjoner + 1
Loop
gjennomsnitt = sum / antallStasjoner
Oppgaver
• Finne minste og største antall tellinger og hvilke nummer dette var.
• Dessuten skal du lage en frekvenstabell som viser hvor mange tellinger det er i ulike intervall– Mindre enn 20 tellinger– Mellom 20 og 40 tellinger– Mellom 40 og 60 tellinger– Mellom 60 og 80 tellinger– Over 80 tellinger
Finne minste
Dim minste As Integer = 1000 sr = IO.File.OpenText("c:\stasjon-og-antallBiler.txt") Do While sr.Peek() <> -1 stasjon = sr.ReadLine antallBilerPrStasjon = sr.ReadLine If antallBilerPrStasjon < minste Then minste = antallBilerPrStasjon End If
Loop sr.Close()
MsgBox(”Minste verdi er: ” & minste)
134512010589564567459634123445236745347489134982312632342124534234334232767562817125689336353812
antallBiler.txt