Differenze tra le versioni di "Array dinamici – creazione e riempimento"

Da Gambas-it.org - Wikipedia.
Riga 8: Riga 8:
 
  '''Public''' Sub Button1_Click()
 
  '''Public''' Sub Button1_Click()
 
   
 
   
   Dim bb As <FONT color=#B22222>New</font> Byte<FONT color=#B22222>[]</font>  <FONT color=#006400>' ''All'interno delle paretesi quadre non è indicato alcun valore''</font>
+
   Dim bb As <FONT color=#B22222>New</font> Byte<FONT color=#B22222>[]</font>  <FONT color=gray>' ''All'interno delle paretesi quadre non è indicato alcun valore''</font>
 
   Dim j As Byte
 
   Dim j As Byte
 
   
 
   
Riga 14: Riga 14:
 
   For j = 0 To 9
 
   For j = 0 To 9
 
   
 
   
  <FONT color=#006400>' ''Ad ogni ciclo viene assegnato un valore all'array,
+
  <FONT color=gray>' ''Ad ogni ciclo viene assegnato un valore all'array,
 
  ' ''e quindi viene creato un nuovo elemento di indice successivo all'ultimo che era stato generato:''</font>
 
  ' ''e quindi viene creato un nuovo elemento di indice successivo all'ultimo che era stato generato:''</font>
 
       bb.<FONT color=#B22222>Add</font>(j)
 
       bb.<FONT color=#B22222>Add</font>(j)
Riga 37: Riga 37:
 
   Inc b
 
   Inc b
 
   
 
   
  <FONT color=#006400>' ''Definiamo la "nuova" quantità di righe dell'array bidimensionale''
