Matrici (Vettori multidimensionali) definite: differenze tra le versioni

Da Gambas-it.org - Wikipedia.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
 
(12 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
==Introduzione==
#REDIRECT [[Array_multidimensionali_con_numero_determinato_di_elementi]]
Una "'''Matrice'''" (o anche ''Vettore multidimensionale'') è un insieme di numeri ordinati secondo righe e colonne di ordine <Font Color= #B22222>''m''</font> x <Font Color= #B22222>''n''</font>, 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.
<BR>Se ''m'' = ''n'' la Matrice viene definita: ''quadrata''.
<BR>Un elemento della Matrice occupa la posizione individuata dall'intersezione tra la ''m''-esima riga e la ''n''-esima colonna della Matrice.
<BR>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()
<Font Color=gray>' ''Viene dichiarata una matrice con dimensione di 8 elementi:''</font>
  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 ''<Font Color=B22222>variabile[m, n]</font>''.
 
Esempio:
<Font Color=gray>' ''Viene dichiarata ed inizializzata la matrice:''</font>
Private matrix[5, 5] As Integer
Public Sub Main()
<Font Color=gray>' ''Qui viene usata la matrice "annidata":''</font>
    matrix[....
    ......
'''End'''
 
 
===Creazione di una matrice ''annidata''===
 
<Font Color=gray>' ''Definiamo una matrice "annidata" di due righe e due colonne per un totale di quattro elementi:''</font>
Private a[2, 2] As String
'''Public''' Sub Button1_Click()  <Font Color=gray>' ''Scrive la matrice "annidata"''</font>
  Dim x, y As Integer
  Dim b As String
 
  For x = 0 To 1
    For y = 0 To 1
<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";
' ''gli altri due potrebbero essere un nome di animale ed un nome di pianta che iniziano per "B"'':</font>
      b = InputBox("Immetti un nome: ")
      a[x, y] = b
    Next
  Next
'''End'''
'''Public''' Sub Button2_Click()  <Font Color=gray>' ''legge la matrice "annidata"''</font>
  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.
 
 
<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()
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 x, y, z, nn As Integer
  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'''
 
 
 
==Note==
[1] Se volessimo, invece, ordinare i numeri in modo discendente, useremmo: ''gb.Descent''.

Versione attuale delle 09:11, 15 dic 2020