Matris

Variablers räckvidd och livslängd Dynamisk matris

Om vi har många variabler kan vi spara dessa i en matris. En matris är en variabel som kan rymma många värden och varje värde i matrisen har ett index. Man kan definiera endimensionella matriser. Till exempel:

Dim Tal(100) as Integer

Den första är en endimensionell matris med namnet Tal med plats för 101 olika variabler. En variabel i positionen Tal(0) en annan variabel i positionen Tal(1) och så vidare till positionen Tal(100). Tilldelning kan ske till exempel genom en slinga:

For i = 0 to 100
Tal(i) = i*2
Next i

Resultatet blir att i Tal(0) finns värdet 0, i Tal(1) ligger värdet 2 och så vidare till Tal(100) som har värdet 200.

En tvådimensionell matris kan till exempel deklareras som:

Dim Matris(3,12) As Integer

En slinga kan se ut så här:

For i = 0 to 3
   For j = 0 to 12
      Matris(i,j) = 3*i+2*j
   Next j
Next i

Först är i lika med noll och den inre slingan körs med j = 0 till j =12. Sedan blir i lika med ett och den inre slingan körs igen med värden på j mellan 0 och 12.

Detta blir en tabell med 4 kolumner och 13 rader. Det vill säga att man kan tilldela matrisen 13 olika värden i matrisen där position i=0: Matris(0,0)=0, Matris(0,1)=2, Matris(0,2)=4... Matris(0,12)=24. Sedan 13 värden i matrisens där position i=1: Matris(1,0)=3, Matris(1,1)=5, Matris(1,2)=7... Matris(1,12)=27 och så vidare.

En tredimensionell matris:

Dim Tal(10,20,15)

Det blir en matris med 11 positioner i första dimensionen, 21 i den andra och 16 i den tredje dimensionen. Dessa kan tilldelas med till exempel:

For i = 0 To 10
   For j = 0 To 20
      For k = 0 To 15
         Tal(i,j,k)=(i+j)*k
      Next k
   Next j
Next i

Resultatet blir alltså 10*20*15=3000 olika värden i den matrisen med till exempel position Tal(2,2,3)=12.

Det går också att tilldela en text till en matris, men då måste vi dimensionera med String:

Dim Namn(100) As String

Då kan vi skriva till exempel:

Namn(36) = TextBox1.Text

Matrisens trettiosjätte position får då det som står i textboxen.

Det går också att göra tvärtom, att tilldela en variabel eller något annat ett värde från en matris:

TextBox1.Text = Namn(12)

Textboxen får då det som finns i matrisens tolfte position.

En vektor kan till exempel användas för att sortera data efter stigande eller fallande värde. Gör en form med 5 Textboxar och en Button.

Programmet blir som nedan. Observera att jag inte har använt matrisens nollte position; det blir lättare att tänka då.

Dim vek(5) As Integer
Dim k, j, flip As Integer
vek(1) = Val(TextBox1.Text)
vek(2) = Val(TextBox2.Text)
vek(3) = Val(TextBox3.Text)
vek(4) = Val(TextBox4.Text)
vek(5) = Val(TextBox5.Text)

For k = 1 To 3
   For j = 1 To 4
   If vek(j) > vek(j + 1) Then
      flip = vek(j + 1)
      vek(j + 1) = vek(j)
      vek(j) = flip
   End If
   Next j
Next k
TextBox1.Text = vek(1)
TextBox2.Text = vek(2)
TextBox3.Text = vek(3)
TextBox4.Text = vek(4)
TextBox5.Text = vek(5)

Kör programmet och skriv in ett tal i varje Textbox. Klicka på knappen och talen är sorterade.

UBound

Antag att vi har en matris med 10 element:

Dim matris(9) As Integer

Antag vidare att vi vill loopa genom matrisen med en For To-sats:

For i=0 To 9

I stället för 9 kan vi skriva UBound(matris):

For i = 0 To UBound(matris)

Det innebär att loopen går till det övre värdet som matrisen har. Om vi nu inser att matrisen måste innehålla fler element, till exempel:

Dim matris(25) As Integer

behöver vi inte ändra i For To-satsen. UBound hittar att det nu finns 26 element och loopar därmed 26 gånger.

Variablers räckvidd och livslängd Dynamisk matris

SupportData.Net
©