Differenze tra le versioni di "Porre a zero i valori contenuti da un Vettore"

Da Gambas-it.org - Wikipedia.
 
(Una versione intermedia di uno stesso utente non è mostrata)
Riga 6: Riga 6:
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
    
 
    
  Dim bb As Byte[] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
+
  Dim bb As Byte[] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
  Dim b As Byte
+
  Dim b As Byte
 
    
 
    
 
   For b = 0 to bb.Max
 
   For b = 0 to bb.Max
Riga 22: Riga 22:
  
  
==Usando il Metodo ''.Copy( )'' di un'altra variabile vettoriale d'appoggio==
+
==Usando il Metodo ".Copy()" di un'altra variabile vettoriale d'appoggio==
 
Questa modalità prevede di assegnare al vettore tutti i valori - preimpostati a zero - di un altro vettore mediante il suo Metodo ''.Copy( )'':
 
Questa modalità prevede di assegnare al vettore tutti i valori - preimpostati a zero - di un altro vettore mediante il suo Metodo ''.Copy( )'':
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
    
 
    
  Dim bb As Byte[] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
+
  Dim bb As Byte[] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
  Dim zero As Byte[]
+
  Dim zero As Byte[]
  Dim b As Byte
+
  Dim b As Byte
 
    
 
    
 
   zero = New Byte[bb.Count]
 
   zero = New Byte[bb.Count]
Riga 43: Riga 43:
  
  
==Uso del metodo ''.Fill()'' della variabile vettoriale==
+
==Uso del metodo ".Fill()" della variabile vettoriale==
Si potrà fare uso del metodo ''.Fill()'' della variabile vettoriale, il quale riempie di un dato valore uno o più elementi della predetta variabile.
+
Si potrà fare uso del metodo ".Fill()" della variabile vettoriale, il quale riempie di un dato valore uno o più elementi della predetta variabile.
  
  
Riga 50: Riga 50:
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
   
 
   
  Dim b As Byte
+
  Dim b As Byte
  Dim bb As Byte[] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
+
  Dim bb As Byte[] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
 
   
 
   
 
   bb<FONT Color=#B22222>.Fill</font>(0, 3, 4)
 
   bb<FONT Color=#B22222>.Fill</font>(0, 3, 4)
Riga 71: Riga 71:
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
   
 
   
  Dim bb As Byte[] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
+
  Dim bb As Byte[] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
  Dim st As Stream
+
  Dim st As Stream
  Dim b As Byte
+
  Dim b As Byte
 
    
 
    
 
   st = Memory bb.Data For Write
 
   st = Memory bb.Data For Write
Riga 94: Riga 94:
  
 
==Uso del file-device ''/dev/zero''==
 
==Uso del file-device ''/dev/zero''==
E' possibile utilizzare il file-device ''/dev/zero'', il quale restituisce un flusso di valori zero &h00:
+
E' possibile utilizzare il file-device "''/dev/zero'' ", il quale restituisce un flusso di valori zero &h00:
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
    
 
    
Riga 115: Riga 115:
  
  
==Uso della funzione esterna ''bzero()'' della libreria di C==
+
==Uso della funzione esterna "bzero()" della libreria di C==
Questa modalità prevede l'uso della funzione esterna ''bzero()'' della libreria di C, e della proprietà ''.Data'' della variabile vettoriale.
+
Questa modalità prevede l'uso della funzione esterna "bzero()" della libreria di C, e della proprietà ".Data" della variabile vettoriale.
  
  
Riga 127: Riga 127:
 
   '''Public''' Sub Main()
 
   '''Public''' Sub Main()
 
   
 
   
  Dim bb As Byte[] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
+
  Dim bb As Byte[] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
  Dim b As Byte
+
  Dim b As Byte
 
   
 
   
  <FONT Color=gray>' ''Ora azzeriamo quattro valori di seguito cominciando dal byte di indice 2:''</font>
+
  <FONT Color=gray>' ''Ora azzeriamo quattro valori di seguito, cominciando ad esempio dal byte di indice 2:''</font>
 
   bzero(bb.Data + 2, 4)
 
   bzero(bb.Data + 2, 4)
 
   
 
   
Riga 142: Riga 142:
  
  
==Uso della funzione esterna ''memset()'' della libreria di C==
+
==Uso della funzione esterna "memset()" della libreria di C==
Si può anche utilizzare della funzione esterna ''memset()'' della libreria di C, e della proprietà ''.Data'' della variabile vettoriale.
+
Si può anche utilizzare della funzione esterna "memset()" della libreria di C, e della proprietà ''.Data'' della variabile vettoriale.
  
  
Riga 154: Riga 154:
 
   '''Public''' Sub Main()
 
   '''Public''' Sub Main()
 
   
 
   
  Dim bb As Byte[] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
