Novità

SpazioScript (per LuigiB o per chi può aiutarmi)

Giggio

Super Member >PLATINUM<
a parte che hai incollato roba che non è codice script .. devi incollare il codice m prima lo devi indentare .. faccio il pignolo .. mi sembra vada bene ma fammelo come si deve ...
 

Giggio

Super Member >PLATINUM<
ah ok ... vedo che hai corretto ...
ora quello che dobbiamo fare consiste nel trasformare in codice il ragionamento fatto prima sui registri.

iniziamo in modo semplice anche se dopo cambiamo .


nella ruotine GetColonna senza preoccuoparti per ora di niente
incrementa l'ultimo elemento dell'array aPuntatore

poi con un ciclo valoriza la colonna di sviluppo leggendo i numeri dalla griglia e usando gli indici del registro aPuntatore

for k = 1 to nClasse
aColonna (k) = ???????? come lo prendo il valore da aRighe ?
next
 

Edoardo_95

Advanced Member
Codice:
Class clsSviluppo
   Private aBNumDaSvil ' array boolean contenente i numeri da sviluppare
   Private nQNumeri ' quantita dei numeri da sviluppare
   Private nCombInt ' combinazioni integrali
   Private nClasse ' classe di sviluppo
   Private aRighe
   Private nQNumPerRiga
   Private aPuntatore
   Function InitSviluppo(aNumeri,Classe)
      nQNumeri = AlimentArrayNumDaSvil(aNumeri) 'quantità dei numeri da sviluppare ottenuto mediante un ciclo for degli elementi impostati a true di un array convertito boolean
      nCombInt = Combinazioni(nQNumeri,Classe) 'combinazioni integrali ottenuti mediante la function combinazioni sarà il valore restituito da InitSviluppo
      nClasse = Classe 'classe di sviluppo
      InitSviluppo = nCombInt
      If nCombInt > 0 Then
         Call AlimentaArrayRighe
         Call InitArrayPuntatore
      End If
   End Function
   Private Function AlimentArrayNumDaSvil(aNumeri)
      Dim k,Q
      aBNumDaSvil = ArrayNumeriToBool(aNumeri) 'conversione array numerico in arrey boolean
      Q = 0
      For k = 1 To UBound(aBNumDaSvil) 'Ciclo  gli elementi dell'array per contare i valori true (cioè i numeri selezionati)
         If aBNumDaSvil(k) = True Then '  se l'elemento è True vuol dire che il numero è stato usato
            Q = Q + 1 ' percio incremento la variabile Q che conteggia la quantita dei numeri usati
         End If
      Next
      AlimentArrayNumDaSvil = Q ' restituisco la quantità dei numeri
   End Function
   Function GetStringaNumDaSvil ' function che restituisce una stringa dei numeri del chiamante
      Dim s,k
      s = ""
      For k = 1 To UBound(aBNumDaSvil) ' ciclo l'aarray boolean dei numeri usati
         If aBNumDaSvil(k) = True Then '  se l'elemento è true vuol dire che il numero K è tra quelli usati
            s = s & k & "." ' effettuo una concatenazione degli elementi "k" impostati a true e quindi utilizzati
         End If
      Next
      GetStringaNumDaSvil = RimuoviLastChr(s,".") ' rimuovo l'ultimo punto che per forza di cose compare nella stringa costruita nel ciclo
   End Function
   Function GetQuantitaNumeriDaSvil ' function che ritorna la quantità dei numeri da sviluppare
      GetQuantitaNumeriDaSvil = nQNumeri
   End Function
   Private Sub AlimentaArrayRighe
      Dim aNumeri,k,y,j' contiene i numeri del pronostico convertiti dall'array boolean
      Call ArrayBNumToArrayNum(aBNumDaSvil,aNumeri) ' popolo aNumeri
      nQNumPerRiga =((nQNumeri - nClasse) + 1) 'che formula uso  per calcolare la quantita di numeri per singola riga della griglia
      ReDim aRighe(nClasse,nQNumPerRiga) ' dimensiono la griglia in modo opportuno
      For k = 1 To nClasse 'scorro le righe
         j = 0
         For y = k To(k - 1) + nQNumPerRiga 'per ogni riga alimento le colonne,prendo i numeri (aNumeri) a partire dalla variabile di controllo del ciclo esterno (k)
            j = j + 1
            aRighe(k,j) = aNumeri(y)
         Next
      Next
   End Sub
   Sub OutputARighe
      Dim k,j,s
      For k = 1 To nClasse
         s = ""
         For j = 1 To nQNumPerRiga
            s = s & Format2(aRighe(k,j)) & "."
         Next
         Call Scrivi(Format2(k) & ") " & RimuoviLastChr(s,"."))
      Next
   End Sub
   Private Sub InitArrayPuntatore
      Dim k
      ReDim aPutatore(nClasse)
      For k = 1 To nClasse - 1
         aPuntatore(k) = 1
      Next
      aPuntatore(nClasse) = 0
   End Sub
   Function GetColonna(aColonna)
   End Function
