180 likes | 308 Views
INF150 Programmering mandag 25.9. MER OM: Sub-prosedyrer og sub-funksjoner Kap 4. INF150: Bratt kurve!. Første del: Basiskunnskaper Basiskunnskaper om bruk av Visual Studio og hvordan en kommer i gang med å lage program. Andre del: Grunnleggende programmeringsteknikker Variabler
E N D
INF150 Programmeringmandag 25.9 MER OM: Sub-prosedyrer og sub-funksjoner Kap 4
INF150: Bratt kurve! • Første del: Basiskunnskaper • Basiskunnskaper om bruk av Visual Studio og hvordan en kommer i gang med å lage program. • Andre del: Grunnleggende programmeringsteknikker • Variabler • Kontrollstrukturer (IF-THEN-ELSE) • Filer • Prosedyrer • Funksjoner • Løkker • Array - tabeller • Egendefinerte datatyper • Objekter • Tredje del: Problemløsning • Her vil vi stort sett bruke tiden på å løse programmeringsproblemer. Gitt et problem, hvordan går vi frem for å lage programmet som løser problemet. NÅ
Oppgave i forelesning: Beregne gjennomsnittshøyde • Navn og høyde til 3 personer ligger på en tekstfil • Ligner på øvelse 4 • Lager en tekstfil først • Notepad eller lag filen i programmet ditt med: Dim swAs IO.StreamWriter = IO.File.CreateText("navnoghoyde.txt") sw.WriteLine("Bjørn Jæger") sw.WriteLine("1,80") sw.WriteLine("Kai Olsen") sw.WriteLine("1,86") sw.WriteLine("Judith Molka-Danielsen") sw.WriteLine("1,68") sw.Close()
Program til en knapp Beregn: Les fra fil og beregn ... • Les navn og høyde fra tekstfil og LEGG I VARIABLER Private Sub btnBeregn_Click(...) Handles btnBeregn.Click Dim sr As IO.StreamReader = IO.File.OpenText("navnoghoyde.txt") Dim NavnPerson1, NavnPerson2, NavnPerson3 As String Dim HøydePerson1, HøydePerson2, HøydePerson3 As Double Dim Sum As Double Dim Gjennomsnitt As Double ' Det som leses fra fil legges i variabler NavnPerson1 = sr.ReadLine HøydePerson1 = CDbl(sr.ReadLine) NavnPerson2 = sr.ReadLine HøydePerson2 = CDbl(sr.ReadLine) NavnPerson3 = sr.ReadLine HøydePerson3 = CDbl(sr.ReadLine) sr.Close() Sum = HøydePerson1 + HøydePerson2 + HøydePerson3 ListBox1.Items.Add("Sum: " & CStr(Sum)) Gjennomsnitt = Sum / 3 ListBox1.Items.Add("Gjennomsnitt: " & CStr(Gjennomsnitt)) End Sub
Ser likheter med øvelse 4bruker filer og variabler • Leser valutakurser fra tekstfil • Må lage tekstfilen først • Notepad eller lag filen i programmet som foran • Leser valutakurser fra tekstfil og inn i ...VARIABLER
Bruker sub-prosedyrer og sub funksjon til å gjøre det samme • Knapp: BeregnGjennomsnittsHoyde • Anta at det finnes en tekstfil med data (Eventuelt: lag først en tekstfil med navn og høyde) • Les fra tekstfilen • Beregn gjennomsnittshøyde • Forslag til delprogrammer (sub-prosedyrere og sub-funksjoner)?
Forslag • Knapp: BeregnGjennomsnittsHoyde • LagFil() • LesFil() • beregnGjennsomsnittshøyde() • De to første er sub-prosedyrer • Den siste er sub-funksjon
LagFil() sub-procedure Sub LagFil() Dim sw As IO.StreamWriter = IO.File.CreateText("navnoghoyde.txt") sw.WriteLine("Bjørn Jæger") sw.WriteLine("1,80") sw.WriteLine("Kai Olsen") sw.WriteLine("1,86") sw.WriteLine("Judith Molka-Danielsen") sw.WriteLine("1,68") sw.Close() End Sub
LesFil() SubProsedure Sub LesFil() Dim sr As IO.StreamReader = IO.File.OpenText("navnoghoyde.txt") NavnPerson1 = sr.ReadLine HøydePerson1 = CDbl(sr.ReadLine) NavnPerson2 = sr.ReadLine HøydePerson2 = CDbl(sr.ReadLine) NavnPerson3 = sr.ReadLine HøydePerson3 = CDbl(sr.ReadLine) sr.Close() End Sub
beregnGjennomsnitt sub-funksjon Function beregnGjennomsnitt() As Double Dim Sum As Double Sum = HøydePerson1 + HøydePerson2 + HøydePerson3 Return Sum / 3 End Function
Få tak i verdiene • Verdiene som leses i LesFil dvs. navn og høyder må bli kjent for program som bruker LesFil() • Det vil si at variablene vi legger data i må kunne brukes av andre • Variabler her: • Dim NavnPerson1, NavnPerson2, NavnPerson3 As String • Dim HøydePerson1, HøydePerson2, HøydePerson3 As Double
Data inn/ut av del-programmer Flere metoder finnes: • Lage variabler som alle kjenner • Globale variabler som deklareres rett etter "Public Class Form1" • Sende data inn og ut til delprogrammer i parantesen bak navnet (senere)
Ser på metode 1 først: Lage variabler som alle kjenner Public Class Form1 ' Globale variabler lages/deklareres her Dim NavnPerson1, NavnPerson2, NavnPerson3 As String Dim HøydePerson1, HøydePerson2, HøydePerson3 As Double Sub LesFil() ' .... leser verdier inn i de globale variablene her NavnPerson1 = sr.ReadLine HøydePerson1 = CDbl(sr.ReadLine) '... End Sub Function beregnGjennomsnitt() As Double '... Bruker variablene her Sum = HøydePerson1 + HøydePerson2 + HøydePerson3 '... End Function
Program til knapp Beregn med kall av sub-programmer Private Sub btnBeregn_Click(...) Handles btnBeregn.Click Dim Gjennomsnitt As Double LagFil() LesFil() Gjennomsnitt = beregnGjennomsnitt() lstBox.Items.Add("Gjennomsnitt: " & CStr(Gjennomsnitt)) End Sub
Gjentagelser – løkkerdo loop • I programmer gjentas ofte kode mange ganger. F.eks: • Les inn mange linjer fra fil • Be om opplysninger fra bruker til de er korrekt • osv. • Til dette benyttes løkker • En logisk betingelse avgjør når programmet skal slutte å gjenta kode
Do Loops side 248 Syntaks: Do While condition Statements Loop Eksempel (i hendelsesprosedyre til knapp): Dim tall As Integer = 1 Do While tall <= 5 MsgBox("Tall: " & tall) tall = tall +1 'Hva skjer dersom denne ikke er med? Loop
SELECT CASE • For å velge hva som skal utføres benyttes ofte Select Case som alternativ til IF ... ELSE ... ENDIF • Select Case er beskrevet i boken s 218... • Vi kommer tilbake til denne senere
Neste forelesning Mandag 2. oktober 1215-1400 På rom B136