Novità

SpazioScript (per LuigiB o per chi può aiutarmi)

Edoardo_95

Advanced Member
Io ce la metto tutta ? ? ? ?

Codice:
   Function GetColonna(aColonna)
      Dim k,ValIncr
      Dim nPuntatore
      nPuntatore = nClasse    
      ValIncr = aPuntatore(nPuntatore) + 1
      Do While ValIncr > nQNumPerRiga
         nPuntatore = nPuntatore - 1
         If nPuntatore = 0 Then Exit do
         ValIncr = aPuntatore(nPuntatore) + 1
      Loop
      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
 

Giggio

Super Member >PLATINUM<
lo devi fare dentro al ciclo , è li che nPuntatore si decrementa e potrebeb diventare 0, poi devi uscire dal ciclo non dalla funzione ....
 

Giggio

Super Member >PLATINUM<
ok , allora quand'è che nPuntatore diventa 0 ? Quando non è possibile incrementare aPuntatore(1) ovvero il registro della prima casella.
Questo in altre parole vuol dire che il sistema è stato sviluppato.

ora al posto di questa if

If ValIncr <= nQNumPerRiga Then


devi testare se nPuntatore fatte tutte le cose precedenti è ancora >0 quindi sostituisci l'if con questa condizione.
testa se nPuntatore è >0
 

Edoardo_95

Advanced Member
Codice:
  Function GetColonna(aColonna)
      Dim k,ValIncr
      Dim nPuntatore
      nPuntatore = nClasse
      ValIncr = aPuntatore(nPuntatore) + 1
      Do While ValIncr > nQNumPerRiga
         nPuntatore = nPuntatore - 1
          If nPuntatore = 0 Then Exit Do
         ValIncr = aPuntatore(nPuntatore) + 1
      Loop
      If nPuntatore > 0 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
 

Giggio

Super Member >PLATINUM<
benissimo , abbiamo quasi fatto

GetColonna = True
mettilo prima di else if dopo il next.



rimuovi questa riga
aPuntatore(nClasse) = ValIncr

ora ti ricordi il ragionamento dei registri ? Quando incrementavamo un registro tutti i successivi dovevano prendere lo stesso valore.
Quindi usciti dal ciclo do ed entrati nel caso in cui nPuntaore è >0 tutti gli elementi di aPuntatore a partire da nPuntatore devono diventare = a valIncr
 

Edoardo_95

Advanced Member
Codice:
   Function GetColonna(aColonna)
      Dim k,ValIncr,j
      Dim nPuntatore
      nPuntatore = nClasse
      ValIncr = aPuntatore(nPuntatore) + 1
      Do While ValIncr > nQNumPerRiga
         nPuntatore = nPuntatore - 1
         If nPuntatore = 0 Then Exit Do
         ValIncr = aPuntatore(nPuntatore) + 1
      Loop
      If nPuntatore > 0 Then
         For j = nPuntatore To nClasse
            aPuntatore(j) = ValIncr
            Next
            For k = 1 To nClasse
               aColonna(k) = aRighe(k,aPuntatore(k))           
            Next
            GetColonna = True
         ElseIf ValIncr > nQNumPerRiga Then
            GetColonna = False
         End If
   End Function
 
Ultima modifica:

Giggio

Super Member >PLATINUM<
porcca la puttana eva chi ti ha deto di modificare il ciclo che legge la colonna ?
ch e vuol dire questo ha senso ?
For ValIncr = nPuntatore To aPuntatore

devi inserire un ciclo che valorizza gli elementi di aPuntatore a partire da nPuntatore fino a nClasse con valIncr
 

Giggio

Super Member >PLATINUM<
o mi stai prendendo in giro o ahime non hai capito un cazzo di quelllo che abbiamo fatto ... meno male che abbiamo finito ...
 

Edoardo_95

Advanced Member
Fatto

