PRIVATE Numeri[37,6] AS BYTE
.... i numeri non sono messi in una successione aritmetica, ma secondo un certo ordine. Nel vecchio Basic c'erano le famose istruzioni DATA nelle quali ci mettevi i valori che volevi e con un paio di cicli FOR NEXT assegnavi i valori, ma qui non ci sono... :'(...Choose(...)
Esiste una maniera per scrivere meno roba? Avevo pensato anche a creare un piccolo file da aprire e leggere, ma non so in che formato devo scriverlo.Essendo i valori, da assegnare, di tipo strettamente Byte, direi: binario.
Secondo me, impegnare un file per costruire una matrice di cui conosci già la sequenza è un lavoraccio, anche perchè dovresti comunque scriverlo. Tanto vale che ti costruiosca l'array in via automatica nel programma stesso. Se dovvessi essere d'accordo con la mia riflessione, potresti fare un esempio sulla sequenza che vorresti ottenere? Potrei allora tentare di suggeririti una soluzione più pratica rispetto alla gestione di un file esterno. :)Codice: [Seleziona]E' una matrice di servizio, ci devo mettere dei valori ben precisi ad inizio programma e poi non li tocco più, vanno solo letti.PRIVATE Numeri[37,6] AS BYTE
Il problema è proprio metterli, dovrei scrivere 222 istruzioni di assegnazione differenti, perchè i numeri non sono messi in una successione aritmetica ben precisa, ma secondo un certo ordine.
Choose non è quello che mi serve, non devo scegliere, ma assegnare dei valori.Ma in Choose puoi disporre i valori come vuoi, e poi li prendi come vuoi.
nell'array ci vanno i 37 numeri nell'ordine in cui sono disposti sulla ruota, con lo zero al centro, per avere una idea http://it.wikipedia.org/wiki/File:Roulette_wheel_it.png (http://it.wikipedia.org/wiki/File:Roulette_wheel_it.png), parte dal 5 e finisce al 10. Gli altri 5 elementi mi servono per sapere se il numero uscito e pari o dispari, nero o rosso, passe o manque e se appartiene alla 1a, 2a o 3a dozzina e colonna.Non conoscendo la disposizione dei 37 numeri nella ruota della roulette, ho cercato di capirne il meccanismo ed ho trovato una spiegazione dettagliata, tranne l'ultimo passo che descrive come sia avvenuta l'ulteriore passo per aumentare la casualità di disposizione dei numeri.
Quando Francois Blanc decise di togliere lo zero per attirare i clienti al suo casinò, si trovò con il problema di avere due rossi attaccati (27 e 1). Ne approfittò per disporre i numeri in maniera più casuale e non potendo cambiare il colore associato ad ogni numero (ormai consolidato) si concentrò sull'alternanza non solo tra nero e rosso, ma anche tra manque e passe.Secondo me andare a costruire un sistema di istruzioni di riempimento automatico dell'array diventa un'impresa ardua e poco ricorsiva, per le troppe eccezioni che bisogna gestire. É molto più semplice scrivere l'array già pieno al momento della sua dichiarazione.
La ruota francese quindi oltre ad aver mentenuto l'impossibilità di giocare due numeri confinanti ha messo all'opposto le coppie di chance: Rosso/Manque, Nero/Passe da una parte e Rosso/Passe, Nero /Manque dall'altra.
Public Sub Roulette()
Dim ySequenza As New Byte[37, 6]
ySequenza = [cByte("5"), cByte("24"), cByte("16"), cByte("33"), ....., cByte("0"), cByte("32"), cByte("154"), cByte("19"), ...... cByte("10"), cByte("1"),cByte("0"), cByte("0"), cByte("1") .....,cByte("2"), ....., cByte("0"), cByte("1"), cByte("0"),.....]
Elemento 0,0Quindi nella matrice che costruirei io a manina, occorre elencare prima tutti i numeri poi i contrassegni di Pari ( Cbyte("0") o Dispari Cbyte("1"), poi quelli di NeroCbyte("0") o RossoCbyte("1") e così via fino alla fine.
Elemento 0,1
Elemento 0,2
.....................
Elemento 0,36
Elemento 1,0
Elemento 1,1
Elemento 1,2
.......................
Elemento 1,36
......................
e così via.
ySequenza = [cByte("5"), cByte("24"), cByte("16"), cByte("33"), .....
Problema: come temevo, se faccio una unica istruzione:Un array così grande non l'avevo mai dichiarato. Hai ragione; ho provato anche definendolo come "String" e l'errore si manifesta anche con codesto tipo di struttura. Però dalla tua precedente risposta avevo capito che ti saresti indirizzato verso un array di tipo "String". Ma tu hai deciso così di mantenerlo nel formati byte? Io ho provato banalmente il passo seguente,tanto per vedere se funziona:Codice: [Seleziona]con tutti i 222 elementi di fila mi da errore Too many arguments , quindi devo spezzettarla in 4 o 5 righe come minimo. L'istruzione .Add va bene?ySequenza = [cByte("5"), cByte("24"), cByte("16"), cByte("33"), .....
Public Sub Roulette()
Dim i As Integer
Dim ii As Integer
Dim ySequenza As New String[37, 6] '
For i = 0 To 36
For ii = 0 To 5
ySequenza[i, ii] = Str(ii)
Next
Next
End
ySequenza[i, ii] = Str(ii)
Public $Sequenza As New String[37, 6]
Public Sub _new()
Dim i As Integer
Dim ii As Integer
Dim $Matrice0 As String[] = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37"]
Dim $Matrice1 As String[] = ["1°", "2°", "3°", "4°", "5°", "6°", "7°", "8°", "9°", "10°", "11°", "12°", "13°", "14°", "15°", "16°", "17°", "18°", "19°", "20°", "21°", "22°", "23°", "24°", "25°", "26°", "27°", "28°", "29°", "30°", "31°", "32°", "33°", "34°", "35°", "36°", "37°"]
Dim $Matrice2 As String[] = ["1.", "2.", "3.", "4.", "5.", "6.", "7.", "8.", "9.", "10.", "11.", "12.", "13.", "14.", "15.", "16.", "17.", "18.", "19.", "20.", "21.", "22.", "23.", "24.", "25.", "26.", "27.", "28.", "29.", "30.", "31.", "32.", "33.", "34.", "35.", "36.", "37."]
Dim $Matrice3 As String[] = ["1+", "2+", "3+", "4+", "5+", "6+", "7+", "8+", "9+", "10+", "11+", "12+", "13+", "14+", "15+", "16+", "17+", "18+", "19+", "20+", "21+", "22+", "23+", "24+", "25+", "26+", "27+", "28+", "29+", "30+", "31+", "32+", "33+", "34+", "35+", "36+", "37+"]
Dim $Matrice4 As String[] = ["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13", "a14", "a15", "a16", "a17", "a18", "a19", "a20", "a21", "a22", "a23", "a24", "a25", "a26", "a27", "a28", "a29", "a30", "a31", "a32", "a33", "a34", "a35", "a36", "a37"]
Dim $Matrice5 As String[] = ["ù1", "ù2", "ù3", "ù4", "ù5", "ù6", "ù7", "ù8", "ù9", "ù10", "ù11", "ù12", "ù13", "ù14", "ù15", "ù16", "ù17", "ù18", "ù19", "ù20", "ù21", "ù22", "ù23", "ù24", "ù25", "ù26", "ù27", "ù28", "ù29", "ù30", "ù31", "ù32", "ù33", "ù34", "ù35", "ù36", "ù37"]
For i = 0 To 36
$Sequenza[i, 0] = $Matrice0[i]
$Sequenza[i, 1] = $Matrice1[i]
$Sequenza[i, 2] = $Matrice2[i]
$Sequenza[i, 3] = $Matrice3[i]
$Sequenza[i, 4] = $Matrice4[i]
$Sequenza[i, 5] = $Matrice5[i]
Next
'----------------------------------------------------------------- istruzioni di prova ------------------------------------------------------------------------------------------------
For i = 0 To 36
For ii = 0 To 5
Print "ySequenza[" & i & "," & ii & "]= " & $Sequenza[i, ii]
Next
Next
End
$Sequenza[0,0]= 1
$Sequenza[0,1]= 1°
$Sequenza[0,2]= 1.
$Sequenza[0,3]= 1+
$Sequenza[0,4]= a1
$Sequenza[0,5]= ù1
$Sequenza[1,0]= 2
$Sequenza[1,1]= 2°
$Sequenza[1,2]= 2.
$Sequenza[1,3]= 2+
$Sequenza[1,4]= a2
$Sequenza[1,5]= ù2
$Sequenza[2,0]= 3
$Sequenza[2,1]= 3°
$Sequenza[2,2]= 3.
$Sequenza[2,3]= 3+
$Sequenza[2,4]= a3
$Sequenza[2,5]= ù3
...............................................
$Sequenza[36,0]= 37
$Sequenza[36,1]= 37°
$Sequenza[36,2]= 37.
$Sequenza[36,3]= 37+
$Sequenza[36,4]= a37
$Sequenza[36,5]= ù37
Molto buono, provo a fare così, grazie. :ok:Non é possibile. Dim funziona. Sei sicuro di avere dichiarato le DIM dentro la _new? Detto tipo di errore lo da, per le mie conoscenze, se dichiari le DIM fuori da qualsiasi procedura. Postami le DIM che ti danno errore. Vorrei capire perché. Come hai potuto notare dalla mia risposta precedente io ho dichiarato le matrici provvisorie con DIM; ho poi provato le istruzioni che ho inserite ed, a caricamento avvenuto della matrice definitiva, ho anche eseguito il Print del suo contenuto ed ha funzionato perfettamente, quindi avrai commesso un qualche errrore di scrittura. La dichiarazione delle matrici Public ti lascia impegnata, per tutta la durata del programma, l'area di memoria che hai riservato in fase di dichiarazione, mentre, se le dichiari Private , l'impegno di memoria è ridotto al solo periodo di stato attivo del file in cui sono state dichiarate. Però, potrebbe succedere che se il programma svolge il suo lavoro tuttio in FMain, sia la dichiarazione Public che Private , produce un impegno di memoria esteso all'intera durata del programma. Io ti consiglio, soprattutto per prendere una buona abitudine, a utilizzare variabili Public o Private solamente nei casi di effettiva inevitabile necessità. :)
le matrici temporanee ho dovuto metterle fuori dalla sub_new, cioè sopra, e dichiararle Public o Private, altrimenti mi da errore Dim inaspettato.
Oltre al fatto che la prima matrice provvisoria ho dovuto usarla, altrimenti altro errore. :-[
Non so che dirti, qui da me funziona così. :-\A meno che non dipenda dalla versione di Gambas, non conosco una particolare assegnazione di proprietà per potere riconoscere la validità della DIM. Io non ho mai avuto sorprese come la tua. Attualmente uso la versione 3-3.2.0. Esistono versioni successive che danno problemi vari. Non vorrei che la tua rientrasse in una di esse. Ho provato il tuo programma spostando la dichiarazione delle matrici provvisorie dentro la procedura "_new", modificandole ovviamente in DIM, ed ha funzionato perfettamente. Credo perciò che ti convenga aprire una nuova discussione sull'argomento. :-\
, se uso una Dim, da qualsiasi parte, mi da Unexpected Dim in...
C'è forse qualche settaggio particolare di Gambas che regola questa cosa?
Ah, per eliminare le matrici temporanee, va bene come ho fatto io o c'è una sua istruzione apposita? Ho guardato nell'help ma non mi sembra di aver trovato niente a riguardo.No, perché così la matrice é sempre presente, con un solo elemento impegnato, anche se vuoto. Meglio:
matrice0.Clear
matrice1.Clear
matrice2.Clear
matrice3.Clear
matrice4.Clear
matrice5.Clear