Novità

SpazioScript (per LuigiB o per chi può aiutarmi)

Edoardo_95

Advanced Member
Buongiorno a tutti,
se io volessi integrare o modificare una funzione di richiamo o una Sub in "SpazioScript" come potrei fare?
Mi spiego meglio.
All'interno di SpazioScript vi è la function grandiosa"GetCombSviluppo" che però presenta il limite di 20 elementi. Vorrei modificare o integrare una nuova Function di richiamo in modo tale da "allargare" tale limite ad 89 numeri. Ho già generato un script per mezzo di cicli for che effettua la mia richiesta, ma ho bisogno di maggiore dinamicità all'interno del codice che mi permetta tramite un semplice richiamo, di effettuare il necessario.
Grazie mille per eventuali risposte ?
 

Giggio

Super Member >PLATINUM<
Ciao ,la funzione di cui parli non può essere modificata , al massimo puoi scrivere tu una nuova funzione.
Però usando i ciicli for è impossibile raggiungere lo stesso livello di versatilità , immagino tu abbia nidificato un numero fisso di cicli for per ottenere la tua colonna di sviluppo è sicuramente il metodo piu semplice ma cosi facendo ci vorrebbe una routine per ogni classe di sviluppo , inoltre se fai caso in spaziometria la funzione che tu dici ha bisogno di essere inizializzata prima di essere usata .
Se volessi replicare un comportamento simile non basterebbe scrivere solo una nuova funzione, avrebeb anche poco senso farlo per il numero spropositatro di combinazioni possibili.
 

Giggio

Super Member >PLATINUM<
Penso che con gli script non si possano gestire piu che i terni sullo sviluppo dei 90 numeri ...quindi cimentarsi in una cosa simile a che pro ?
A livello tecnico comunque ci vuole una certa padronanza delle istruzioni .. sicuramente ci vuole una classe da istanziare e a cui demandare il compito dello sviluppo.
 

Edoardo_95

Advanced Member
Spiego subito il mio intento. Vorrei generare uno script (con funzione implementata) che generi tutte le 89ine dai 90 numeri totali ( ovvero 90 lunghette di 89ine) oppure tutte le 88ine (4005 lunghette di 88ine dai 90 numeri). Dal risultato ottenuto, scelta una delle lunghetta secondo un mio criterio personale, svilupparle in 88ine oppure 87ine ...e così via ...fin quando non giungo ad una classe teorica stabile da me scelta. Naturalmente comprendo i tempo elaborazionali alla quale vado incontro ..ma mi limiterei ad una riduzione di massimo tre elementi a ritroso (mantenendo sempre il "terno" come massimo punto elaborazionale). Naturalmente nidificando un numero fisso di cicli for per ottenere le mie colonne di sviluppo ci vorrebbe una routine per ogni classe di sviluppo come hai detto tu ..rendendo la formazione dello script poco praticabile e poco dinamica. Da qui è giunta la mia idea di aggiungere una funzione che mi permetta di farlo. I pro di tutto ciò è semplice ? vittoria quasi garantita ?
 

Giggio

Super Member >PLATINUM<
Bhe se ti va di cimentarti è sempre una cosa buona , l'obiettivo che ti proponi dovrebbe darti la spinta per applicarti
Io posso darti qualche dritta..ma il codice lo dovrai scrivere da solo ..
Prima di tutto va abbandonata l'idea dei cicli for...e va creta una classe che chiamerai clsSviluppo per ora senza codice, sei capace ? .S si posta la classe vuota e piano piano la implementiamo con le funzioni necessarie..
 

Giggio

Super Member >PLATINUM<
Perfetto , chi ben inizia è già a metà dell'opera.
Ora scrivi una funzione che serve per inizializzare lo sviluppo.
Dato che dovrà essere chiamata dall'esterno la funzione deve essere pubblica.
Questa funzione naturalmente ricevera dei prametri e tornerà un risultato.
Cosa serve per inizializzare lo sviluppo dei numeri ? Rispondi mentalmente a questa domanda e scrivi il prototipo della funzione , senza codice all'interno.
La funzione potrai chiamarla InitSviluppo
Useremo una funzione e non una sub perche vogliamo che essa ritorni il numero delle colonne che si ottengono con i parametri passati.
 

