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
|