Visual Basic - Lösning Lab 12

Så här ser koden ut:

Option Explicit 'Tvunget att deklarera
Dim frekvens(5) As Long 'Håll reda på antalet 1:or till 6:or
Dim antalKast As Long 'Håll reda på antalet kast

Private Sub Update()

Dim i As Integer 'Loop-variabel
Dim andel As Single 'Andel till exmempl 3:or av totala antalet kast
Dim höjd As Integer

Dim höjdFaktor As Long
höjdFaktor = 200

'Anpassad skala?
If chckScale.Value = 1 And antalKast > 0 Then

'Ta reda på högsta stapeln
Dim högstaAndel As Single
högstaAndel = 0
For i = 0 To 5
If frekvens(i) / antalKast > högstaAndel Then
högstaAndel = frekvens(i) / antalKast
End If
Next i


'Räkna ut maximal skalning
höjdFaktor = LineX.Y1 / högstaAndel

End If

'Färgläggning?
If chckColor.Value = 1 Then

'Ta reda på den högsta
Dim högstaFrekvens As Long
högstaFrekvens = 0
For i = 0 To 5

If frekvens(i) > högstaFrekvens Then

högstaFrekvens = frekvens(i)

End If

Next i

'Ta reda på den lägsta
Dim lägstaFrekvens As Long
lägstaFrekvens = högstaFrekvens
For i = 0 To 5

If frekvens(i) < lägstaFrekvens Then

lägstaFrekvens = frekvens(i)

End If

Next i

'Ange färger
For i = 0 To 5

'Ange först standardfärt
shpFrekvens(i).FillColor = RGB(0, 0, 0)

'Kolla om det är den (eller en av de) högsta
If frekvens(i) = lägstaFrekvens Then

shpFrekvens(i).FillColor = RGB(255, 0, 0)

End If

'Kolla om det är den (eller en av de) lägsta
If frekvens(i) = högstaFrekvens Then

shpFrekvens(i).FillColor = RGB(0, 255, 0)

End If

Next i

Else

'Färglägg i en och samma färg
For i = 0 To 5

shpFrekvens(i).FillColor = 0

Next i

End If

'Rita om staplarna
For i = 0 To 5

'Räkna ut höjden
If antalKast = 0 Then

'Om inga kast är gjorda ska höjden vara noll
höjd = 0

Else

andel = frekvens(i) / antalKast
höjd = andel * höjdFaktor

End If

shpFrekvens(i).Top = LineX.Y1 - höjd '+ LineX.BorderWidth - höjd
shpFrekvens(i).Height = höjd
Next i

'Skriv det nya antalen i textrutorna
For i = 0 To 5
txtFrekvens(i).Text = Str(frekvens(i)) 'Ta värdet från 'frekvens'-vektorn
Next i

'Skriv det nya andelaran i procent
For i = 0 To 5
If antalKast = 0 Then
txtAndel(i).Text = ""
Else
txtAndel(i).Text = Str(frekvens(i) / antalKast * 100)
End If
Next i

'Skriv totala antalet kast
txtTotal.Text = Str(antalKast)

End Sub

Private Sub chckColor_Click()

Call Update

End Sub

Private Sub chckMany_Click()

If chckMany.Value = 1 Then
cmbAntal.Visible = True
Label1.Visible = True
Else
cmbAntal.Visible = False
cmbAntal.Text = "1"
Label1.Visible = False
End If

End Sub

Private Sub chckProcent_Click()

Dim i As Integer
For i = 0 To 5
If chckProcent.Value = 1 Then
txtAndel(i).Visible = True
Else
txtAndel(i).Visible = False
End If
Next i
If chckProcent.Value = 1 Then
lblAndel.Visible = True
Else
lblAndel.Visible = False
End If

End Sub

Private Sub chckScale_Click()

Call Update

End Sub

Private Sub chckStapel_Click()

Dim i As Integer
For i = 0 To 5
If chckStapel.Value = 1 Then
shpFrekvens(i).Visible = True
Else
shpFrekvens(i).Visible = False
End If
Next i

If chckStapel.Value = 1 Then
chckScale.Visible = True
chckColor.Visible = True
Else
chckScale.Visible = False
chckColor.Visible = False
End If

End Sub

Private Sub cmdClr_Click()

Dim i As Integer 'Loop-variabel

'Nollställ 'frekvens'-vektorn
For i = 0 To 5

frekvens(i) = 0

Next i

'Nollställ antalet kast
antalKast = 0

'Rita om
Call Update

End Sub

Private Sub cmdSlump_Click()

MousePointer = 11

Dim i As Long 'Loop-variabel
Dim n As Long 'Antal kast som ska göras

n = Val(cmbAntal.Text)
For i = 1 To n

'Skapa ett slumptal: 1, 2, 3, 4, 5 eller 6
Dim slump As Integer
slump = Int(Rnd * 6 + 1)

'Öka med 1 just den frekvens som 'slump' blev
frekvens(slump - 1) = frekvens(slump - 1) + 1

Next i

'Öka antalet kast
antalKast = antalKast + n

'Rita om
Call Update

MousePointer = 0

End Sub

Private Sub Form_Load()

'Nollställ genom att anropa 'Nollställ'-knappen
Call cmdClr_Click

End Sub