Codice:
   Function GetColonna(aColonna)
      Dim k,ValIncr,j
      Dim nPuntatore
      nPuntatore = nClasse
      ValIncr = aPuntatore(nPuntatore) + 1
      Do While ValIncr > nQNumPerRiga
         nPuntatore = nPuntatore - 1
         If nPuntatore = 0 Then Exit Do
         ValIncr = aPuntatore(nPuntatore) + 1
      Loop
      If nPuntatore > 0 Then
         For j = nPuntatore To nClasse
            aPuntatore(j) = ValIncr
            Next
            For k = 1 To nClasse
               aColonna(k) = aRighe(k,aPuntatore(k))
            Next          
            GetColonna = True
         ElseIf nPuntatore = 0 Then
            GetColonna = False
         End If
   End Function
 
Ultima modifica:

Giggio

Super Member >PLATINUM<
bhe se ripeti gli stessi errori che ti correggo la pazienza la perdo si ... comnque se lo script funziona ristudiatelo bene perche capiti questi meccanismi potrai fare qualsiasi altro script , viceversa se non li ccapisci come si deve non potrai che limitarti a taglia e cuci senza sapere nemmeno bene che fai ...
ciao ..
 

joe

Advanced Member >PLATINUM PLUS<
Ciao Giggio,

Pur vero che è difficilotto trovare il percorso esatto

nascosto, tra suggerimenti, errori e correzioni.

Tuttavia c'è.

La lettura pur complicata da queste appendici, per me, è interessante ed utile.

Molto.

Dunque aggiungo il mio grazie sia a te per quello che "hai fatto" e ad Edoardo,

che ha saputo proporre una richiesta dalla quale è derivata questa

collezione di suggerimenti, strategie, soluzioni ed esempi di codice.

:) Buona Giornata.
 

Giggio

Super Member >PLATINUM<
Buongiorno Joe, mi fa picere quanto hai scritto.
Edoardo in prima persona ha provato a seguirmi , riconosco che il ragionamento e l'implementazione per chi è alle prime armi poteva risultare difficile , i passi però li abbiamo sviscerati tutti a partire dal ragionamento alla base che avrebbe consentito teoricamente l'elaborazione con carta e penna.
Lo scripter deve trasformare in codice ciò che farebbe a mano.
Abbiamo usato una classe per incapsulare in essa tutto il codice necessario allo sviluppo di un sistema. In modo che il chiamante istanziata una o piu classi nello script possa sfruttarne i metodi

Per completezza posto la classe finita anche se Edoardo l'ha già ottenuta.





