I denna laboration ska du göra en applikation
som slumpar fram en lotto- eller måltipsrad och en applikation som
söker efter tecken i en text. Efter laborationen ska du:
- kunna skapa slumptal
- känna till och kunna använda några styrstrukturer
- kunna använda kontroller av typen Frame, OptionButton
och ListBox
- lunna söka i strängar (texter)
- ha lärt dig fler inbyggda funktioner; bland annat Int(…),
Rnd och Mid(…)
- kunna använda MsgBox
- Skapa följande kontroller och formulär

I tipsprogrammet kan du välja spelform och klicka på knapparna
och se vad som händer. Första och andra knappen har samma funktion,
men sedan händer det olika saker. Du bör observera en del brister
som till exempell osorterade tal och dubbletter. Den fjärde knappen
motsvarar en av extrauppgifterna.
Slumptal
De flesta programmeringsspråk har någon typ av inbyggd
slumptalsfunktion. I Visual Basic heter funktionen Rnd och ger
tillbaka ett decimaltal mellan 0 och 1. För att skapa ett heltal
kan du använda följande kodsnutt:
Dim slump As Integer
slump = Int(Rnd * högsta) + lägsta
För att det ska fungera måste du byta ut högsta och lägsta
mot det största respektive minsta tal du vill ha. 28 respektive 1
skulle ge ett tal som matchar ett måltipsvärde. Int(…)
gör om det som står inom parentesen till ett heltal.
Namngivning
Nu börjar du skapa fler och fler kontroller på formulären.
Innan du börjar skriva koden är det bra att ändra deras
namn (Name) för att lättare förstå funktionerna
och meningen med de olika kontrollerna.
Tipsprogram
- Skapa ett nytt projekt i en ny mapp (välj lämpliga namn)
- Lägg till en Frame och välj lämplig text
- Placera två stycken OptionButtons i ovanstående
Frame
- Namnge dem och skriv lämplig text
- Provkör och se till att endast en i taget kan vara ifylld
- Använd ListBox för att skapa rutan där numren
ska presenteras och hitta på ett bra namn
- Skapa en knapp och skriv in följande kod för knappens händelseprocedur
Click (Förmodligen behöver du byta vissa namn här
och där)
Private Sub cmdSlump1_Click()
'Rensa listan före varje
ny slumpning
lst1.Clear
'Kontrollera spelform
If OptLotto.Value = True Then
Dim lottoSiffra
As Integer 'Det slumpade talet
'Slumpa
ett nummer från 1 till 35 och lägg de i listan
lottoSiffra
= Int(Rnd * 35) + 1
lst1.AddItem
Str(lottoSiffra)
Else
Dim måltipsSiffra
As Integer 'Det slumpade talet
'Slumpa
ett nummer från 1 till 28 och lägg de i listan
måltipsSiffra
= Int(Rnd * 28) + 1
lst1.AddItem
Str(måltipsSiffra)
End If
End Sub
- Provkör och se vad som händer när du byter spelform.
Koden ovan har en styrstruktur av typen if…then…else…end if.
I koden används den för att känna
av vilken spelform som används och på så sätt får
du olika stora slumptal beroende på vilken spelform du har valt.
Som du ser används OptionButton-egenskapen Value
för att avgöra om användaren har valt Lotto eller
inte. AddItem är en metod som används för att
lägga till rader i ListBox-ar.
- Utöka koden så att lottoalternativet får sju siffror
- Måltipset består av åtta siffror
- Kopiera lämpliga rader och klistra in lämpligt antal gånger
Slumptal
Har du upptäckt att varje gång du startar programmet
får du samma rad. Det beror på att slumptalsfunktionen alltid
ger samma talföljd när programmet startas. Talföljden bestäms
av hur du initierar slumptalsfunktionen och hittills har du (antagligen)
inte initierat den alls. Ett bra sätt, om du vill ha olika talföljder,
är att anropa funktionen Randomize
när programet startas.
- Dubbelklicka på formuläret
Du kommer till händelseproceduren som anropas
när formuläret laddas: Form_Load
- Skriv in Randomize i den
- Starta programmet och klicka på knappen igen
Fungerar det som du vill ha det nu?
Repetition
Du kopierade säkert en massa rader i någon av uppgifterna
ovan. Tänk om det gick att utföra samma sak ett visst antal
gånger istället. Det finns det naturligtvis och det är
en styrstruktur som kallas för repetition. Lämpligast
här är att använda en for…next-struktur.
Studera koden nedan. Du kan säkert använda
något som liknar den.
Dim i As Integer
'Håller reda på hur många gånger programmet ska
köras
For i = 1 To 8
'Låt 'i' vara först 1, sedan 2, sedan 3, osv till 8
Dim siffra As Integer
siffra = Int(Rnd * 28) + 1
'Slumpa från 1 till 28
lst2.AddItem Str(siffra)
'Lägg till talet i listan
Next i
- Lös samma uppgift som ovan men med en for…next-struktur
istället för sju-åtta likadana kopieringar
- Provkör och kontrollera att det fungerar
Lösning
Lab 10 |