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

Da Gambas-it.org - Wikipedia.
Riga 60: Riga 60:
 
     For y = 0 To 1
 
     For y = 0 To 1
 
   
 
   
  <Font Color=gray>' 'Immettiamo quattro nomi.
+
  <Font Color=gray>' ''Immettiamo quattro nomi.''
 
  ' ''Per esempio, i primi due potrebbero essere un nome di animale ed un nome di pianta che iniziano per "A";
 
  ' ''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"'':</font>
 
  ' ''gli altri due potrebbero essere un nome di animale ed un nome di pianta che iniziano per "B"'':</font>
Riga 86: Riga 86:
  
  
==Riordinare i valori contenuti negli elementi di un array multidimensionale==
+
==Riordinare i valori contenuti negli elementi di una Matrice==
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.
+
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''.
  
 
Possiamo effettuare questo esperimento sia con valori numerici, che con stringhe.
 
Possiamo effettuare questo esperimento sia con valori numerici, che con stringhe.
  
<FONT color=#B22222><B>Caso di matrice contenente valori numerici</b></font>
 
  
  ' ''dichiariamo un array multidimensionale:''</font>  
+
<FONT color=#B22222>'''Caso di matrice contenente valori numerici'''</font>
  matrix As New Integer[2, 2]
+
 
 +
  <FONT color=gray>' ''Dichiariamo una Matrice:''</font>  
 +
  '''Private''' matrix As New Integer[2, 2]
 
   
 
   
 
   
 
   
Riga 102: Riga 103:
 
  Dim $b As String
 
  Dim $b As String
 
   
 
   
  <FONT color=gray>' ''riempiamo l'array con valori numerali interi:''</font>
+
  <FONT color=gray>' ''riempiamo la Matrice con valori numerali interi:''</font>
 
   For x = 0 To 1
 
   For x = 0 To 1
 
     For y = 0 To 1
 
     For y = 0 To 1
Riga 118: Riga 119:
 
  Dim num As Integer
 
  Dim num As Integer
 
   
 
   
  <FONT color=gray>' ''riordiniamo i valori dell'array in ordine ascendente:''</font>
+
  <FONT color=gray>' ''Riordiniamo i valori della Matrice in ordine ascendente:''</font>
     matrix.Sort(gb.Ascent)  <FONT color=#B22222>{[[#Note|1]]}</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>
 
  <FONT color=gray>' ''...e li andiamo a vedere ordinati in modo ascendente in console:''</font>
Riga 130: Riga 131:
  
  
<FONT color=#B22222><B>Caso di array multidimensionale contenente valori stringa (si potranno ovviamente inserire valori composti da uno o più caratteri, ed anche numerali)</b></font>
+
<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>' ''Gambas class file</font>
+
  <FONT color=gray>' ''dichiariamo una Matrice:''</font>
   
+
  '''Private''' arr As New string[2, 2]
<FONT color=gray>' ''dichiariamo un array multidimensionale:''</font>
 
arr As New string[2, 2]
 
 
   
 
   
 
   
 
   
Riga 143: Riga 142:
 
  Dim $b As String
 
  Dim $b As String
 
   
 
   
  <FONT color=gray>' ''riempiamo l'array con valori stringa (basta anche un solo carattere):''</font>
+
  <FONT color=gray>' ''riempiamo la Matrice con valori stringa (basta anche un solo carattere):''</font>
 
   For x = 0 To 1
 
   For x = 0 To 1
 
     For y = 0 To 1
 
     For y = 0 To 1
Riga 160: Riga 159:
 
   
 
   
 
  <FONT color=gray>' ''riordiniamo i valori della matrice in ordine ascendente:''</font>
 
  <FONT color=gray>' ''riordiniamo i valori della matrice in ordine ascendente:''</font>
     arr.Sort(gb.Ascent)  <FONT color=#B22222>{[[#Note|1]]}</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>
 
  <FONT color=gray>' ''...e li andiamo a vedere ordinati in modo ascendente in console:''</font>
Riga 171: Riga 170:
  
  
==Ottenere da due array multidimensionali distinti un unico semplice array==
+
==Ottenere da due Matrici distinte un unico Vettore==
  
  <FONT color=gray>' ''dichiariamo due array multidimensionali:''</font>
+
  <FONT color=gray>' ''dichiariamo due Matrici:''</font>
  a As New Integer[2, 2]
+
  '''Private''' a As New Integer[2, 2]
  b As New Integer[2, 2]
+
  '''Private''' b As New Integer[2, 2]
 
   
 
   
 
   
 
   
Riga 183: Riga 182:
 
  Dim $b As String
 
  Dim $b As String
 
   
 
   
  <FONT color=gray>' ''riempiamo l'array con valori numerali interi:''</font>
+
  <FONT color=gray>' ''riempiamo la Matrice con valori numerali interi:''</font>
 
   For x = 0 To 1
 
   For x = 0 To 1
 
     For y = 0 To 1
 
     For y = 0 To 1
       $b = InputBox("Immetti un numero nel 1° array: ")
+
       $b = InputBox("Immetti un numero nella 1<SUP>a</sup> Matrice: ")
 
       a[x, y] = CInt($b)
 
       a[x, y] = CInt($b)
 
     Next
 
     Next
