Differenze tra le versioni di "Assegnare ciascuna cifra di un numero a un elemento di un vettore di tipo Byte"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "Il caso è quello in cui si intende assegnare ciascuna cifra, da cui è composto un numero, a un elemento di una variabile vettoriale di tipo ''Byte[ ]''. Così ad esempio, s...")
 
Riga 12: Riga 12:
 
==Uso delle sole risorse di Gambas==
 
==Uso delle sole risorse di Gambas==
 
In questo caso potremo usare un codice simile al seguente:
 
In questo caso potremo usare un codice simile al seguente:
  '''Public''' Sub Main()
+
  Public Sub Main()
 
    
 
    
 
   Dim bb As New Byte[4]
 
   Dim bb As New Byte[4]
Riga 18: Riga 18:
 
   Dim i As Integer
 
   Dim i As Integer
 
    
 
    
  i = 1234
+
  i = 1234
 
    
 
    
  bb = Byte[].FromString(CStr(i))
+
  bb = Byte[].FromString(CStr(i))
 
    
 
    
  For b = 0 To bb.Max
+
  For b = 0 To bb.Max
  <FONT Color=gray>' ''Poiché in ogni elemento del vettore sono stati salvati i codici ASCII dei simboli numerici,''
+
  <FONT Color=gray>' ''Poiché in ogni elemento del vettore sono stati salvati i codici ASCII dei simboli numerici, per ottenere i numeri delle cifre, che componevano il numero intero, dobbiamo sottrarre a ciascun codice ASCII il valore "48":</font>
' ''per ottenere i numeri delle cifre, che componevano il numero intero, dobbiamo sottrarre a ciascun codice ASCII il valore "48":</font>
+
    bb[b] = bb[b] - 48
    bb[b] = bb[b] - 48
+
  Next
  Next
 
 
    
 
    
 
  <FONT Color=gray>' ''Verifichiamo il risultato:</font>
 
  <FONT Color=gray>' ''Verifichiamo il risultato:</font>
  For Each b In bb
+
  For Each b In bb
    Print b
+
    Print b
  Next
+
  Next
 
    
 
    
  '''End'''
+
  End
 
   
 
   
==Uso della funzione esterna ''sprintf( )'' della libreria C==
+
==Uso della funzione esterna "sprintf()" della libreria C==
 
In quast'altro caso potremo usare un codice simile al seguente:
 
In quast'altro caso potremo usare un codice simile al seguente:
 
  Library "libc:6"
 
  Library "libc:6"
Riga 44: Riga 43:
 
   
 
   
 
   
 
   
  '''Public''' Sub Main()
+
  PublicSub Main()
 
    
 
    
 
   Dim bb As New Byte[4]
 
   Dim bb As New Byte[4]
 
   Dim b As Byte
 
   Dim b As Byte
 
    
 
    
  <FONT Color=#B22222>sprintf</font>(bb.Data, "%d", 1234)
+
  <FONT Color=#B22222>sprintf</font>(bb.Data, "%d", 1234)
 
    
 
    
  For b = 0 To bb.Max
+
  For b = 0 To bb.Max
  <FONT Color=gray>' ''Poiché in ogni elemento del vettore sono stati salvati i codici ASCII dei simboli numerici,''
+
  <FONT Color=gray>' ''Poiché in ogni elemento del vettore sono stati salvati i codici ASCII dei simboli numerici, per ottenere i numeri delle cifre, che componevano il numero intero, dobbiamo sottrarre a ciascun codice ASCII il valore "48":</font>
' ''per ottenere i numeri delle cifre, che componevano il numero intero, dobbiamo sottrarre a ciascun codice ASCII il valore "48":</font>
+
    bb[b] = bb[b] - 48
    bb[b] = bb[b] - 48
+
  Next
  Next
 
 
    
 
    
 
  <FONT Color=gray>' ''Verifichiamo il risultato:</font>
 
  <FONT Color=gray>' ''Verifichiamo il risultato:</font>
  For Each b In bb
+
  For Each b In bb
    Print b
+
    Print b
  Next
+
  Next
 
    
 
    
  '''End'''
+
  End

Versione delle 04:35, 10 giu 2024

Il caso è quello in cui si intende assegnare ciascuna cifra, da cui è composto un numero, a un elemento di una variabile vettoriale di tipo Byte[ ].

Così ad esempio, se il numero è "1234" e la variabile vettoriale è vett[4], vorremo assegnare:

  • la cifra "1" del numero al primo elemento del vettore vett[0];
  • la cifra "2" del numero al primo elemento del vettore vett[1];
  • la cifra "3" del numero al primo elemento del vettore vett[2];
  • la cifra "4" del numero al primo elemento del vettore vett[3].


Proponiamo due modalità: una usando le sole risorse di Gambas, l'altra la funzione esterna sprintf( ) della libreria C.

Uso delle sole risorse di Gambas

In questo caso potremo usare un codice simile al seguente:

Public Sub Main()
 
 Dim bb As New Byte[4]
 Dim b As Byte
 Dim i As Integer
  
 i = 1234
  
 bb = Byte[].FromString(CStr(i))
  
 For b = 0 To bb.Max
' Poiché in ogni elemento del vettore sono stati salvati i codici ASCII dei simboli numerici, per ottenere i numeri delle cifre, che componevano il numero intero, dobbiamo sottrarre a ciascun codice ASCII il valore "48":
   bb[b] = bb[b] - 48
 Next
  
' Verifichiamo il risultato:
 For Each b In bb
   Print b
 Next
  
End

Uso della funzione esterna "sprintf()" della libreria C

In quast'altro caso potremo usare un codice simile al seguente:

Library "libc:6"

' int sprintf (char *__restrict __s, const char *__restrict __format, ...)
' Write formatted output to S.
Private Extern sprintf(__s As Pointer, __formats As String, n As Integer) As Integer


PublicSub Main()
 
 Dim bb As New Byte[4]
 Dim b As Byte
  
 sprintf(bb.Data, "%d", 1234)
  
 For b = 0 To bb.Max
' Poiché in ogni elemento del vettore sono stati salvati i codici ASCII dei simboli numerici, per ottenere i numeri delle cifre, che componevano il numero intero, dobbiamo sottrarre a ciascun codice ASCII il valore "48":
   bb[b] = bb[b] - 48
 Next
  
' Verifichiamo il risultato:
 For Each b In bb
   Print b
 Next
  
End