I denna laboration ska du lära dig att hantera ett användbart
”verktyg” som ingår i Visual Basic: Debuggern. De flesta
programmeringsmiljöer innehåller en debugger och i VB är
den enkel att använda.
Du ska under laborationen studera ett program som utför så
kallad bubbelsortering på ett antal tal i en vektor. Här kommer
debuggern väl till pass för att förstå hur ”bubbel”-algoritmen
går till. Du kommer också lära dig att skapa menyer.
Efter laborationen ska du kunna/känna till:
- Sätta in brytpunkter i koden
- Köra program till brytpunkten
-
Hur man enkelstegar och fortsätta köra programmet
- Se värden på variabler
- Använda fönstren
”Immediate Window” och ”Watch Window”
- Kunna skapa menyer till program
- Kunna sortera personerna i personregister

Option Explicit
Dim vektor() As Integer 'Håller reda på talen
Dim antal As Integer 'Antal tal som ska skapas och sorteras
Dim antalByten As Integer 'Hur många byten som har gjorts
Private Sub cmdSkapa_Click()
'Läs av hur många som ska skapas
antal = Val(cmbAntal.Text)
'Reservera minne för vektorn
ReDim vektor(antal)
'Generera slumptalen från 0 till 9
Dim i As Integer
For i = 1 To antal
vektor(i) = Int(Rnd * 9) + 1
Next i
'Rensa listan
lstResultat.Clear
'Nollställ antal byten
antalByten = 0
'Visa de osorterade talen
Call Visa
End Sub
Private Sub cmdSortera_Click()
'Genomför bubbelsortering
'Loopvariabler
Dim i As Integer
'Håller reda på om någon förändring skett
Dim bytt As Boolean
'Jämför tal så länge som...
Do
bytt = False
For i = 1 To antal - 1
If vektor(i) > vektor(i + 1) Then
Dim tmp As Integer
tmp = vektor(i)
vektor(i) = vektor(i + 1)
vektor(i + 1) = tmp
bytt = True
antalByten = antalByten + 1
Call Visa
End If
Next i
Loop While bytt '...några tal byter plats
End Sub
Private Sub Visa()
'Skapa en sträng med alla talen i vektorn
Dim talen As String
Dim i As Integer
For i = 1 To antal
talen = talen + " " + Str(vektor(i))
Next i
'Lägg till vilken "flytt" det är
talen = talen + " (" + Str(antalByten) + " )"
'Lägg till strängen med tal i listan
lstResultat.AddItem talen
'Visa antal byten
lblAntalByten = Str(antalByten)
End Sub
Private Sub mnu10_Click()
cmbAntal.Text = "10"
Call cmdSkapa_Click
End Sub
Private Sub mnu5_Click()
cmbAntal.Text = "5"
Call cmdSkapa_Click
End Sub
Private Sub mnu50_Click()
cmbAntal.Text = "50"
Call cmdSkapa_Click
End Sub
Private Sub mnuAvsluta_Click()
End
End Sub
Private Sub mnuSorteraTalen_Click()
Call cmdSortera_Click
End Sub
En vanlig ”uppgift” för datorer och det har
forskats en hel del på hur sortering ska göras effektivt. Det
finns en mängd algoritmer som är mer eller mindre effektiva.
Programmet visar hur ”bubbel”-sortering går till. Bubbelsortering
är inte den effektivaste men naturligtvis fungerar den och är
relativt lätt att förstå.
Algoritmen går till så att tal jämförs
parvis från första till sista talet. Om två tal står
i fel ordning, byter man plats på dem. Algoritmen börjar sedan
om igen och håller på till dess inga byten har gjorts. Då
är sorteringen klar. I laborations program jämförs tal,
men det går naturligtvis att sortera det mesta, till exempel strängar
som innehåller efternamn.
-
Starta programmet
- Välj i kombinationsrutan hur många tal som ska skapas
- Tryck på Skapa talen
Ett antal tal mellan 1 och 9 visas i listrutan.
- Tryck på Sortera
Talen sorteras efter algoritmen och programmet skriver
ut talen i listrutan efter varje byte. När inga byten längre
behöver göras är sorteringen klar och antalet byten visas.
- Skapa 50 tal och sortera dessa
- ”Skrolla” sedan listboxen uppåt och neråt och se hur de
stora talen ”bubblar” åt höger
Brytpunkter
- Öppna projektet och leta reda på händelseproceduren
cmdSkapa_Click()
-
Ställ markören på raden med koden:
vektor(i) = Int(Rnd * 9) + 1
- Välj
Debug | Toggle Breakpoint
Raden blir röd
och får en röd cirkel till vänster och du har skapat en
brytpunkt.
Det
finns andra sätt att skapa och ta bort brytpunkter.
- Klicka på den röda cirkeln och brytpunkten är borta
- Klicka på samma ställe igen och den är där igen
- Tryck på [F9] och den försvinner
- Se till att du har en brytpunkt på ovan angivna rad och starta
programmet
- Klicka på Skapa talen
Programmet
utför alla instruktioner fram till den där brytpunkten är
och stannar sedan och väntar.
Enkelstega
- Välj Debug | Step Over
eller
- Håll [Shift] nere och tryck sedan på [F8]
Programmet utför en kodrad och väntar på att du ska göra
något mer.
- Enkelstega tre gånger till
Studera variabler
- Ställ muspekaren över variabeln i
och se vad som händer
Du bör få fram en liten ruta som talar om att i har värdet
3.
- Kontrollera vad variabeln antal har för värde
Den bör vara 5.
- Ställ muspekaren över variabeln vektor
Nu visas det värde som vektorn har på positionen i. Den bör
vara 6.
Immediate Window
Det är inte alltid du har just den variabel du vill studera
så enkelt åtkomlig. I såna fall kan du behöva använda
fönstret Immediate.
- Öppna det genom View| Immediate Window
- Skriv in följande och tryck [Enter]
print vektor(2)
Nu visas innehållet i vektorn på position 2.
Watch Window
Ibland vill man följa en variabels förändring
under tiden man enkelstegar programmet. Då är Watch Window
utmärkt att använda. För att det ska fungera måste
du ”tala om” för debuggern vilka variabler som du vill studera.
- Stoppa programmet och ta bort alla brytpunkter via Debug
| Clear All Breakpoints
- Leta rada på händelseproceduren cmdSortera_Click()
- Öppna fönstret Watch genom View | Watch Window
Dags att lägga till den variabel du vill studera.
- Markera vektor(i) och högerklicka på markeringen
- Välj Add Watch… och klicka sedan OK
Nu dyker variabeln upp i fönstret.
- Gör på samma sätt med vektor(i+1)
- Lägg också till variabeln i
- Sätt in en brytpunkt på raden med koden:
If vektor(i) > vektor(i + 1) Then
- Starta programmet
- Skapa talen och tryck Sortera
Programmet stannar på raden med brytpunkten och du kan se variablernas
värden i fönstret Watch.
- Enkelstega sakta fyra steg och se samtidigt hur de två värdena
byter plats i vektorn
- Fortsätta att köra programmet
- Tryck nu på knappen Play igen
Programmet fortsätter och i det här fallet tills den stöter
på samma brytpunkt. Om det inte finns någon brytpunkt fortsätter
den tills programmet är slut eller tills det krävs någon
inmatning från användaren.
- Enkelstega igen och se hur värdena byter plats
Observera att du samtidigt som du debuggar kan se programmets utmatning.
- Växla till programmet med [Alt] + [Tabb]
Step Over/Step Into
- Stoppa programmet men behåll brytpunkten
- Starta, skapa talen och klicka på Sortera
- Enkelstega till dess raden med följande kod blir markerad (gul):
Call Visa
Nu har du två (minst) möjligheter. Du kan välja att enkelstega
vidare i den procedur du är i eller ”gå in i” proceduren Visa.
- Välj Debug | Step Into och enkelstega
i proceduren Visa
eller
- Välj Debug | Step Over utförs proceduren
Visa, men du enkelstegar fortfarande i proceduren cmdSortera
Menyer
För att göra program mera lättanvända brukar man se
till att det finns menyer. Där grupperar man de kommandon som hör
ihop under olika menyer. Du ska nu lära dig skapa de menyer som du
ser i programmet bubbel.exe.
- Se till att formuläret är öppet
- Starta verktyget ”Menu Editor”
Menyer liksom knappar har egenskaperna Caption
(det som ska synas) och Name (referens till kontrollen). När
du matar in Caption kan du på lämpligt ställe
skriva ett ”&” och får på så sätt en snabbfunktion
till menyalternativet. Du kan också ge alternativet en ”shortcut”
(jfr med Visual Basic:s Run | Start
som har [F5] som ”shortcut”).
- Skriv in &Arkiv som Caption och mnuArkiv
som Name
- Klicka på Next och sedan på högerpilen
- Skriv &Avsluta som Caption
och mnuAvsluta som Name
- Välj Ctrl-X som Shortcut och klicka
sedan på OK
- Välj Arkiv | Avsluta i formuläret och
hamnar i händelseproceduren mnuAvsluta_Click()
- Skriv End i proceduren
- Starta sedan programmet och prova
- Prova också Ctrl X
- Skapa nu samma menyer som finns i bubbel.exe
Observera att händelseproceduren Sortera
| Sortera bara behöver anropa den redan skrivna händelseproceduren
cmdSortera_Click(), vilken utför jobbet. Du behöver
ska inte kopiera koden.
När du gör menyn som skapar talen finns också själva
skapandet redan gjort. Däremot måste du se till så att
kombinationsrutan får rätt värde för respektive menyval.
Fler uppgifter:
- Modifiera programmet så att talen sorteras i omvänd
ordning
- Ändra så att de tal som skapas ligger mellan 1 och 99
Lösning
Lab 14 - 1
Lösning
Lab 14 - 2
|