Matrici ed Array multidimensionali definiti

Da Gambas-it.org - Wikipedia.
Versione del 9 apr 2013 alle 10:04 di Vuott (Discussione | contributi) (Creata pagina con '==Introduzione== Una "'''Matrice'''" è 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...')

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Introduzione

Una "Matrice" è 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 delle Matrici e degli array multidimensionali in Gambas

In Gambas una "Matrice" va dichiarata prima della routine all'esterno:

' viene dichiarata la matrice:
matrix[5, 5] As Integer


Public Sub Form_Open()

' qui viene usata la matrice:
   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

' Gambas class file

' 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

' Gambas class file

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