Novità

SpazioScript (per LuigiB o per chi può aiutarmi)

Giggio

Super Member >PLATINUM<
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 ..


prima di intervenire su aPuntatore cambiando uno dei suoi valori devi verificare se il valore è valido...
devi modificare un po ' il codice che hai scritto ... tra l'altro non mi sembra che il ciclo k lo hai messo dentro l'if ...
 

Edoardo_95

Advanced Member
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
      For ValIncr = 1 To nQNumPerRiga 'creo un ciclo for con la variabile temporanea a partire dall'indice uno fino al valore massimo consentito
      If ValIncr <= nQNumPerRiga Then 'se la variabile temporanea <= del valore massimo consentito, ovvero nQNumPerRiga che nell'esempio è 8
            aPuntatore(nClasse) = nQNumPerRiga(ValIncr) 'valorizzo aPuntatore(nClasse) con l'indice del ciclo for ValIncr       
      End If
      Next
      For k = 1 To nClasse
         aColonna(k) = aRighe(k,aPuntatore(k))
      Next
   End Function
 

Edoardo_95

Advanced Member
ahaha un pò di pazienza per un povero mortale ?????

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

Giggio

Super Member >PLATINUM<
Codice:
Function GetColonna(aColonna)
      Dim k,ValIncr
      aPuntatore(nClasse) = aPuntatore(nClasse) + 1 <----Lo devi fare dentro l'if  se l'incremento è un valore valido
      ValIncr = aPuntatore(nClasse)
      If ValIncr <= nQNumPerRiga Then
         aPuntatore(nClasse) = ValIncr
         For k = 1 To nClasse
            aColonna(k) = aRighe(k,aPuntatore(k))
         Next
      End If
   End Function
 

lotto_tom75

Advanced Premium Member
ahaha un pò di pazienza per un povero mortale ?????

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


:LOL:

Un saluto a tutti e due al mortale e non! ? Siete ?issimi! ??? ;):)
 
Ultima modifica:

Edoardo_95

Advanced Member
Quindi se devo farlo dentro l'IF

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

Giggio

Super Member >PLATINUM<
oh .. finalmente ...

ora inserisci un else dentro l 'if
nel caso in cui entra nel caso
ValIncr <= nQNumPerRiga la funzione tornerà true
senno torenerà false
 

Edoardo_95

Advanced Member
mmm cosi?

Codice:
   Function GetColonna(aColonna)
      Dim k,ValIncr
      ValIncr = aPuntatore(nClasse) + 1
      If ValIncr <= nQNumPerRiga Then
         GetColonna(aColonna) = True
         aPuntatore(nClasse) = ValIncr
         For k = 1 To nClasse
            aColonna(k) = aRighe(k,aPuntatore(k))
         Next
      ElseIf ValIncr > nQNumPerRiga Then
         GetColonna(aColonna) = False
      End If
   End Function
 

Giggio

Super Member >PLATINUM<
ok , ora nella sub main ti sei dimenticato di ridimensionare aColonne lo devi fare prima di entrare nel ciclo do while GetCollonna,

poi delntro al ciclo do inserisci queste righe e prova uno sviluppo , se tutto va bene ti dovrebbe sviluppare una parte di colonne , prova e fammi sapere .. dopo modificheremo la funzione GetColonne , ora prova cosi


modifica la riga dove la funzione GetColonna prende il valore di ritorno /true false , cosi è sbagliata l'indice non ci vuole





Codice:
   Call Scrivi(StringaNumeri(aColonna,,True))
            
            If ScriptInterrotto Then Exit Do
 
Ultima modifica:

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 aPuntatore(nClasse)
      For k = 1 To nClasse - 1
         aPuntatore(k) = 1
      Next
      aPuntatore(nClasse) = 0
   End Sub
   Function GetColonna(aColonna)
      Dim k,ValIncr
      ValIncr = aPuntatore(nClasse) + 1
      If ValIncr <= nQNumPerRiga Then
         GetColonna = True
         aPuntatore(nClasse) = ValIncr
         For k = 1 To nClasse
            aColonna(k) = aRighe(k,aPuntatore(k))
         Next
      ElseIf ValIncr > nQNumPerRiga Then
         GetColonna = False
      End If
   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) = True
         Call Scrivi(StringaNumeri(aColonna,,True))
         If ScriptInterrotto Then Exit Do
      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
End Sub
 

Giggio

Super Member >PLATINUM<
devi dimensionare
aColonna
prima del ciclo do alla dimensione pari alla classe ,aColonna è un vettore di tanti elmenti quanto è la classe
 

Edoardo_95

Advanced Member
Fatto, ora funziona

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 aPuntatore(nClasse)
      For k = 1 To nClasse - 1
         aPuntatore(k) = 1
      Next
      aPuntatore(nClasse) = 0
   End Sub
   Function GetColonna(aColonna)
      Dim k,ValIncr
      ValIncr = aPuntatore(nClasse) + 1
      If ValIncr <= nQNumPerRiga Then
         GetColonna = True
         aPuntatore(nClasse) = ValIncr
         For k = 1 To nClasse
            aColonna(k) = aRighe(k,aPuntatore(k))
         Next
      ElseIf ValIncr > nQNumPerRiga Then
         GetColonna = False
      End If
   End Function
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(2,2,90) ' classe di sviluppo
   nCombInt = cSvil.InitSviluppo(aNumDaSvil,nClasse) ' inizializzo lo sviluppo
   If nCombInt > 0 Then
      ReDim aColonna(nClasse)
      Do While cSvil.GetColonna(aColonna) = True
         Call Scrivi(StringaNumeri(aColonna,,True))
         If ScriptInterrotto Then Exit Do
      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
End Sub
 

Giggio

Super Member >PLATINUM<
ok quindi hai visto che quando lo script con GetColonna non riesce piu ad incrementare l'ultima casella di aPuntatore torna false e ti dice che le colonne sono finite.
Ci sei ?
 

Ultima estrazione Lotto

  • Estrazione del lotto
    giovedì 28 marzo 2024
    Bari
    49
    73
    67
    86
    19
    Cagliari
    64
    36
    37
    02
    04
    Firenze
    66
    27
    44
    90
    17
    Genova
    09
    44
    78
    85
    19
    Milano
    70
    14
    47
    38
    27
    Napoli
    80
    29
    28
    45
    39
    Palermo
    54
    59
    78
    47
    62
    Roma
    17
    22
    49
    52
    88
    Torino
    71
    35
    75
    74
    60
    Venezia
    40
    84
    02
    63
    29
    Nazionale
    08
    13
    44
    69
    85
    Estrazione Simbolotto
    Firenze
    06
    35
    16
    18
    05

Ultimi Messaggi

Alto