End Class
Sub Main
   Dim cSvil
   Set cSvil = New clsSviluppo ' inizializzo la classe
   Dim aNumDaSvil,nClasse,nCombInt,nQNumeri
   Dim aColonna
   nQNumeri = ScegliNumeri(aNumDaSvil) ' scelta dinamica dei numeri da sviluppare
   nClasse = ScegliEsito(2,2,90) ' classe di sviluppo
   nCombInt = cSvil.InitSviluppo(aNumDaSvil,nClasse) ' inizializzo lo sviluppo
   If nCombInt > 0 Then
      Do While cSvil.GetColonna(aColonna)
      Loop
      Call Scrivi(" " & cSvil.GetStringaNumDaSvil)
      Call Scrivi
      Call Scrivi(" Quantità numeri        :" & " " & cSvil.GetQuantitaNumeriDaSvil)
      Call Scrivi(" Classe                 :" & " " & nClasse)
      Call Scrivi(" Combinazioni integrali :" & " " & nCombInt)
      Call Scrivi
      Call cSvil.OutputARighe
   Else
      MsgBox "Impossibile sviluppare",vbCritical
   End If
 
Ultima modifica:

Giggio

Super Member >PLATINUM<
ora quello che dobbiamo fare consiste nel trasformare in codice il ragionamento fatto prima sui registri.

iniziamo in modo semplice anche se dopo cambiamo .


nella ruotine GetColonna senza preoccuoparti per ora di niente
incrementa l'ultimo elemento dell'array aPuntatore

poi con un ciclo valoriza la colonna di sviluppo leggendo i numeri dalla griglia e usando gli indici del registro aPuntatore

for k = 1 to nClasse
aColonna (k) = ???????? come lo prendo il valore da aRighe ?
next
 

Edoardo_95

Advanced Member
Mmm penso in questo modo

Codice:
   Function GetColonna(aColonna)
      Dim k,j
      aPuntatore(nClasse) = 1
      For k = 1 To nClasse
         For j = 1 To nQNumPerRiga
            aColonna(k) = aRighe(k,j)
         Next
         Next
   End Function

no ho sbagliato ... devo usare gli indici del registro aPuntatore ....
 
Ultima modifica:

Giggio

Super Member >PLATINUM<
esatto e tra l'altro ti ho detto di incementare l'ultimo elemento di aPuntatore , non di metterlo fisso ad 1
non devi fare due cicli ...devi mettere il codice dov io ho messo il ???
 
Ultima modifica:

Edoardo_95

Advanced Member
Ok penso di esserci

Codice:
   Function GetColonna(aColonna)
      Dim k
      aPuntatore(nClasse) = aPuntatore(nClasse) + 1
      For k = 1 To nClasse
         aColonna(k) = aRighe(k,aPuntatore)
      Next
   End Function
 

Edoardo_95

Advanced Member
Codice:
   Function GetColonna(aColonna)
      Dim k
      aPuntatore(nClasse) = aPuntatore(nClasse) + 1
      For k = 1 To nClasse
         aColonna(k) = aRighe(k,1)
      Next
   End Function
 

Giggio

Super Member >PLATINUM<
non ci siamo ... quell'1 fisso a che serve ? Ti sei scordato che dobbiamo usare i valori contenuti in
aPuntatore ?

dobbiamo identificare riga e colonna della matrice aRighe per prendere il valore da scrivere nella colonna di sviluppo.
 

Edoardo_95

Advanced Member
Quindi ...

