Ho provato a fare una soluzione tutta Gambas ma non funziona, chissà perchè: :-\
Public Sub Form_Open()
Dim b As Byte
Dim bb1 As Byte[]
Dim bb2 As New Byte[]
bb1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
For b = 0 To bb1.Count - 2
bb2.Add(bb1[b], b + 1)
bb2.Add(bb1[b + 1], b)
Print bb2[b],
Next
End
Innanzitutto alla fine del processo del tuo codice il numero degli elementi della variabile vettoriale bb2 è 18; dunque superiore al numero degli elementi costituenti la variabile vettoriale bb1...
Ad ogni modo, volendo utilizzare la tua idea, io modificherei così il tuo codice:
Public Sub Main()
Dim b As Byte
Dim bb1 As Byte[]
Dim bb2 As New Byte[]
bb1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
For b = 0 To bb1.Max Step 2
bb2.Push(bb1[b + 1])
bb2.Push(bb1[b])
Print bb2[b], bb2[b + 1],
Next
If bb2.Count = bb1.Count Then
Print "\n\nIl numero degli elementi di bb2 corrisponde con quello degli elementi di bb1"
Else
Error.Raise("Il numero degli elementi di bb2 NON corrisponde con quello degli elementi di bb1 !")
Endif
End
Ho provato a fare una soluzione tutta Gambas ...
una soluzione semplice è usare swap che credo sia la più Gambas possibile (forse):
' Gambas module file
'
Library "libc:6"
' void swab (const void *__restrict __from, void *__restrict __to, ssize_t __n)'
' Swab pairs bytes in the first N bytes of the area pointed to by FROM and copy the result to TO.'
Private Extern swab(__from As Pointer, __to As Pointer, __n As Long)
Public Sub Main()
Dim b As Byte
Dim bb1 As Byte[]
Dim bb2 As New Byte[10]
Dim bb3 As String[]
bb1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
' Invertiamo la posizione di ciascun blocco di due dati adiacenti all'interno dell'area di memoia del vettore:'
swab(bb1.Data, bb2.Data, 10)
' verifichiamo'
For Each b In bb2
Print b;;
Next
Print
Print bb2[2] + bb2[7]
'--------------------------------------'
bb3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
For b = 0 To 9 Step 2
Swap bb3[b], bb3[b + 1]
Next
' verifichiamo'
For b = 0 To 9
Print bb3[b];;
Next
Print
Print bb3[2] + bb3[7]
End
:ciao: :ciao:
credo che quanto da me proposto sia "più Gambas" proprio perché ne sfrutta una sua funzione interna.
:rolleyes:
....ma perché Top Fuel non ha forse utilizzato risorse interne di Gambas ?
Top Fuel ha utilizzato solo risorse interne di Gambas ed in più il Metodo .Add() (che è sostanzialmente una Funzione) tipico degli Array in Gambas.
Non credo che un codice sia più "Gambas" di un altro se utilizza rispetto a quest'ultimo una Funzione nativa di Gambas.
Quale delle due soluzioni seguenti è infatti... più Gambas ? (http://forum.ubuntu-it.org/images/smilies/scratch.gif)
Public Sub Main()
Print Shl(128, 1)
Print 128 * CInt(2 ^ 1)
End
o meglio ancora, quale delle due seguenti soluzioni è... più Gambas ?
Public Sub Main()
Dim s1, s2, tmp As String
s1 = "aaaa"
s2 = "bbbb"
Swap s1, s2
Print s1, s2
'''''''''''''''''''''''''''''
s1 = "aaaa"
s2 = "bbbb"
tmp = s1
s1 = s2
s2 = tmp
Print s1, s2
End