tabeller – arrays lage frekvenstabell norske bokstaver

23
Tabeller – Arrays Lage frekvenstabell Norske Bokstaver

Upload: emmly

Post on 14-Jan-2016

45 views

Category:

Documents


0 download

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

TRANSCRIPT

Page 1: Tabeller – Arrays Lage frekvenstabell Norske Bokstaver

Tabeller – ArraysLage frekvenstabellNorske Bokstaver

Page 2: Tabeller – Arrays Lage frekvenstabell Norske 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

Page 3: Tabeller – Arrays Lage frekvenstabell Norske Bokstaver

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...

Page 4: Tabeller – Arrays Lage frekvenstabell Norske Bokstaver

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

Page 5: Tabeller – Arrays Lage frekvenstabell Norske Bokstaver

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)

Page 6: Tabeller – Arrays Lage frekvenstabell Norske Bokstaver

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

Page 7: Tabeller – Arrays Lage frekvenstabell Norske Bokstaver

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)

Page 8: Tabeller – Arrays Lage frekvenstabell Norske Bokstaver

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

Page 9: Tabeller – Arrays Lage frekvenstabell Norske Bokstaver

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

Page 10: Tabeller – Arrays Lage frekvenstabell Norske Bokstaver

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)

Page 11: Tabeller – Arrays Lage frekvenstabell Norske Bokstaver

Oppgave: Beregne gjennomsnitt

Modifiser koden foran slik at den beregner gjennomsnitt

Page 12: Tabeller – Arrays Lage frekvenstabell Norske Bokstaver

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)

Page 13: Tabeller – Arrays Lage frekvenstabell Norske Bokstaver

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

Page 14: Tabeller – Arrays Lage frekvenstabell Norske Bokstaver

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.

Page 15: Tabeller – Arrays Lage frekvenstabell Norske Bokstaver

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

Page 16: Tabeller – Arrays Lage frekvenstabell Norske Bokstaver

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

Page 17: Tabeller – Arrays Lage frekvenstabell Norske Bokstaver

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

Page 18: Tabeller – Arrays Lage frekvenstabell Norske Bokstaver

stasjon-og-antallBiler.txt

Kleive13Nordbyen45Bjørset12Kvam34Fuglset89Sentrum96

Page 19: Tabeller – Arrays Lage frekvenstabell Norske Bokstaver

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 ...

Page 20: Tabeller – Arrays Lage frekvenstabell Norske Bokstaver

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

Page 21: Tabeller – Arrays Lage frekvenstabell Norske Bokstaver

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

Page 22: Tabeller – Arrays Lage frekvenstabell Norske Bokstaver

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)

Page 23: Tabeller – Arrays Lage frekvenstabell Norske Bokstaver

134512010589564567459634123445236745347489134982312632342124534234334232767562817125689336353812

antallBiler.txt