+
  <FONT color=gray>' ''Definiamo la "nuova" quantità di righe dell'array bidimensionale''
 
  ' ''con un nuovo valore superiore di un'unità rispetto al precedente:</font>
 
  ' ''con un nuovo valore superiore di un'unità rispetto al precedente:</font>
 
   bb = New Byte[<FONT color=#B22222>b</font>, 3]
 
   bb = New Byte[<FONT color=#B22222>b</font>, 3]
Riga 52: Riga 52:
 
In questo caso la quantità di elementi di un array non è definita con la dichiarazione, ma lo diviene successivamente. Questo caso si differenzia dai precedenti, poiché non si tratta di un incremento dinamico, ossia in modo indefinito, ma si provvede a stabilire il numero definito e stabile degli elementi dell'array semplicemente in una fase successiva e non preliminarmente.
 
In questo caso la quantità di elementi di un array non è definita con la dichiarazione, ma lo diviene successivamente. Questo caso si differenzia dai precedenti, poiché non si tratta di un incremento dinamico, ossia in modo indefinito, ma si provvede a stabilire il numero definito e stabile degli elementi dell'array semplicemente in una fase successiva e non preliminarmente.
  
===In un array monodimensionale===
+
Nella dichiarazione della variabile di tipo vettoriale ovviamente non sarà fatta alcuna determinazione del numero di elementi del vettore medesimo. Tale definizione avverra successivamente in routine: si provvederà alla creazione della variabile vettoriale e, quindi, alla definizione del numero dei suoi elementi.
 
  '''Public''' Sub Button1_Click()
 
  '''Public''' Sub Button1_Click()
 
   
 
   
 
   Dim qnt As String
 
   Dim qnt As String
 
   Dim qntI, nu As Integer
 
   Dim qntI, nu As Integer
   Dim ii As Integer[]  <FONT color=#006400>' ''dichiara l'array, ma senza definirne la quantità degli elementi''</font>
+
   Dim ii As Integer[]  <FONT color=gray>' ''dichiara l'array, ma senza definirne la quantità degli elementi''</font>
 
   
 
   
 
   
 
   
  <FONT color=#006400>' ''dimensiona "ora" l'array, in questo esempio con un "InputBox":''</font>
+
  <FONT color=gray>' ''Dimensiona "ora" il vettore, in questo esempio con un "InputBox":''</font>
 
     qnt = InputBox("Inserisci tu la dimensione delle righe dell'array:")
 
     qnt = InputBox("Inserisci tu la dimensione delle righe dell'array:")
 
   
 
   
 
     qntI = Val(qnt)
 
     qntI = Val(qnt)
 
   
 
   
     ii = New Integer[qntI]
+
     <FONT color=gray>ii = New Integer[<B>qntI</b>]</font>
 
   
 
   
 
   
 
   
 
     For nu = 0 To ii.Max
 
     For nu = 0 To ii.Max
  <FONT color=#006400>' ''Riempie ogni elemento dell'array, però, fino al suo numero massimo definito:''</font>
+
  <FONT color=gray>' ''Riempie ogni elemento dell'array, però, fino al suo numero massimo definito:''</font>
 
       ii[nu] = nu
 
       ii[nu] = nu
 
       Print ii[nu]
 
       Print ii[nu]

Versione delle 10:36, 23 nov 2013

Descriveremo la creazione e l'assegnazione di valori ad un array monodimensionale, o vettore, dinamico (con quantità di elementi non definita a priori) e ad uno multidimensionale, nonché i casi in cui la definizione della quantità degli elementi viene definita successivamente in modo esplicito o in modo dinamico.


Creazione di un array monodimensionale, definizione dinamica dei suoi elementi e loro riempimento

Un array monodimensionale è dinamico se, non avendo definita a priori la quantità dei suoi elementi interni, è suscettibile di incrementare detta quantità di volta in volta, ogni qualvolta lo si renda necessario.

Oltre alla dichiarazione dell'array, per ottenere l'incremento del numero di elementi interni, e dunque l'assegnazione di un determinato valore a ciascun nuovo elemento, bisognerà creare l'array utilizzando la parola New. Un nuovo elemento verrà generato (incrementando così il numero di elementi dell'array in quel momento) aggiungendo un nuovo valore all'array mediante il metodo .Add().

Public Sub Button1_Click()

 Dim bb As New Byte[]  ' All'interno delle paretesi quadre non è indicato alcun valore
 Dim j As Byte


  For j = 0 To 9

' Ad ogni ciclo viene assegnato un valore all'array,
' e quindi viene creato un nuovo elemento di indice successivo all'ultimo che era stato generato:
     bb.Add(j)

  Next

End


Definizione dinamica degli elementi in un array multidimensionale

L'incremento dinamico, in quantità indefinita, del numero degli elementi delle dimensioni di un array multidimensionale, o Matrice, non è possibile mediante la funzione .Add(), come lo è invece per quello monodimensionale. Per ottenere l'incremento in modo indefinito e dinamico degli elementi, bisognerà apportare di volta in volta innanzitutto un incremento della quantità nella definizione stessa degli elementi di quella dimensione. E', cioè, necessario incrementare volta per volta l'indicazione della quantità degli elementi all'atto della creazione dell'array. In questo modo sarà possibile utilizzare i nuovi elementi generati nel loro numero come ri-definito.
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 un array 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 dell'array bidimensionale
' con un nuovo valore superiore di un'unità rispetto al precedente:
  bb = New Byte[b, 3]

  bb[b - 1, 1] = b

  Print bb[b - 1, 1]

End


Definizione esplicita successiva della quantità degli elementi

In questo caso la quantità di elementi di un array non è definita con la dichiarazione, ma lo diviene successivamente. Questo caso si differenzia dai precedenti, poiché non si tratta di un incremento dinamico, ossia in modo indefinito, ma si provvede a stabilire il numero definito e stabile degli elementi dell'array semplicemente in una fase successiva e non preliminarmente.

Nella dichiarazione della variabile di tipo vettoriale ovviamente non sarà fatta alcuna determinazione del numero di elementi del vettore medesimo. Tale definizione avverra successivamente in routine: si provvederà alla creazione della variabile vettoriale e, quindi, alla definizione del numero dei suoi elementi.

Public Sub Button1_Click()

 Dim qnt As String
 Dim qntI, nu As Integer
 Dim ii As Integer[]   ' dichiara l'array, ma senza definirne la quantità degli elementi


' Dimensiona "ora" il vettore, in questo esempio con un "InputBox":
   qnt = InputBox("Inserisci tu la dimensione delle righe dell'array:")

   qntI = Val(qnt)

   ii = New Integer[qntI]


   For nu = 0 To ii.Max
' Riempie ogni elemento dell'array, però, fino al suo numero massimo definito:
     ii[nu] = nu
     Print ii[nu]
   Next
	   
End

e similmente in un array multidimensionale.