Novità

SpazioScript (per LuigiB o per chi può aiutarmi)

Aspetta .. ma allora devo inserire un ciclo for per quanto riguarda nQNumPerRiga ....

Codice:
For y = 1 to nQNumPerRiga
next

però in questo caso i conti non tornano ... perché avrei

con K = 1

aRighe(1,1) = aNumeri(1)
aRighe(1,1) = aNumeri(2)
aRighe(1,1) = aNumeri(3)

con K = 2

aRighe(2,2) = aNumeri(2)
aRighe(2,2) = aNumeri(3)
aRighe(2,2) = aNumeri(4)

con K = 3

aRighe(3,3) = aNumeri(3)
aRighe(3,3) = aNumeri(4)
aRighe(3,3) = aNumeri(5)

devo riuscire a far in modo tale da rendere statica la classe fin quando non termino le colonne ... ma a livello di codice o inserisco un contatore o un ciclo for ... ma in entrambi i casi non riesco a replicare l'esempio che hai scritto tu....
 
ciao , forse ti sei confuyso perche io stesso avevo corretto il post...

Righe(1,1) = aNumeri(1)
aRighe(1,2) = aNumeri(2)
aRighe(1,3) = aNumeri(3)

facciamo un esempio come dovrebeb esser con K = 2

aRighe(2,1) = aNumeri(2)
aRighe(2,2) = aNumeri(3)
aRighe(2,3) = aNumeri(4)

facciamo un esempio come dovrebeb esser con K = 3

aRighe(3,1) = aNumeri(3)
aRighe(3,2) = aNumeri(4)
aRighe(3,3) = aNumeri(5)
 
Quindi non va bene con un ciclo for ... ma allora guardando bene lo schema.. la coordinata della colonna come la rendo dinamica in base alla classe?
Dovrei suddividere la riga in celle in base a nQNumPerRiga ... ma non ho capito come fare

Codice:
   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
         For j = 1 To nQNumPerRiga
            For y = k To UBound(aNumeri) 'per ogni riga alimento le colonne,prendo i numeri (aNumeri) a partire dalla variabile di controllo del ciclo esterno (k)
               aRighe(k,j) = aNumeri(y)
            Next
         Next
      Next
   End Sub

nessun output infatti
 
Ultima modifica:
intanto hai usato 3 cicli sapevi che ce ne volevano 2 ... quindi gia non va bene .



abbiamo una griglia 3 righe e di 3 colonne
abbiamo un array di 5 elementi

alla prima riga valorizziamo i numeri contenuti da 1 a 3 dell'array
alla seconda riga i numeri contenuti da 2 a 4
alla terza quelli da 3 a 5

quindi c'è un ciclo interno che parte da un numero che coincide col numero di riga ,( la riga 1 parte dall'elemento 1 dell'array , la riga 2 dal 2 ecc ..) e deve prendere i prossimi 3 elemti (compreso il primo) dall'array.
Se io ti dico parti da 3 tu devi sommare a 3 altri 2 per arrivare al 5 con il 3 compreso prendendo 3 numeri.


prova quest oscript in una nuova finestra

Codice:
Option Explicit
Sub Main
   Dim nClasse,nQNumPerRiga  , k , j
   nClasse = 3
   nQNumPerRiga = 3
   For k = 1 To nClasse 'scorro le righe
      For j = k To(k - 1) + nQNumPerRiga
         Scrivi k & "." & j
      Next
      Scrivi
   Next
End Sub
 
Ora ho capito quando dicevi "nessun limite superiore" ...

Codice:
   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
         For j = k To(k - 1) + nQNumPerRiga
         Next
      Next
   End Sub

In questo modo alimento le colonne .. prendendo sempre una quantità pari a nQNumPerRiga in funzione della classe che farà in modo di "saltare" di una casella per ogni riga arrivando sempre al limite massimo dell'array numeri....
 
allora non ti rimane che valorizzare la matrice ...fai attenzione perche la matrice ha meno elementi dell'array dei numeri , nel senso alla terza riga ultima colonna tu devi prendere aNumeri(5) ma devi valorizzare aRighe(3,3) quindi per individuare il giusto indice per ridfferirsi alal giusta colonan da valorizzare devi fre il calcolo appropriato o introdurr ee un contatore che si azzeri sempre prim a di entrare nel ciclo j
 
Il contatore quindi dovrebbe essere questo...

Codice:
   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
         y = 0
         For j = 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)
           y = j - k + 1           
         Next       
      Next     
   End Sub

però se io metto

Codice:
aRighe(k,y) = aNumeri(j)

non va comunque ....ma il contatore dovrebbe essere questo
 
Ah no scherzavo .. semplicemente non lanciavo AlimentaArrayRighe in rutine ahahaha

Codice:
Option Explicit
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
   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
      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 = y - k + 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
