IBE151: Løsningsforslag til eksamen, 2013

Submitted by lroedal on Mon, 12/11/2017 - 00:44

Legger ved mine løsningsforslag til noen av oppgavene fra eksamen i 2013. Dette kan kanskje være nyttig for dere som tar konte-eksamen?

Oppgave B1 finner dere her.

  1. 'Denne hører til A2, men egne typer skal ligge øverst i koden
  2. Private Type utgift
  3. utgiftspost As Long
  4. sum As Double
  5. End Type
  6.  
  7. 'En tekstfil med navn utgiftsposter.txt inneholder nummer for en utgiftspost (et positivt tall) og et sett av utgiftsverdier (negative tall) som hører til denne posten. En utgiftspost kan f.eks være bilutgifter, en annen vedlikehold av hus.
  8.  
  9. 'Oppgave A1)
  10. 'Lag et program som summerer opp alle utgiftsverdiene (alle de negative tallene i tekstfilen) og skriver summen ut i en meldingsboks.
  11. Private Sub btnsummer_Click()
  12. Dim fnr As Integer
  13. Dim fil, linje As String
  14. Dim tall, sum As Double
  15.  
  16. fil = "utgiftsposter.txt" 'navnet på filen, ligger i samme mappe som databasen
  17. fnr = FreeFile() 'Henter inn et ledig filnr
  18.  
  19. Open fil For Input As #fnr
  20. While Not EOF(fnr) 'looper så lenge filen ikke når slutten
  21. Line Input #fnr, linje 'sender nåværende linje som leses til variabelen "linje"
  22. tall = CDbl(linje) 'konverterer linje til et tall
  23.  
  24. If tall < 0 Then 'om tallet er lavere enn null, summeres det
  25. sum = sum + tall
  26. End If
  27. Wend
  28. '>>>>>
  29. Me.txtSum.Value = sum 'summen legges i en tekstboks.
  30. End Sub
  31.  
  32.  
  33. 'Oppgave A2)
  34. 'Lag et program som summerer opp utgiftsverdiene for hver utgiftspost og lagrer dette i en Access-tabell der første felt er nummer på utgiftspost (nr) og andre felt summen av utgiftsverdiene for posten (sum)
  35. 'Summeringen skal utføres under innlesing fra tekstfilen (en kan altså ikke flytte alt over til en Access-tabell og så summere)
  36.  
  37. Private Sub Command4_Click()
  38. Dim fnr, i As Integer
  39. Dim fil, linje As String
  40. Dim tall As Double
  41. Dim utgifter() As utgift
  42. Dim stdset As DAO.Recordset
  43.  
  44. Set stdset = CurrentDb.OpenRecordset("utgifter") 'opprettet en tabell kalt "utgifter"
  45. i = 0
  46.  
  47. fil = "utgiftsposter.txt" 'navnet på filen, ligger i samme mappe som databasen
  48. fnr = FreeFile() 'Henter inn et ledig filnr
  49.  
  50. Open fil For Input As #fnr
  51. While Not EOF(fnr) 'looper så lenge filen ikke når slutten
  52. Line Input #fnr, linje 'sender nåværende linje som leses til variabelen "linje"
  53. tall = CDbl(linje) 'konverterer linje til et tall
  54.  
  55. If tall > 0 Then 'om tallet er høyere enn null, er det en ny utgiftspost
  56. i = i + 1 'viktig å øke denne først
  57. ReDim Preserve utgifter(1 To i) 'ved å starte på 1 fremfor null, blir det ingen tom plass på slutten av arrayet
  58. utgifter(i).utgiftspost = tall 'legger utgiftspostkoden i arrayet
  59. ElseIf tall < 0 Then 'er det lavere enn null, er det en utgift
  60. utgifter(i).sum = utgifter(i).sum + tall 'summerer utgifter
  61. End If
  62. Wend
  63. '>>>>>
  64. For i = LBound(utgifter) To UBound(utgifter) 'lbound finner laveste plassering i arrayet, ubound finner den høyeste
  65. stdset.AddNew 'registrerer til tabellen
  66. stdset("utgiftspost").Value = utgifter(i).utgiftspost
  67. stdset("sum").Value = utgifter(i).sum
  68. stdset.Update
  69. Next i
  70.  
  71. End Sub
  72. 'Når "Vis Resultater" trykkes, skal en telle opp for det aktuelle laget (valgt ved cmbLag)
  73. 'Antall mål scoret, antall mål sluppet inn, antall seire, antall uavgjort, antall tap og antall samlede poeng
  74. 'Lag programmet som gjør dette. Du trenger ikke skrive ut verdiene, det er nok at du kan se variablene de er talt opp i.
  75.  
  76. 'OppgaveB2)
  77. Private Sub comVisResultater_Click()
  78. Dim valgtLag, resultat, strOutput As String
  79. Dim stdset As DAO.Recordset
  80. Dim antMål, antMålSluppetInn, antSeier, antUavgjort, antTap, antPoeng As Long
  81.  
  82. Set stdset = CurrentDb.OpenRecordset("resultater")
  83. valgtLag = Me.cmbLag.Value
  84.  
  85. stdset.MoveFirst
  86. Do Until stdset.EOF
  87. If valgtLag = stdset("Hjemmelag").Value Then
  88. antMål = antMål + stdset("Målhjemme").Value
  89. antMålSluppetInn = antMålSluppetInn + stdset("MålBorte").Value
  90.  
  91. resultat = HUB(antMål, antMålSluppetInn)
  92.  
  93. Select Case resultat
  94. Case "H"
  95. antSeier = antSeier + 1
  96. antPoeng = antPoeng + 3
  97. Case "B"
  98. antTap = antTap + 1
  99. Case "U"
  100. antUavgjort = antUavgjort + 1
  101. antPoeng = antPoeng + 1
  102. End Select
  103.  
  104. ElseIf valgtLag = stdset("Bortelag").Value Then
  105. antMål = antMål + stdset("Målborte").Value
  106. antMålSluppetInn = antMålSluppetInn + stdset("MålHjemme").Value
  107.  
  108. resultat = HUB(antMålSluppetInn, antMål)
  109.  
  110. Select Case resultat
  111. Case "B"
  112. antSeier = antSeier + 1
  113. antPoeng = antPoeng + 3
  114. Case "H"
  115. antTap = antTap + 1
  116. Case "U"
  117. antUavgjort = antUavgjort + 1
  118. antPoeng = antPoeng + 1
  119. End Select
  120. End If
  121. stdset.MoveNext
  122. Loop
  123.  
  124. strOutput = "Du valgte " & valgtLag & ". Denne sesongen scoret de " & antMål & " mål og de slapp inn " & _
  125. antMålSluppetInn & " mål. De fikk totalt " & antSeier & " seiere, " & antTap & " tap og " & antUavgjort & _
  126. " uavgjorte kamper. Den totale poengsummen deres ble " & antPoeng & " poeng."
  127. End Sub
  128. ''oppgave b3)
  129.  
  130. 'lag en funksjon HUB som tar inn et kampresultat i to parametre, mål til hjemmelaget og mål til bortelaget. Ut fra dette skal funksjonen retunere H for hjemmesier, U for uavgjort og B for borteseier
  131.  
  132. Function HUB(hjemmemal As Long, bortemal As Long) As String
  133. If hjemmemal > bortemal Then
  134. HUB = "H"
  135. ElseIf hjemmemal < bortemal Then
  136. HUB = "B"
  137. Else: HUB = "U"
  138. End If
  139. End Function
  140. 'Oppgave B4
  141. Type kamp
  142. dato As Date
  143. hjemmelag As String
  144. bortelag As String
  145. hjemmemal As Long
  146. bortemal As Long
  147. resultat As String
  148. End Type
  149.  
  150.  
  151. Sub lagrekamper()
  152. Dim kamper() As kamp
  153. Dim stdset As DAo.Recordset
  154. Set stdset = CurrentDb.OpenRecordset("resultater")
  155. i = 0
  156.  
  157. stdset.MoveFirst
  158. Do Until stdset.EOF
  159. i = i + 1
  160. ReDim Preserve kamper(1 To i)
  161. kamper(i).dato = stdset("dato").Value
  162. kamper(i).hjemmelag = stdset("hjemmelag").Value
  163. kamper(i).bortelag = stdset("bortelag").Value
  164. kamper(i).hjemmemal = stdset("MålHjemme").Value
  165. kamper(i).bortemal = stdset("MålBorte").Value
  166. kamper(i).resultat = HUB(stdset("MålHjemme").Value, stdset("MålBorte").Value)
  167. stdset.MoveNext
  168. Loop
  169. End sub
  170. 'Oppgave C1
  171. 'Gi en feilmelding (i en meldingsboks) om en D: eller R: mangler tilhørende semikolon. Det kan f.eks.
  172. 'skje ved at det kommer en ny kode (D:, R: før semikolonet, eller at det mangler et semikolon i tekstsen.
  173. 'Du kan sjekke for dette når brukeren trykker Enter i tekstboksen
  174. Private Sub Command9_Click()
  175. Dim i, j As Long
  176. Dim tekst As String
  177. Dim funnet As Boolean
  178. tekst = txtJournal.Value
  179.  
  180. For i = 1 To Len(tekst)
  181. funnet = False
  182. If Mid(tekst, i, 2) = "D:" Or Mid(tekst, i, 2) = "R:" Then
  183. For j = i + 1 To Len(tekst)
  184. If Mid(tekst, j, 1) = ";" Then
  185. i = j
  186. funnet = True
  187. Exit For
  188.  
  189. ElseIf Mid(tekst, j, 2) = "D:" Or Mid(tekst, j, 2) = "R:" Then
  190. MsgBox ("Du har glemt en semikolon (;)")
  191. Exit Sub
  192. End If
  193. Next j
  194. If funnet = False Then
  195. MsgBox ("Du har glemt en semikolon (;)")
  196. Exit Sub
  197. End If
  198. End If
  199. Next i
  200. End Sub