Codice:
Function GetColonna(aColonna)
      Dim k
      aPuntatore(nClasse) = aPuntatore(nClasse) + 1
      For k = 1 To nClasse
         aColonna(k) = aRighe(k,aPuntatore(nClasse))
      Next
   End Function
 

Giggio

Super Member >PLATINUM<
nClasse è un valore fisso .. secondo te va bene ?
visto che nClasse vale 3 tu scriveresti in tutte e 3 l eposizioni di aColonna il numero presente alla riga k ma alla colonna 3 fissa .... sempre quello per tutte e tre le caselle ...
Come la indichi la riga di aRighe ?
 

Edoardo_95

Advanced Member
Codice:
Function GetColonna(aColonna)
      Dim k
      aPuntatore(nClasse) = aPuntatore(nClasse) + 1
      For k = 1 To nClasse
         aColonna(k) = aRighe(k,aPuntatore(k))
      Next
   End Function
 

Giggio

Super Member >PLATINUM<
oh cosi va bene.

ora vedi questa istruzione

aPuntatore(nClasse) = aPuntatore(nClasse) + 1

sottoponila ad una condizione , cioè se il valore incrementato è <= al valore massimo possibile allora lo
incrementi senno no

puoi creare una variabile temporanea , alla quale assegnerai il valore incrementato , se qusta variabile ha un valore <= a quello consentito allora la usi per valorizzare aPuntatore e chiudi l'if , dentro l'if deve rimanere pure il ciclo k
 

Edoardo_95

Advanced Member
Ok allora se ho capito bene ...

Codice:
   Function GetColonna(aColonna)
      Dim k,j
      aPuntatore(nClasse) = aPuntatore(nClasse) + 1
      j = aPuntatore(nClasse) + 1
      If j <= nQNumPerRiga Then
         For j = 1 To nQNumPerRiga
            aPuntatore(nClasse) = aPuntatore(nClasse) + 1
         Next
      End If
      For k = 1 To nClasse
         aColonna(k) = aRighe(k,aPuntatore(k))
      Next
   End Function
End Class
 

Edoardo_95

Advanced Member
Codice:
   Function GetColonna(aColonna)
      Dim k,j
      If j <= nQNumPerRiga Then
         For j = 1 To nQNumPerRiga
            aPuntatore(j) = aPuntatore(j) + 1
         Next
      End If
      For k = 1 To nClasse
         aColonna(k) = aRighe(k,aPuntatore(k))
      Next
   End Function
 

Giggio

Super Member >PLATINUM<
cioè j è una variabile della routine , non la valorizzi mai quindi non ha valore e poi la usi per vedere se è minore di
nQNumPerRiga .. stai scrivendo a caso ?
 

Edoardo_95

Advanced Member
Allora vediamo se ora ho capito

Codice:
   Function GetColonna(aColonna)
      Dim k,ValIncr
      aPuntatore(nClasse) = aPuntatore(nClasse) + 1
      ValIncr = aPuntatore(nClasse) 'creo una variabile temporanea alla quale assegno il valore incrementato
      If ValIncr <= nQNumPerRiga Then 'se la variabile temporanea <= del valore massimo consentito, ovvero nQNumPerRiga che nell'esempio è 8
         For ValIncr = 1 To nQNumPerRiga 'creo un ciclo for con la variabile temporanea a partire dall'indice uno fino al valore massimo consentito
            aPuntatore(nClasse) = ValIncr 'valorizzo aPuntatore(nClasse) con l'indice del ciclo for ValIncr
         Next
      End If
      For k = 1 To nClasse
         aColonna(k) = aRighe(k,aPuntatore(k))
      Next
   End Function
 

Ultima estrazione Lotto

  • Estrazione del lotto
    venerdì 19 aprile 2024
    Bari
    39
    05
    81
    89
    73
    Cagliari
    56
    21
    01
    90
    03
    Firenze
    05
    56
    68
    27
    09
    Genova
    42
    50
    90
    27
    83
    Milano
    16
    71
    29
    85
    04
    Napoli
    29
    19
    23
    63
    50
    Palermo
    35
    54
    33
    57
    61
    Roma
    17
    29
    43
    55
    74
    Torino
    69
    60
    03
    01
    26
    Venezia
    05
    57
    59
    43
    34
    Nazionale
    30
    43
    64
    65
    21
    Estrazione Simbolotto
    Genova
    02
    20
    25
    12
    19

Ultimi Messaggi

Alto