Novità

SpazioScript (per LuigiB o per chi può aiutarmi)

Edoardo_95

Super member
Messaggi
156
Punti reazione
17
Punti
18
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 >GOLD<
Messaggi
208
Punti reazione
61
Punti
28
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.
 

Edoardo_95

Super member
Messaggi
156
Punti reazione
17
Punti
18
Esattamente ciò che volevo spiegare :D ma ahimè non ho una proprietà di linguaggio tecnico adatta ahah ... come posso scrivere una nuova funzione?
 

Giggio

Super Member >GOLD<
Messaggi
208
Punti reazione
61
Punti
28
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

Super member
Messaggi
156
Punti reazione
17
Punti
18
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 >GOLD<
Messaggi
208
Punti reazione
61
Punti
28
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 >GOLD<
Messaggi
208
Punti reazione
61
Punti
28
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

Super member
Messaggi
156
Punti reazione
17
Punti
18
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 >GOLD<
Messaggi
208
Punti reazione
61
Punti
28
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

Super member
Messaggi
156
Punti reazione
17
Punti
18
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 >GOLD<
Messaggi
208
Punti reazione
61
Punti
28
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

Super member
Messaggi
156
Punti reazione
17
Punti
18
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 >GOLD<
Messaggi
208
Punti reazione
61
Punti
28
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

Super member
Messaggi
156
Punti reazione
17
Punti
18
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 >GOLD<
Messaggi
208
Punti reazione
61
Punti
28
niente da fare ....

nQNumeri = nQNumeri

molto intersssante :) ...

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

Edoardo_95

Super member
Messaggi
156
Punti reazione
17
Punti
18
Eeeh lo so 😅 però mi sto divertendo da matti in realtà 😂 quindi ricapitolando ...
Ho sbagliato solo la riga nQNumeri = nQnumeri?
 

i legend

Advanced Member >PLATINUM PLUS<
Messaggi
3.916
Punti reazione
450
Punti
83
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
    sabato 26 settembre 2020
    Bari
    14
    86
    85
    68
    16
    Cagliari
    31
    45
    42
    79
    21
    Firenze
    74
    69
    10
    63
    35
    Genova
    67
    32
    79
    36
    66
    Milano
    89
    59
    36
    77
    90
    Napoli
    58
    33
    06
    18
    56
    Palermo
    30
    19
    62
    90
    17
    Roma
    33
    70
    35
    75
    21
    Torino
    15
    20
    57
    21
    35
    Venezia
    36
    29
    71
    15
    26
    Nazionale
    73
    02
    20
    72
    10
    Estrazione Simbolotto
    Palermo
    21
    07
    14
    16
    18
Alto