Codice:
Option Explicit
Class clsSviluppo
   Private aBNumDaSvil
   Private nQNumeri
   Private nCombInt
   Private nClasse
   Private aRighe
   Private nQNumPerRiga
   Private aPuntatore
   Private nSviluppate
   Function InitSviluppo(aNumeri,Classe)
      nQNumeri = AlimentArrayNumDaSvil(aNumeri)
      nCombInt = Combinazioni(nQNumeri,Classe)
      nClasse = Classe
      nSviluppate = 0
      If nCombInt > 0 Then
         Call AlimentaArrayRighe
         Call InitArrayPuntatore
      End If
      InitSviluppo = nCombInt
   End Function
   Function GetQuantitaNumeriDaSvil
      GetQuantitaNumeriDaSvil = nQNumeri
   End Function
   Function GetStringaNumDaSvil
      Dim s,k
      s = ""
      For k = 1 To UBound(aBNumDaSvil)
         If aBNumDaSvil(k) Then
            s = s & Format2(k) & "."
         End If
      Next
      GetStringaNumDaSvil = RimuoviLastChr(s,".")
   End Function
   Private Sub InitArrayPuntatore
      Dim k
      ReDim aPuntatore(nClasse)
      For k = 1 To nClasse - 1
         aPuntatore(k) = 1
      Next
      aPuntatore(k) = 0
   End Sub
   Function GetComb(aComb)
      Dim nTmp,K,nPuntatore
      nPuntatore = nClasse
      nTmp = aPuntatore(nPuntatore) + 1
      Do While nTmp > nQNumPerRiga
         nPuntatore = nPuntatore - 1
         If nPuntatore <= 0 Then Exit Do
         nTmp = aPuntatore(nPuntatore) + 1
      Loop
      If nPuntatore > 0 Then
         For K = nPuntatore To nClasse
            aPuntatore(K) = nTmp
         Next
         ReDim aComb(nClasse)
         For K = 1 To nClasse
            aComb(K) = aRighe(K,aPuntatore(K))
         Next
         nSviluppate = nSviluppate + 1
         GetComb = True
      Else
         GetComb = False
      End If
   End Function
   Function GetQuantitaSviluppate
      GetQuantitaSviluppate = nSviluppate
   End Function
   Private Function AlimentArrayNumDaSvil(aNumeri)
      Dim k,q
      aBNumDaSvil = ArrayNumeriToBool(aNumeri)
      For k = 1 To 90
         If aBNumDaSvil(k) Then
            q = q + 1
         End If
      Next
      AlimentArrayNumDaSvil = q
   End Function
   Private Sub AlimentaArrayRighe
      Dim nRiga,k,aNumeri
      Call ArrayBNumToArrayNum(aBNumDaSvil,aNumeri)
       
      nQNumPerRiga =(nQNumeri - nClasse) + 1
      ReDim aRighe(nClasse,nQNumPerRiga)
      For nRiga = 1 To nClasse
         'i = 0
         For k = nRiga To(nRiga + nQNumPerRiga) - 1 '(nQNumeri - nClasse) + nRiga
            ' i = i + 1
            ' i = (k - nRiga )+1
            aRighe(nRiga,(k - nRiga) + 1) = aNumeri(k)
         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
   Dim aNumDaSvil,nClasse,nCombInt,nQNumeri
   Dim aColonna
   Set cSvil = New clsSviluppo
   nClasse = ScegliEsito(3,2,90)
   Call ScegliNumeri(aNumDaSvil)
   nCombInt = cSvil.InitSviluppo(aNumDaSvil,nClasse)
   If nCombInt Then
      nQNumeri = cSvil.GetQuantitaNumeriDaSvil
      Scrivi cSvil.GetStringaNumDaSvil
      Scrivi
      Scrivi "Quantita numeri        : " & nQNumeri
      Scrivi "Classe                 : " & nClasse
      Scrivi "Combinazioni integrali : " & nCombInt
      Scrivi
      cSvil.OutputARighe
      Scrivi
      Do While cSvil.GetComb(aColonna)
         Call Scrivi(StringaNumeri(aColonna,,True))
         Messaggio cSvil.GetQuantitaSviluppate
         If ScriptInterrotto Then Exit Do
      Loop
      Scrivi
      Scrivi "Sviluppate : " & cSvil.GetQuantitaSviluppate
   Else
      MsgBox "Impossibile sviluppare",vbCritical
   End If
End Sub
 

lotto_tom75

Advanced Premium Member
Anche io non posso che rinnovare la mia stima e i miei ringraziamenti più sinceri verso il divino sergente Hartman ?‍♂️? ? e il suo prodigo super power allievo ?‍♂️?‍?. Siete stati veramente il top del top ?????:)
 

claudio8

Premium Member
Che dire ... Grande Giggio e Bravo Edoardo.

Una bella barra di avanzamento elaborazione manca...

Call AvanzamentoElab(1, nCombInt,cSvil, GetQuantitaSviluppate) nel ciclo Do ..... loop in Sub Main ed al Messaggio aggiungerei &" di " & nCombInt

saluti
 

Ultima estrazione Lotto

  • Estrazione del lotto
    martedì 16 aprile 2024
    Bari
    49
    10
    76
    62
    26
    Cagliari
    42
    80
    16
    39
    65
    Firenze
    58
    22
    11
    86
    40
    Genova
    79
    14
    36
    51
    44
    Milano
    25
    27
    16
    77
    79
    Napoli
    70
    04
    51
    49
    71
    Palermo
    61
    65
    76
    53
    43
    Roma
    70
    86
    68
    80
    47
    Torino
    17
    71
    64
    72
    40
    Venezia
    22
    42
    39
    72
    30
    Nazionale
    83
    37
    81
    57
    78
    Estrazione Simbolotto
    Genova
    10
    14
    28
    18
    15
Alto