Edoardo_95

Advanced Member
Penso di aver capito allora :D

Codice:
Option Explicit

Class clsSviluppo

Public Function InitSviluppo(VettoreNumeri,ClasseDiSviluppo)

End Function

End Class

Sub Main
End Sub
 

Giggio

Super Member >PLATINUM<
Esatto , infatti è cosi che doveva essere.
A questo punto sappiamo che il chiamante passera un vettore contenente i numeri da sviluppare e la relativa classe di sviluppo.

Dobbiamo memorizzare alcune informazioni come variabili globali della classe.
ci serve memorizzare

-la quantita dei numeri da sviluppare
-la classe di sviluppo
-le combinazioni integrali che si producono
-i numeri scelti

alcune di queste informazioni le ricaviamo,

potrebbe darsi che il chiamante ci passi un array con dei numeri ripetuti o fuori dal range 1 - 90
l'unica informazione che prendiamo cosi come viene passata è la classe di sviluppo.

intendiamo memorizzare i numeri passati dal chiamante in un array booleano in modo tale da abbattere eventuali doppi.
Contestualmente al popolamnto di questo array contiamo quanti numeri sono stati effettivamente usati.


qundi dopo aver dichiarato le variabili globali che ti ho detto . va creata una funzione privata nella classe ch si potrà chiamare AlimentArrayNumDaSvil la quale avrà i seguenti compiti

- ricevera il vettore dei numeri passato dal chiamante
- dimensionerà l'array boooleano dei 90 numeri e valorizzera le posizioni di numeri scelti con true
-conterà quanti numeri sono stati scelti
-tornerà come risultato la quantita dei numeri scelti



Al suo interno si puo usare una funzione di spazioscript che serve proiprio per convertire un vettore in un vettore di boolean (ArrayNumeriToBool)


dopo aver implementato questa funzione possiamo iniziare a scrivere il codice dentro InitSviluppo , in particolare
potremmo valorizzare le variabili globali relative a

- quantita numeri scelti
- classe di sviluppo
- combinazioni integrali

possiamo anche verificare che i parametri passati dal chiamate consentano effettivamente di sviluppare il sistema.


quindi per faciltarti ti metto lo scheletro con solo le variabili dichiarate , il tuo compito è implementare la funzione
AlimentArrayNumDaSvil e scrivere il codice per implemmentare quanto detto nella fnzione InitSviluppo

Codice:
Option Explicit

Class clsSviluppo
   Private aBNumDaSvil
   Private nQNumeri 
   Private nCombInt
   Private nClasse
     
   
   Function InitSviluppo (aNumeri ,Classe)
      
      nQNumeri  = 
      nCombInt = 
      nClasse = 
      
      InitSviluppo  = 
      
      
   End Function
   
   Private Function AlimentArrayNumDaSvil ( aNumeri)
    
   End Function 

End Class
 

Edoardo_95

Advanced Member
Sicuramente avrò combinato un disastro ma io ci provo ahah :D

Codice:
Option Explicit
Class clsSviluppo
   Private aBNumDaSvil
   Private nQNumeri
   Private nCombInt
   Private nClasse
   Function InitSviluppo(aNumeri,Classe)
      nQNumeri =
      nCombInt = CombinazioniN(aNumeri,Classe)
      nClasse =
      InitSviluppo =
   End Function
   Private Function AlimentArrayNumDaSvil(aNumeri)
      Dim k
      If IsArray(aNumeri) Then
         ReDim sLunghetta(UBound(aNumeri))
         Call ArrayNumeriToBool(sLunghetta)
         For k = 1 To UBound(sLunghetta))
            sLunghetta(k) = aNumeri(k)
         Next
         nQNumeri = UBound(sLunghetta)
   End Function
      Public Function Fattoriale(N1,N2)
   Dim Prodotto,I
   Prodotto = 1
   For I = N1 To N2
      Prodotto = Prodotto * I
   Next
   Fattoriale = Prodotto
   End Function
   Public Function CombinazioniN(VettoreNumeri,ClasseDiSviluppo)
   CombinazioniN =(Fattoriale(VettoreNumeri,VettoreNumeri - ClasseDiSviluppo + 1) / Fattoriale(ClasseDiSviluppo))
   End Function
