Ciao a tutti....e scusate la mia ignoranza, sono alle prese di un codice che ha funzionato (con vari adattamenti) con GwBasic, Qbasic, VisualBasic per Dos, VisualBasic 5 e 6, Gambas 2 ma non ne vuol sapere di funzionare su Gambas 3 versione 3.9.2, dove stò sbagliando?
Dim v[i] As Integer ' su questa riga mi da errore: Embedded arrays are forbidden here
Dim i As Integer
Dim min As Integer
Dim j As Integer
Dim SWP As Integer
Dim R As Integer
Dim Int As Integer
For i = 0 To 5
'Next
Randomize
ricalcola:
v[i] = Int[Rnd * 90] + 1
If i = 0 Then Goto vai
If i = 1 Then
If v[i] = v[i - 1] Then Goto ricalcola
End If
If i = 2 Then
If v[i] = v[i - 1] Or v[i] = v[i - 2] Then Goto ricalcola
End If
If i = 3 Then
If v[i] = v[i - 1] Or v[i] = v[i - 2] Or v[i] = v[i - 3] Then Goto ricalcola
End If
If i = 4 Then
If v[i] = v[i - 1] Or v[i] = v[i - 2] Or v[i] = v[i - 3] Or v[i] = v[i - 4] Then Goto ricalcola
End If
If i = 5 Then
If v[i] = v[i - 1] Or v[i] = v[i - 2] Or v[i] = v[i - 3] Or v[i] = v[i - 4] Or v[i] = v[i - 5] Then Goto ricalcola
End If
vai:
Next
'Rem 170 REM Ordinamento crescente con Selection Sort
For i = 0 To 5
Min = i
For J = i + 1 To 5
If v[J] < v[Min] Then Min = J
Next
SWP = v[i]
v[i] = v[Min]
v[Min] = SWP
Next
Intanto come già ti ha detto Allegfede le matrici dinamiche si dichiarano come ha detto, poi le matrici sono degli oggetti e vanno istanziate ed esiste una funzione Rand per gli interi, ma mi puoi spiegare il significato di questo passaggio:
If v[i] = v[i - 1] Then Goto ricalcola
quando mai si potrà verificare che i sia uguale a i-1?
Comunque ora vado a dormire, buonanotte.
dim v As Integer[]
dovrebbe andare
Ho già provato e funziona ma poi si blocca su questa riga:
v[i] = Int[Rnd * 90] + 1 ' mi da errore con NOT AN OBJECT
Per Gianluigi:
If v[i] = v[i - 1] Then Goto ricalcola
questo programmino genera 6 numeri da 1 a 90 in modo casuale,diversi e in ordine crescente....per cui se v è uguale al precedente valore ....allora ricalcola
Ci saranno senz'altro algoritmi più efficienti di questo, ma almeno questo rispetta il basic di Gambas.
' Gambas module file
Public Sub Main()
Dim cc As New Byte[]
Dim ii As New Byte[]
Dim b, c As Byte
Randomize
For b = 0 To 89
cc.Push(Rand(1, 90))
Next
For b = 0 To 5
ii.Push(cc[b])
If b > 1 Then
For c = 0 To b - 1
If ii[b] = ii[c] Then
ii.Delete(b)
b -= 1
Endif
Next
Endif
Next
ii.Sort
For Each b In ii
Print b
Next
End
Finalmente, forse è quello giusto ;D
:ciao: :ciao:
Finalmente, forse è quello giusto
Dal test sembra essere necessaria una breve attesa
all'interno del ciclo "If b > 1 Then"
Il punto debole credo fosse nel passaggio che decrementa il contatore del secondo loop, così non dovrebbe dare problemi:
' Gambas module file
Public Sub Main()
Dim cc As New Byte[]
Dim ii As New Byte[]
Dim b, c, i As Byte
Randomize
For b = 0 To 89
cc.Push(Rand(1, 90))
Next
For Each b In cc
ii.Push(b)
Inc i
If i > 1 Then
For c = 0 To i - 2
If b = ii[c] Then
ii.Delete(c)
Dec i
Endif
Next
Endif
If i = 6 Then Break
Next
ii.Sort
For Each b In ii
Print b
Next
End