Differenze tra le versioni di "Matrici (Vettori multidimensionali) definite"

Da Gambas-it.org - Wikipedia.
Riga 94: Riga 94:
  
  
==Riordinare i valori contenuti negli elementi di una Matrice==
+
==Ridefinizione degli elementi di un identificatore di Matrice==
Supponiamo di avere una Matrice 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. Per questo scopo si utilizzerà il metodo ''.Sort''.
+
In modo analogo al caso del Vettore, visto sopra, si può ottenere la rideterminazione del numero degli elementi di un identificatore di una ''[http://it.wikipedia.org/wiki/Array#Array_multidimensionali Vettore multidimensionale]'', o ''[http://it.wikipedia.org/wiki/Matrice Matrice]''. Per ottenere ciò, bisognerà incrementare l'indicazione della quantità degli elementi all'atto della creazione della matrice.
 +
<BR>Ogni dimensione andrà espressa da una variabile, il cui valore sarà di volta in volta incrementato. Il valore di partenza di detta variabile dovrà essere almeno pari a 1 (uno) .
  
Possiamo effettuare questo esperimento sia con valori numerici, che con stringhe.
+
Facciamo l'esempio di una ''Matrice'' bidimensionale, di cui intendiamo ''definire'' dinamicamente (ossia incrementare) il numero degli elementi solamente della prima dimensione (riga), per consentire conseguentemente di volta in volta così il loro utilizzo:
 
+
  '''Private''' b As Byte
 
+
  '''Private''' bb As Byte[]
<FONT color=#B22222>'''Caso di matrice contenente valori numerici'''</font>
 
 
 
<FONT color=gray>' ''Dichiariamo una Matrice:''</font>
 
'''Private''' matrix As New Integer[2, 2]
 
 
 
'''Public''' Sub Button1_Click()
 
 
Dim x, y As Integer
 
Dim $b As String
 
 
<FONT color=gray>' ''riempiamo la Matrice con valori numerali interi:''</font>
 
  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
 
 
<FONT color=gray>' ''Riordiniamo i valori della Matrice in ordine ascendente:''</font>
 
    matrix<FONT color=#B22222>.Sort</font>(gb.Ascent) <FONT color=#B22222>|[[#Note|1]]|</font>
 
 
<FONT color=gray>' ''...e li andiamo a vedere ordinati in modo ascendente in console:''</font>
 
    For Each num In matrix
 
      Print num
 
    Next
 
 
'''End'''
 
 
 
 
 
 
 
<FONT color=#B22222><B>Caso di Matrice contenente valori stringa (si potranno ovviamente inserire valori composti da uno o più caratteri, ed anche numerali)</b></font>
 
 
 
<FONT color=gray>' ''dichiariamo una Matrice:''</font>
 
'''Private''' arr As New string[2, 2]
 
 
 
'''Public''' Sub Button1_Click()
 
 
Dim x, y As Integer
 
Dim $b As String
 
 
<FONT color=gray>' ''riempiamo la Matrice con valori stringa (basta anche un solo carattere):''</font>
 
  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
 
 
<FONT color=gray>' ''riordiniamo i valori della matrice in ordine ascendente:''</font>
 
    arr<FONT color=#B22222>.Sort</font>(gb.Ascent)  <FONT color=#B22222>|[[#Note|1]]|</font>
 
 
<FONT color=gray>' ''...e li andiamo a vedere ordinati in modo ascendente in console:''</font>
 
    For Each car In arr
 
    Print car
 
    Next
 
 
'''End'''
 
 
 
 
 
 
 
==Ottenere da due Matrici distinte un unico Vettore==
 
 
 
<FONT color=gray>' ''dichiariamo due Matrici:''</font>
 
'''Private''' a As New Integer[2, 2]
 
  '''Private''' b As New Integer[2, 2]
 
 
 
'''Public''' Sub Button1_Click()
 
 
Dim x, y As Integer
 
Dim $b As String
 
 
<FONT color=gray>' ''riempiamo la Matrice con valori numerali interi:''</font>
 
  For x = 0 To 1
 
    For y = 0 To 1
 
      $b = InputBox("Immetti un numero nella 1<SUP>a</sup> Matrice: ")
 
      a[x, y] = CInt($b)
 
    Next
 
  Next
 
 
 
  For x = 0 To 1
 
    For y = 0 To 1
 
      $b = InputBox("Immetti un numero nella 2<SUP>a</sup> Matrice: ")
 
      b[x, y] = CInt($b)
 
    Next
 
  Next
 
 
'''End'''
 
 
 
'''Public''' Sub Button2_Click()
 
 
Dim c As New Integer[]
 
Dim num As Integer
 
 
<FONT color=gray>' ''Immettiamo i valori delle due Matrici nel Vettore:''</font>
 
  For Each num In a
 
    c.add(num)
 
  Next
 
 
  For Each num In b
 
    c.add(num)
 
  Next
 
 
<FONT color=gray>' ''Volendo, possiamo anche riordinare i valori:''</font>
 
    c.Sort(gb.Descent)
 
 
  For Each num In c
 
    Print num
 
  Next
 
 
'''End'''
 
 
 
 
 
==Ottenere da due Matrici distinte un unica Matrice==
 
 
 
<FONT color=gray>' ''dichiariamo due array multidimensionali:''</font>
 
  '''Private''' a As New Integer[2, 2]
 
'''Private''' b As New Integer[2, 2]
 
 
   
 
   
 
   
 
   
 
  '''Public''' Sub Button1_Click()
 
  '''Public''' Sub Button1_Click()
 
   
 
   
Dim x, y As Integer
+
   Inc b
Dim $b As String
 
 
<FONT color=gray>' ''riempiamo la Matrice con valori numerali interi:''</font>
 
  For x = 0 To 1
 
    For y = 0 To 1
 
      $b = InputBox("Immetti un numero nella 1<SUP>a</sup> Matrice: ")
 
      a[x, y] = CInt($b)
 
    Next
 
   Next
 
 
 
  For x = 0 To 1
 
    For y = 0 To 1
 
      $b = InputBox("Immetti un numero nella 2<SUP>a</sup> Matrice: ")
 
      b[x, y] = CInt($b)
 
    Next
 
  Next
 
 
'''End'''
 
 
   
 
   
 +
<FONT color=gray>' ''Definiamo la "nuova" quantità di righe della Matrice bidimensionale''
 +
' ''con un nuovo valore superiore di un'unità rispetto al precedente:</font>
 +
  bb = New Byte[<FONT color=#B22222>b</font>, 3]
 
   
 
   
'''Public''' Sub Button2_Click()
+
  bb[b - 1, 1] = b
 
   
 
   
  Dim x, y, z, nn As Integer
+
  Print bb.Count, bb[b - 1, 1]
  Dim c As New Integer[2, 4]
 
 
   
 
   
  z = 1
 
 
 
<FONT color=gray>' ''Cerchiamo di creare un algoritmo che possa sostituire queste righe,''
 
' ''ed avere così un'unica Matrice contenente i valori delle due Matrici originarie:''
 
' ''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]''</font>
 
 
 
 
 
  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
 
 
 
<FONT color=gray>' ''Volendo, possiamo anche riordinare i valori:''</font>
 
  c.Sort(gb.Ascent)
 
 
 
  For Each nn In c
 
    Print nn
 
  Next
 
 
 
 
  '''End'''
 
  '''End'''
 
+
Anche in questo caso le eventuali assegnazioni di valori agli elementi della Matrice, verranno perse, in quanto ogni volta viene generato un nuovo oggetto variabile di tipo Matrice. Dunque gli Array multidimensionali sono ''statici''.
 
 
 
 
==Note==
 
[1] Se volessimo, invece, ordinare i numeri in modo discendente, useremmo: ''gb.Descent''.
 

Versione delle 08:56, 15 lug 2015

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 dimensione di 8 elementi:
 Dim bb As New Byte[3, 4, 2, 2, 3, 20, 33, 5]

  ......

Per conoscere il numero delle dimensioni di una matrice, è possibile usare la proprietà .Bounds.Count:

Public Sub Main()

 Dim bb As New Byte[3, 4, 2]

  Print bb.Bounds.Count

End


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


Creazione di una matrice annidata

' Definiamo una matrice "annidata" di due righe e due colonne per un totale di quattro elementi:
Private a[2, 2] As String


Public Sub Button1_Click()   ' Scrive la matrice "annidata"

 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 "annidata"

 Dim c, d As Integer

  For c = 0 To 1
   For d = 0 To 1
     Print a[c, d]
   Next
  Print "------"
 Next

End


Ridefinizione degli elementi di un identificatore di Matrice

In modo analogo al caso del Vettore, visto sopra, si può ottenere la rideterminazione del numero degli elementi di un identificatore di una Vettore multidimensionale, o Matrice. Per ottenere ciò, bisognerà incrementare l'indicazione della quantità degli elementi all'atto della creazione della matrice.
Ogni dimensione andrà espressa da una variabile, il cui valore sarà di volta in volta incrementato. Il valore di partenza di detta variabile dovrà essere almeno pari a 1 (uno) .

Facciamo l'esempio di una Matrice bidimensionale, di cui intendiamo definire dinamicamente (ossia incrementare) il numero degli elementi solamente della prima dimensione (riga), per consentire conseguentemente di volta in volta così il loro utilizzo:

Private b As Byte
Private bb As Byte[]


Public Sub Button1_Click()

  Inc b

' Definiamo la "nuova" quantità di righe della Matrice bidimensionale
' con un nuovo valore superiore di un'unità rispetto al precedente:
  bb = New Byte[b, 3]

  bb[b - 1, 1] = b

  Print bb.Count, bb[b - 1, 1]

End

Anche in questo caso le eventuali assegnazioni di valori agli elementi della Matrice, verranno perse, in quanto ogni volta viene generato un nuovo oggetto variabile di tipo Matrice. Dunque gli Array multidimensionali sono statici.