End Class
Sub Main
   Dim cSvil
   Set cSvil = New clsSviluppo ' inizializzo la classe
   Dim aNumDaSvil,nClasse,nCombInt,nQNumeri
   nQNumeri = ScegliNumeri(aNumDaSvil) ' scelta dinamica dei numeri da sviluppare
   nClasse = ScegliEsito(4,2,90) ' classe di sviluppo
   nCombInt = cSvil.InitSviluppo(aNumDaSvil,nClasse) ' inizializzo lo sviluppo
   If nCombInt > 0 Then
      Call Scrivi(" " & cSvil.GetStringaNumDaSvil)
      Call Scrivi
      Call Scrivi(" Quantità numeri        :" & " " & cSvil.GetQuantitaNumeriDaSvil)
      Call Scrivi(" Classe                 :" & " " & nClasse)
      Call Scrivi(" Combinazioni integrali :" & " " & nCombInt)
      Call Scrivi
      Call Scrivi(" " & cSvil.OutputARighe)
   Else
      MsgBox "Impossibile sviluppare",vbCritical
   End If
End Sub

Immagine.jpg
 
lo sospettavo ...
ma anche qui c'è un errore

Call Scrivi(" " & cSvil.OutputARighe)


la routine OutputARighe mica torna una stringa ... scrive da sola in output ...
fai la modifca e ripostra il tutto dopo cena ti spiego il resto.
 
Perfetto. Ecco qui :)

Codice:
Option Explicit
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
   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
      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 = y - k + 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
End Class
Sub Main
   Dim cSvil
   Set cSvil = New clsSviluppo ' inizializzo la classe
   Dim aNumDaSvil,nClasse,nCombInt,nQNumeri
   nQNumeri = ScegliNumeri(aNumDaSvil) ' scelta dinamica dei numeri da sviluppare
   nClasse = ScegliEsito(4,2,90) ' classe di sviluppo
   nCombInt = cSvil.InitSviluppo(aNumDaSvil,nClasse) ' inizializzo lo sviluppo
   If nCombInt > 0 Then
      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
End Sub
 
ok allora ho visto che nella funzione che alimenta la griglia hai messo una nuova variabile scegliendo la strada del contatore , ma poi hai fatto un calcolo.
Cioe se usavi il contatore bastava fare j = j +1 dentro al ciclo interno
se invece volevi usare i lcalcolo per l'indice potevi scrivere

Codice:
aRighe(k, y - k + 1) = aNumeri( y )

comunque funziona sta apposto.
Ora per capire come lavorerà la routine che sviluppa le colonne e visto che la griglia la calcola lo script facciamo un esempio a mano con 10 numeri sviluppo terno.

ecco la griglia

1600625818675.png


se io ti dico dammi la colonna
1
1
1

tu che colonna mi daresti ?
 
perfetto quindi sei daccordo che potremmo avere un array di 3 elementi dove ciascun elemento identifica il numero da prelevare dallla griglia nella tale riga,

redim aPuntatore (3)
aPuntatore (1) = 1
aPuntatore (2) = 1
aPuntatore (3) = 1

se io ti chiedo dammi la colonna successiva partendo dall'array sopra , come modificheresti l'array per prelevare i giusti numeri ?
 
Ah no hai ragione scusa.

redim aPuntatore (3)
aPuntatore (1) = 1
aPuntatore (2) = 1
aPuntatore (3) = 2

andrà sempre da 1 fino alla classe ... ciò che cambia è l'identificazione della colonna ... perché una volta terminati i valori dell'ultima riga salirà di registro.
 
oh bravo , quindi possiamo dire che ogni volta che io ti dico dammi la colonna successiva , tu incrementerai l'ultimo valore dell'array puntatore.

Che succede se abbiamo l'array
aPuntatore (1) = 1
aPuntatore (2) = 1
aPuntatore (3) = 8

come si modifica a questo punto l'array puntatore per ottenere la colonna successiva ?
 
Ultima modifica:
ottimo ! Bravo !

Quindi abbiamo visto che quando l'ultimo registro non puo salire piu , si va al registro precedente e si incrementa quello ,
Poi il registro successivo (quello che ci aveva costretti a salire) viene aggiornato allo stesso valore . ora di elementi successivi a quello incrementato ce n'è solo 1 , ma ogni volta che incrementiamo un registro tutti i successivi a quello devono partire dallo stesso valore.


ora alla luce di questa regola che succede se abbiamo e voglio la successiva ?

Puntatore (1) = 1
aPuntatore (2) = 8
aPuntatore (3) = 8
 

Ultima estrazione Lotto

  • Estrazione del lotto
    martedì 14 gennaio 2025
    Bari
    41
    25
    12
    73
    55
    Cagliari
    54
    20
    48
    32
    67
    Firenze
    75
    23
    68
    10
    38
    Genova
    33
    27
    81
    70
    64
    Milano
    68
    01
    64
    86
    87
    Napoli
    47
    75
    45
    10
    21
    Palermo
    55
    86
    33
    53
    70
    Roma
    88
    78
    61
    06
    07
    Torino
    76
    08
    23
    61
    82
    Venezia
    25
    15
    49
    21
    81
    Nazionale
    70
    10
    32
    78
    07
    Estrazione Simbolotto
    Bari
    07
    14
    28
    45
    31

Ultimi Messaggi

Indietro
Alto