Visual Basic - Lab 10

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
  1. 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

  1. Skapa ett nytt projekt i en ny mapp (välj lämpliga namn)

  2. Lägg till en Frame och välj lämplig text

  3. Placera två stycken OptionButtons i ovanstående Frame

  4. Namnge dem och skriv lämplig text

  5. Provkör och se till att endast en i taget kan vara ifylld

  6. Använd ListBox för att skapa rutan där numren ska presenteras och hitta på ett bra namn

  7. 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

  1. 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.

  1. Utöka koden så att lottoalternativet får sju siffror

  2. Måltipset består av åtta siffror

  3. 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.

  1. Dubbelklicka på formuläret

Du kommer till händelseproceduren som anropas när formuläret laddas: Form_Load

  1. Skriv in Randomize i den

  2. 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

  1. Lös samma uppgift som ovan men med en for…next-struktur istället för sju-åtta likadana kopieringar

  2. Provkör och kontrollera att det fungerar

Lösning Lab 10