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
    giovedì 18 aprile 2024
    Bari
    13
    39
    14
    70
    78
    Cagliari
    67
    65
    03
    87
    63
    Firenze
    85
    90
    19
    67
    78
    Genova
    60
    81
    39
    33
    13
    Milano
    90
    01
    83
    11
    88
    Napoli
    18
    12
    80
    29
    19
    Palermo
    50
    83
    40
    24
    12
    Roma
    74
    48
    75
    65
    37
    Torino
    80
    46
    44
    27
    30
    Venezia
    70
    16
    72
    03
    89
    Nazionale
    89
    22
    06
    87
    13
    Estrazione Simbolotto
    Genova
    28
    21
    43
    25
    17

Ultimi Messaggi

Alto