End Class
 
Ultima modifica:

Giggio

Super Member >PLATINUM<
non ti preoccupare , se c'è la volontà sbagliando si impara

Codice:
Option Explicit
Class clsSviluppo
   Private aBNumDaSvil
   Private nQNumeri
   Private nCombInt
   Private nClasse
   Function InitSviluppo(aNumeri,Classe)
      nQNumeri = ? e qui che ci va scritto ? 
      nCombInt = CombinazioniN(aNumeri,Classe)
      nClasse = ? e qui che ci va scritto ? 

      InitSviluppo = ? e qui che ci va scritto ? 

   End Function
   Private Function AlimentArrayNumDaSvil(aNumeri)
      Dim k
      If IsArray(aNumeri) Then
        ' ReDim sLunghetta(UBound(aNumeri)) '  chi ti ha detto di usare questo nuovo array ? 
         ' devi usare quello dichiarato globale ... aBNumDaSvil
         Call ArrayNumeriToBool(sLunghetta) ' sbagliato uso della funzione , slunghetta non va usato dvi usare le variabili che ho dichiarato io globalmente
         
         For k = 1 To UBound(sLunghetta)) ' contggio errato dei numeri selezionati , dobbiamo contare le posizioni true nell'array boolean
            sLunghetta(k) = aNumeri(k)
         Next
         nQNumeri = UBound(sLunghetta) ' dato che i numeri sono in un array boolean con ubound otteniamo sempre 90 quindi non va bene
         
         'la funzione deve tornare la quantita dei numeri
      End If 
         
   End Function
   
   
   esiste la funzione Combinazioni 
   
   
    '  Public Function Fattoriale(N1,N2)
'   Dim Prodotto,I
'   Prodotto = 1
'   For I = N1 To N2
'      Prodotto = Prodotto * I
'   Next
'   Fattoriale = Prodotto
'   End Function
'   Public Function CombinazioniN(VettoreNumeri,ClasseDiSviluppo)
'   CombinazioniN =(Fattoriale(VettoreNumeri,VettoreNumeri - ClasseDiSviluppo + 1) / Fattoriale(ClasseDiSviluppo))
'   End Function
End Class
 

Edoardo_95

Advanced Member
Proviamo cosi :D

Codice:
Option Explicit
Class clsSviluppo
   Private aBNumDaSvil
   Private nQNumeri
   Private nCombInt
   Private nClasse
   Function InitSviluppo(aNumeri,Classe)
      nQNumeri = aNumeri
      nCombInt = Combinazioni(aNumeri,Classe)
      nClasse = Classe
      Dim k,P
      If aNumeri = 0 Then
         aNumeri = 1
         ReDim NumSvil(0)
         For k = 1 To Classe
            NumSvil(k) = k
         Next
      ElseIf aNumeri < nCombInt Then
         aNumeri = aNumeri + 1
         P = Classe
         Do Until NumSvil(P) < aNumeri - Classe + P
            P = P - 1
         Loop
         NumSvil(P) = NumSvil(P) + 1
         For k = P + 1 To Classe
            NumSvil(k) = NumSvil(k - 1) + 1
         Next
      End If
      InitSviluppo = NumSvil(k)
   End Function
   Private Function AlimentArrayNumDaSvil(aNumeri)
      Dim aB,PosTrue,nMaxPossibile
      nMaxPossibile = 90
      If IsArray(aNumeri) Then
         ReDim aBNumDaSvil(UBound(aNumeri))
         aB = ArrayNumeriToBool(aBNumDaSvil,nMaxPossibile)
         PosTrue = 0
         For aB = 1 To UBound((aBNumDaSvil))
            PosTrue = PosTrue + 1
         Next
         aNumeri = PosTrue
      End If
   End Function
