Matrici (Vettori multidimensionali) definite
Introduzione
Una "Matrice" (o anche Vettore multidimensionale) è un insieme di numeri ordinati secondo righe e colonne di ordine m x n, tale da formare una tabella di elementi, ove m e n sono numeri interi e stabiliti. In particolare m è il numero delle righe e n il numero delle colonne.
Se m = n la Matrice viene definita: quadrata.
Un elemento della Matrice occupa la posizione individuata dall'intersezione tra la m-esima riga e la n-esima colonna della Matrice.
Se la Matrice è formata da una riga ed una colonna, allora è considerata un Vettore. Se la Matrice è formata da una sola riga e da più colonne, allora la Matrice è definita: "Matrice riga". Se la Matrice è formata da più righe, ma da una sola colonna, allora la Matrice è definita: "Matrice colonna".
Dichiarazione ed inizializzazione delle Matrici
Una Matrice può essere locale o globale, e viene dichiarata secondo la seguente sintassi:
DIM Identificatore AS [ NEW ] TipoDati [ dimensioni degli elementi della matrice ]
Esempio:
Public Sub Main() Dim bb As New Byte[3, 4] .....
La dimensione di una Matrice in Gambas non può essere superiore ad otto.
Esempio:
Public Sub Main() ' Viene dichiarata una matrice con 8 elementi: Dim bb As New Byte[3, 4, 2, 2, 3, 20, 33, 5] .....
Dichiarazione ed inizializzazione delle Matrici annidate
Una Matrice annidata è una matrice che viene allocata direttamente all'interno di un oggetto. Essa non può essere locale, e pertanto va dichiarata ed inizializzata prima della routine, all'esterno. Gli elementi della matrice annidata sono inizializzati con la notazione variabile[m, n].
Esempio:
' Viene dichiarata ed inizializzata la matrice:
Private matrix[5, 5] As Integer
Public Sub Main()
' Qui viene usata la matrice "annidata":
matrix[....
......
End
Invece, un "array multidimensionale" può essere dichiarato anche all'interno della routine:
Public Sub Form_Open() ' Viene dichiarato l'array multidimensionale: Dim a As New Integer[2, 4] ' Qui viene usato l'array: a[..... ...... End
Creazione di una semplice matrice
' definiamo una matrice di due righe e due colonne per un totale di quattro elementi:
a[2, 2] As String
Public Sub Button1_Click() ' Scrive la matrice
Dim x, y As Integer
Dim b As String
For x = 0 To 1
For y = 0 To 1
' 'Immettiamo quattro nomi.
' Per esempio, i primi due potrebbero essere un nome di animale ed un nome di pianta che iniziano per "A";
' gli altri due potrebbero essere un nome di animale ed un nome di pianta che iniziano per "B":
b = InputBox("Immetti un nome: ")
a[x, y] = b
Next
Next
End
Public Sub Button2_Click() ' legge la matrice
Dim c, d As Integer
For c = 0 To 1
For d = 0 To 1
Print a[c, d]
Next
Print "------"
Next
End
Riordinare i valori contenuti negli elementi di un array multidimensionale
Supponiamo di avere un array multidimensionale di 2 righe e 2 colonne. Lo scopo è quello di inserire quattro valori senza un ordine preciso, e di riordinarli in modo ascendente o discendente.
Possiamo effettuare questo esperimento sia con valori numerici, che con stringhe.
Caso di matrice contenente valori numerici
' dichiariamo un array multidimensionale:
matrix As New Integer[2, 2]
Public Sub Button1_Click()
Dim x, y As Integer
Dim $b As String
' riempiamo l'array con valori numerali interi:
For x = 0 To 1
For y = 0 To 1
$b = InputBox("Immetti un numero: ")
matrix[x, y] = CInt($b)
Next
Next
End
Public Sub Button2_Click()
Dim num As Integer
' riordiniamo i valori dell'array in ordine ascendente:
matrix.Sort(gb.Ascent) {1}
' ...e li andiamo a vedere ordinati in modo ascendente in console:
For Each num In matrix
Print num
Next
End
Caso di array multidimensionale contenente valori stringa (si potranno ovviamente inserire valori composti da uno o più caratteri, ed anche numerali)
' Gambas class file
' dichiariamo un array multidimensionale:
arr As New string[2, 2]
Public Sub Button1_Click()
Dim x, y As Integer
Dim $b As String
' riempiamo l'array con valori stringa (basta anche un solo carattere):
For x = 0 To 1
For y = 0 To 1
$b = InputBox("Immetti una parola o un carattere (anche numerale): ")
arr[x, y] = $b
Next
Next
End
Public Sub Button2_Click()
Dim car As String
' riordiniamo i valori della matrice in ordine ascendente:
arr.Sort(gb.Ascent) {1}
' ...e li andiamo a vedere ordinati in modo ascendente in console:
For Each car In arr
Print car
Next
End
Ottenere da due array multidimensionali distinti un unico semplice array
' dichiariamo due array multidimensionali:
a As New Integer[2, 2]
b As New Integer[2, 2]
Public Sub Button1_Click()
Dim x, y As Integer
Dim $b As String
' riempiamo l'array con valori numerali interi:
For x = 0 To 1
For y = 0 To 1
$b = InputBox("Immetti un numero nel 1° array: ")
a[x, y] = CInt($b)
Next
Next
For x = 0 To 1
For y = 0 To 1
$b = InputBox("Immetti un numero nel 2° array: ")
b[x, y] = CInt($b)
Next
Next
End
Public Sub Button2_Click()
Dim c As New Integer[]
Dim num As Integer
For Each num In a
c.add(num)
Next
For Each num In b
c.add(num)
Next
' Volendo, possiamo anche riordinare i valori:
c.Sort(gb.Descent)
For Each num In c
Print num
Next
End
Ottenere da due array multidimensionali distinti un unico array multidimensionale
' dichiariamo due array multidimensionali:
a As New Integer[2, 2]
b As New Integer[2, 2]
Public Sub Button1_Click()
Dim x, y As Integer
Dim $b As String
' riempiamo l'array con valori numerali interi:
For x = 0 To 1
For y = 0 To 1
$b = InputBox("Immetti un numero nel 1° array: ")
a[x, y] = CInt($b)
Next
Next
For x = 0 To 1
For y = 0 To 1
$b = InputBox("Immetti un numero nel 2° array: ")
b[x, y] = CInt($b)
Next
Next
End
Public Sub Button2_Click()
Dim x, y, z, nn As Integer
Dim c As New Integer[2, 4]
z = 1
' Cerchiamo di creare un algoritmo che possa sostituire queste righe:
' c[0, 0] = a[0, 0]
' c[0, 1] = a[0, 1]
' c[0, 2] = b[0, 0]
' c[0, 3] = b[0, 1]
' c[1, 0] = a[1, 0]
' c[1, 1] = a[1, 1]
' c[1, 2] = b[1, 0]
' c[1, 3] = b[1, 1]
For x = 0 To 1
For y = 0 To 3
z = Abs(z - 1)
If y > 1 Then
c[x, y] = b[x, z]
Else
c[x, y] = a[x, z]
Endif
Next
Next
' Volendo, possiamo anche riordinare i valori:
c.Sort(gb.Ascent)
For Each nn In c
Print nn
Next
End
Note
[1] Se volessimo, invece, ordinare i numeri in modo discendente, useremmo: gb.Descent.