+
  Dim bb As Byte[] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
  Dim b As Byte
+
  Dim b As Byte
 
   
 
   
 
  <FONT Color=gray>' ''Ora azzeriamo tutti i valori del vettore:''</font>
 
  <FONT Color=gray>' ''Ora azzeriamo tutti i valori del vettore:''</font>

Versione attuale delle 08:25, 24 ago 2022

Per porre a zero uno o più valori contenuti da un Vettore, si potranno adottare almeno quattro modalità.


Azzerando direttamente ciascun elemento del vettore

La prima modalità più diretta e più intuitiva è quella di azzerare ciascun elemento del vettore:

Public Sub Main()
 
  Dim bb As Byte[] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
  Dim b As Byte
 
  For b = 0 to bb.Max
    bb[b] = 0
  Next
  
' Vediamo in console il risultato:
  For Each b In bb
    Print b
  Next

End


Usando il Metodo ".Copy()" di un'altra variabile vettoriale d'appoggio

Questa modalità prevede di assegnare al vettore tutti i valori - preimpostati a zero - di un altro vettore mediante il suo Metodo .Copy( ):

Public Sub Main()
 
  Dim bb As Byte[] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
  Dim zero As Byte[]
  Dim b As Byte
 
  zero = New Byte[bb.Count]
  
  bb = zero.Copy(0, zero.Count)
  
' Vediamo in console il risultato:
  For Each b In bb
    Print b
  Next

End


Uso del metodo ".Fill()" della variabile vettoriale

Si potrà fare uso del metodo ".Fill()" della variabile vettoriale, il quale riempie di un dato valore uno o più elementi della predetta variabile.


Mostriamo un semplice esempio, nel quale azzereremo quattro elementi di un Vettore:

Public Sub Main()

  Dim b As Byte
  Dim bb As Byte[] = [1, 2, 3, 4, 5, 6, 7, 8, 9]

  bb.Fill(0, 3, 4)

' Vediamo in console il risultato:
  For Each b In bb
    Print b
  Next

End


Uso dei Memory Stream

Come sappiamo la risorsa Memory Stream consente di scrivere nell'area di memoria puntata da una variabile di tipo Puntatore. Utilizzando la proprietà .Data di una variabile vettoriale, potremo azzerare uno o più valori presenti nel Vettore.


Mostriamo un semplice esempio:

Public Sub Main()

  Dim bb As Byte[] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
  Dim st As Stream
  Dim b As Byte
 
  st = Memory bb.Data For Write

' Azzeriamo quattro valori di seguito cominciando dal byte di indice 2:
  Seek #st, 2
  For b = 1 to 4
   write #st, 0 As Byte
  Next
  st.Close

' Vediamo in console il risultato:
  For Each b In bb
    Print b
  Next
  
End


Uso del file-device /dev/zero

E' possibile utilizzare il file-device "/dev/zero ", il quale restituisce un flusso di valori zero &h00:

Public Sub Main()
 
 Dim bb As Byte[] = [1, 2, 3, 4, 5, 6, 7, 8]
 Dim fl As File
 Dim b As Byte
 
 fl = Open "/dev/zero" For Read
 
 bb.Read(fl, 0, bb.Count)
 
 For Each b In bb
   Print b
 Next
 
 fl.Close
  
End


Uso della funzione esterna "bzero()" della libreria di C

Questa modalità prevede l'uso della funzione esterna "bzero()" della libreria di C, e della proprietà ".Data" della variabile vettoriale.


Ne mostriamo un esempio:

' void bzero (void *__s, size_t __n)
' Set N bytes of S to 0.
Private Extern bzero(__s As Pointer, __n As Long) In "libc:6"


 Public Sub Main()

  Dim bb As Byte[] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
  Dim b As Byte

' Ora azzeriamo quattro valori di seguito, cominciando ad esempio dal byte di indice 2:
  bzero(bb.Data + 2, 4)

' Vediamo in console il risultato:
  For Each b In bb
    Print b
  Next

End


Uso della funzione esterna "memset()" della libreria di C

Si può anche utilizzare della funzione esterna "memset()" della libreria di C, e della proprietà .Data della variabile vettoriale.


Ne mostriamo un esempio, in cui azzeriamo tutti i valori del vettore:

' void *memset(void *str, int c, size_t n)
' Copies the character c (an unsigned char) to the first n characters of the string pointed to, by the argument str.
Private Extern memset(s As Pointer, c As Integer, n As Long) In "libc:6"


 Public Sub Main()

  Dim bb As Byte[] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
  Dim b As Byte

' Ora azzeriamo tutti i valori del vettore:
  memset(bb.Data, 0, bb.Count)

' Vediamo in console il risultato:
  For Each b In bb
    Print b
  Next

End