Differenze tra le versioni di "Matrici (Vettori multidimensionali) definite"
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 | + | ==Riordinare i valori contenuti negli elementi di una Matrice== |
− | Supponiamo di avere | + | 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>'''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 | + | <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>' '' | + | <FONT color=gray>' ''Riordiniamo i valori della Matrice in ordine ascendente:''</font> |
− | matrix.Sort(gb.Ascent) <FONT color=#B22222> | + | 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 | + | <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>' '' | + | <FONT color=gray>' ''dichiariamo una Matrice:''</font> |
− | + | '''Private''' arr As New string[2, 2] | |
− | |||
− | |||
Riga 143: | Riga 142: | ||
Dim $b As String | Dim $b As String | ||
− | <FONT color=gray>' ''riempiamo | + | <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> | + | 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 | + | ==Ottenere da due Matrici distinte un unico Vettore== |
− | <FONT color=gray>' ''dichiariamo due | + | <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 | + | <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 | + | $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 | + | $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= | + | <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 | + | ==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 | + | <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 | + | $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 | + | $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 09:18, 5 dic 2013
Indice
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.