Riga 193: Riga 192:
 
   For x = 0 To 1
 
   For x = 0 To 1
 
     For y = 0 To 1
 
     For y = 0 To 1
       $b = InputBox("Immetti un numero nel 2° array: ")
+
       $b = InputBox("Immetti un numero nella 2<SUP>a</sup> Matrice: ")
 
       b[x, y] = CInt($b)
 
       b[x, y] = CInt($b)
 
     Next
 
     Next
Riga 206: Riga 205:
 
  Dim num As Integer
 
  Dim num As Integer
 
   
 
   
 +
<FONT color=gray>' ''Immettiamo i valori delle due Matrici nel Vettore:''</font>
 
   For Each num In a
 
   For Each num In a
 
     c.add(num)
 
     c.add(num)
Riga 214: Riga 214:
 
   Next
 
   Next
 
   
 
   
  <FONT color=#006400>' ''Volendo, possiamo anche riordinare i valori:''</font>
+
  <FONT color=gray>' ''Volendo, possiamo anche riordinare i valori:''</font>
 
     c.Sort(gb.Descent)
 
     c.Sort(gb.Descent)
 
   
 
   
Riga 224: Riga 224:
  
  
==Ottenere da due array multidimensionali distinti un unico array multidimensionale==
+
==Ottenere da due Matrici distinte un unica Matrice==
  
 
  <FONT color=gray>' ''dichiariamo due array multidimensionali:''</font>
 
  <FONT color=gray>' ''dichiariamo due array multidimensionali:''</font>
  a As New Integer[2, 2]
+
  '''Private''' a As New Integer[2, 2]
  b As New Integer[2, 2]
+
  '''Private''' b As New Integer[2, 2]
 
   
 
   
 
   
 
   
Riga 236: Riga 236:
 
  Dim $b As String
 
  Dim $b As String
 
   
 
   
  <FONT color=gray>' ''riempiamo l'array con valori numerali interi:''</font>
+
  <FONT color=gray>' ''riempiamo la Matrice con valori numerali interi:''</font>
 
   For x = 0 To 1
 
   For x = 0 To 1
 
     For y = 0 To 1
 
     For y = 0 To 1
       $b = InputBox("Immetti un numero nel 1° array: ")
+
       $b = InputBox("Immetti un numero nella 1<SUP>a</sup> Matrice: ")
 
       a[x, y] = CInt($b)
 
       a[x, y] = CInt($b)
 
     Next
 
     Next
Riga 246: Riga 246:
 
   For x = 0 To 1
 
   For x = 0 To 1
 
     For y = 0 To 1
 
     For y = 0 To 1
       $b = InputBox("Immetti un numero nel 2° array: ")
+
       $b = InputBox("Immetti un numero nella 2<SUP>a</sup> Matrice: ")
 
       b[x, y] = CInt($b)
 
       b[x, y] = CInt($b)
 
     Next
 
     Next
Riga 261: Riga 261:
 
   z = 1
 
   z = 1
 
    
 
    
  <FONT color=gray>' ''Cerchiamo di creare un algoritmo che possa sostituire queste righe:''
+
  <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, 0] = a[0, 0]''
 
  ' ''c[0, 1] = a[0, 1]''
 
  ' ''c[0, 1] = a[0, 1]''

Versione delle 10:18, 5 dic 2013

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


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


Riordinare i valori contenuti negli elementi di una 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.

Possiamo effettuare questo esperimento sia con valori numerici, che con stringhe.


Caso di matrice contenente valori numerici

' Dichiariamo una Matrice: 
Private matrix As New Integer[2, 2]


Public Sub Button1_Click()

Dim x, y As Integer
Dim $b As String

' riempiamo la Matrice 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 della Matrice 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 Matrice contenente valori stringa (si potranno ovviamente inserire valori composti da uno o più caratteri, ed anche numerali)

' dichiariamo una Matrice:
Private arr As New string[2, 2]


Public Sub Button1_Click()

Dim x, y As Integer
Dim $b As String

' riempiamo la Matrice 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 Matrici distinte un unico Vettore

' dichiariamo due Matrici:
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

' riempiamo la Matrice con valori numerali interi:
  For x = 0 To 1
   For y = 0 To 1
      $b = InputBox("Immetti un numero nella 1a Matrice: ")
      a[x, y] = CInt($b)
   Next
  Next
 
 For x = 0 To 1
   For y = 0 To 1
      $b = InputBox("Immetti un numero nella 2a Matrice: ")
      b[x, y] = CInt($b)
   Next
 Next

End


Public Sub Button2_Click()

Dim c As New Integer[]
Dim num As Integer

' Immettiamo i valori delle due Matrici nel Vettore:
 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 Matrici distinte un unica Matrice

' dichiariamo due array multidimensionali:
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

' riempiamo la Matrice con valori numerali interi:
  For x = 0 To 1
   For y = 0 To 1
      $b = InputBox("Immetti un numero nella 1a Matrice: ")
      a[x, y] = CInt($b)
   Next
  Next
 
 For x = 0 To 1
   For y = 0 To 1
      $b = InputBox("Immetti un numero nella 2a Matrice: ")
      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,
' 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]
 
 
 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.