End Class
 

Giggio

Super Member >PLATINUM<
Mi dispiace Edoardo , non ci siamo proprio ... rileggi bene iil tutto non aggiungere niente che io non ti ho detto....


Codice:
Class clsSviluppo
   Private aBNumDaSvil
   Private nQNumeri
   Private nCombInt
   Private nClasse
   Function InitSviluppo(aNumeri,Classe)
      nQNumeri = aNumeri 'sbagliato 
      nCombInt = Combinazioni(aNumeri,Classe) ' giusto
      nClasse = Classe ' giusto
      
      
      ' tutto sbagliato 
      
     ' Dim k,P
'      If aNumeri = 0 Then
'         aNumeri = 1
'         ReDim NumSvil(0)
'         For k = 1 To Classe
'            NumSvil(k) = k
'         Next
'      ElseIf aNumeri < nCombInt Then
'         aNumeri = aNumeri + 1
'         P = Classe
'         Do Until NumSvil(P) < aNumeri - Classe + P
'            P = P - 1
'         Loop
'         NumSvil(P) = NumSvil(P) + 1
'         For k = P + 1 To Classe
'            NumSvil(k) = NumSvil(k - 1) + 1
'         Next
'      End If
'      InitSviluppo = NumSvil(k)
   End Function
   Private Function AlimentArrayNumDaSvil(aNumeri)
   
      sbagliato non ci siamo .... 
      
    '  Dim aB,PosTrue,nMaxPossibile
'      nMaxPossibile = 90
'      If IsArray(aNumeri) Then
'         ReDim aBNumDaSvil(UBound(aNumeri))
'         aB = ArrayNumeriToBool(aBNumDaSvil,nMaxPossibile)
'         PosTrue = 0
'         For aB = 1 To UBound((aBNumDaSvil))
'            PosTrue = PosTrue + 1
'         Next
'         aNumeri = PosTrue
'      End If
'   End Function
End Class
 

Edoardo_95

Advanced Member
Vediamo così ?

Codice:
Option Explicit
Class clsSviluppo
   Private aBNumDaSvil
   Private nQNumeri
   Private nCombInt
   Private nClasse
   Function InitSviluppo(aNumeri,Classe)
      nQNumeri = nQNumeri
      nCombInt = Combinazioni(aNumeri,Classe)
      nClasse = Classe
InitSviluppo = " ci devo pensare"
   End Function
   Private Function AlimentArrayNumDaSvil(aNumeri)
      Dim PosTrue,k
      If IsArray(aNumeri) Then
        aBNumDaSvil = ArrayNumeriToBool(aNumeri)
         PosTrue = 0
         For k = 1 To UBound((aBNumDaSvil))
            PosTrue = PosTrue + 1
         Next
         nQNumeri = PosTrue
      End If
   End Function
End Class
 

Giggio

Super Member >PLATINUM<
niente da fare ....

nQNumeri = nQNumeri

molto intersssante :) ...

avevo detto che era necessario un minimo di padronanza ...
 

i legend

Premium Member
Function getnumeri(aNumSel, aNumCheck)
Redim aNum(90)
Dim n
For n=1 to 90
ANum(n)=0
Next
For n=1 to ubound(anumsel)
anum( anumsel(n))=1

Next
For n=1 to ubound(aNum)
If (aNum(n)) then
M=m+1
Redim preserve aNumceck(m)
Anumceck(m)=anum(n)
Next
End function
Scritto con cell
Bisogna però considerare se fosse una stringa la selezione dei numeri, prendere il carattere separatore
Ciao a domani
Sicuramente esiste una funzione più corta ,ma sono fuori forma, sicuramente non funziona ma volevo partecipare.
 

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
Alto