Novità

Chi mi aiuta?

Cinzia27

Premium Member
Chi cortesemente può aiutarmi?

Sub main()

Dim n(3)
n(1)=1
n(2)=2
n(3)=3
For i=1 To 3

Scrivi n(i)

next

End Sub

Con questo script ho
1
2
3


Avrei necessità di ottenere
1
2

1
3

2
3

MA togliendo un elemento per volta.
 
Cinzia, vedi se può andar bene

Codice:
Sub Main
   Dim N(2)
   For n1 = 1 To 5
      For n2 = n1 + 1 To 5
         If n2 > n1 Then
            N(1) = n1 : N(2) = n2
            Scrivi N(1)
            Scrivi N(2)
            Scrivi
         End If
      Next
   Next
End Sub

1
2

1
3

1
4

1
5

2
3

2
4

2
5

3
4

3
5

4
5
 
Ciao Cinzia,

Se scomponi la terzina in ambi, per poterlo fare devi avere 2 indici.

Esattamente come creeresti degli Ambi di essi.

Come giustamente ti ha suggerito Ilegend ci sarebbero anche istruzioni specifiche di Spaziometria.

Degli esempi a corredo del programma ti ho adattato questo:

Codice:
Option Explicit
Sub Main
 
   Dim k,s
   Dim nClasse,nColonneTot
   ReDim aNumeri(3)
   Dim aCol
 
   nClasse = 2 ' sviluppo in ambi
   ' inizializzo i numeri da sviluppare in questo caso 90
   ' ma potrebbero essere anche di meno
   For k = 1 To 3
      aNumeri(k) = k
   Next
   'inizializza lo sviluppo
   nColonneTot = InitSviluppoIntegrale(aNumeri,nClasse)
   k = 0
 
   ' ciclo che continua fiono a quando le colonne non finiscono
   Do While GetCombSviluppo(aCol)
   
      k = k + 1 ' conteggio colonna corrente
   
      ' costruisco la stringa che contiene la colonna
      s = FormatSpace(k,10,True) & "- " & StringaNumeri(aCol)
      Call Scrivi(s)
   
      Call Messaggio("Colonna " & k)
      If ScriptInterrotto Then Exit Do

   Loop
End Sub

Ma se consideri una terzina trovo più semplice gestire lo sviluppo con il fai da te.

Dunque anziché 89 = 90 - 1 hai 2 = 3 - 1 come limite massimo del primo loop.
E poi, il classico i+1 to 3 per il secondo indice.

Il tuo codice che gestisce ed integra questo secondo puntatore potrebbe essere

Codice:
Option Explicit
Sub Main()
   Dim n(3)
   Dim i,f
   n(1) = 1
   n(2) = 2
   n(3) = 3
   For i = 1 To 2
      For f = i + 1 To 3
         Scrivi n(i) & "-" & n(f)
      Next
   Next
End Sub

Che produce :

Codice:
1-2
1-3
2-3

Un saluto anche a Mike altra sicura colonna portante degli script di spaziometria.

:)
 
Mike, io vorrei che in questo script fosse inserito un for che mi tolga un elemento per volta

Sub main()

Dim n(5)
n(1)=1
n(2)=2
n(3)=3
n(4)=4
n(5)=5
For i=1 To 5

Scrivi n(i)

next

End Sub

Risultato che vorrei

02.03.04.05
01.03.04.05
01.02.04.05
01.02.03.05
01.02.03.04
 
Grazie, Joe, questo lo so fare ma io ho bisogno il contrario, cioè di togliere uno ( o due) elementi e di conservare il resto.
 
Ciao Cinzia, scusandomi con Mike.

Velocemente prima di andare a nanna.

Concettualmente è lo stesso ... ma con più indici ... si deve scrivere più codice

e diventa facile fare qualche errore.

Dunque per le quartine ed oltre è sicuramente meglio e molto più semplice modificare,

lo stesso script che ti ho proposto.

5 Numeri da sviluppare in classe 4.

Ho letto il tuo messaggio ... ma ad un controllo veloce non vedo differenze di sostanza

ma solo nell'ordine speculare con cui cui vengono esposti i risultati.

02.03.04.05
01.03.04.05
01.02.04.05
01.02.03.05
01.02.03.04

contro :

1- 1.2.3.4
2- 1.2.3.5
3- 1.2.4.5
4- 1.3.4.5
5- 2.3.4.5

:)
 
Mike, io vorrei che in questo script fosse inserito un for che mi tolga un elemento per volta

Sub main()

Dim n(5)
n(1)=1
n(2)=2
n(3)=3
n(4)=4
n(5)=5
For i=1 To 5

Scrivi n(i)

next

End Sub

Risultato che vorrei

02.03.04.05
01.03.04.05
01.02.04.05
01.02.03.05
01.02.03.04
Ciao Cinzia, prova questa soluzione.

Enplein.
Codice:
Sub Main()

Dim n(5)
n(1)=1
n(2)=2
n(3)=3
n(4)=4
n(5)=5
For i=1 To 2
For j=i+1 To 3
For y=j+1 To 4
For z=y+1 To 5
Scrivi n(i)&"."&n(j)&"."&n(y)&"."&n(z)
Next 
Next
Next 
Next

End Sub
 
Joe, non è la stessa cosa perché se io ho un vettore con 10 elementi e devo ridurlo ad 8, devo fare 8 cicli for, cosa che otterrei con 2 cicli for.
Grazie, Enplein ma si tratta dello stesso modo di risolvere finora proposto anche da Mike e Joe.
 
Buongiorno.
Adesso penso di aver capito...

Enplein.
Codice:
Dim n(5),nr(4)
n(1)=1
n(2)=2
n(3)=3
n(4)=4
n(5)=5

For i=1 To 5
g=0
For x=1 To 5
If n(x)<>n(i) Then g=g+1 : nr(g)=n(x)
Next 
Scrivi StringaNumeri (nr),1
Next 


End Sub
 
non riesco a capire perche non vada bene lo sviluppo dell'array di base come hanno detto Joe e Legend.

se vuoi togliere un elemento alla volta devi sviluppare in classe -1 , se ne vuoi togliere 2 devi sviluppare in classe -2 , in tutti i casi tu passi
il tuo array ad una funzione e quella ti ritorna un certo numero di combinazioni che sono quelel necessarie per il sottoinsieme che hai deciso.
e tu devi ciclare su queto array che contiene le combinazioni


' non ti spaventare per la lunghezza , ci sono 3 esempi percio è lungo , tu devi copiare nel tuo script solo le ultime 2 fuunzioni.

Codice:
Option Explicit
Sub Main()
   Dim aTest
   Dim k
   Dim aColonne
   aTest = Array(0,1,2,3)
   ' esempio 1
   'riduce di 1
   aColonne = GetSottoInsieme(aTest,1)
   For k = 1 To UBound(aColonne)
      Scrivi(StringaNumeri(aColonne(k)))
   Next
   'esempio 2
   ' riduce di 2
   aColonne = GetSottoInsieme(aTest,2)
   For k = 1 To UBound(aColonne)
      Scrivi(StringaNumeri(aColonne(k)))
   Next
   ' esempio 3
   ' riduce di uno le quartien che si formano con 5 numeri , ogni quartina da luogo a 4 terni
   aTest = Array(0,1,2,3,4,5)
   Call InitSviluppoIntegrale(aTest,4)
   ReDim aCol(4)
   Do While GetCombSviluppo(aCol)
      Call Scrivi(StringaNumeri(aCol))
      aColonne = GetSottoInsieme(aCol,1) ' riduce di 1
      For k = 1 To UBound(aColonne)
         Scrivi(StringaNumeri(aColonne(k)))
      Next
   Loop
End Sub
' copiare le seguenti funzioni nel proprio script
Function GetSottoInsieme(aN,PassoRid)
   Dim Mot
   Dim Classe,ClasseRid
   Dim nComb,iCol
   Dim aColonne
   Set Mot = GetMotoreSviluppoIntegrale
   Classe = UBound(aN)
   ClasseRid = Classe - PassoRid
   nComb = Mot.InitSviluppoIntegrale(aN,ClasseRid)
   ReDim aColonne(nComb)
   If nComb > 0 Then
      iCol = 0
      Do
         iCol = iCol + 1
         Call Dimensiona(aColonne(iCol),ClasseRid)
         Call Mot.GetCombSviluppo(aColonne(iCol))
      Loop While iCol < nComb
   End If
   GetSottoInsieme = aColonne
End Function
Function Dimensiona(v,c)
   ReDim v(c)
End Function
 
Io ringrazio tutti voi per il vostro aiuto, da voi c'è sempre da imparare qualcosa.
Per Luigi: il motivo della richiesta di compilare in quel modo è che con pochi numeri non si vede la differenza di tempo
ma immettendo di più e se i numeri da togliere sono pochi si risparmia di mettere più for che allungano i tempi,
almeno credo.
 
Buongiorno.
Adesso penso di aver capito...

Enplein.
Codice:
Dim n(5),nr(4)
n(1)=1
n(2)=2
n(3)=3
n(4)=4
n(5)=5

For i=1 To 5
g=0
For x=1 To 5
If n(x)<>n(i) Then g=g+1 : nr(g)=n(x)
Next
Scrivi StringaNumeri (nr),1
Next


End Sub
Enplein possiamo aumentare i numeri ad es. da 5 a 10 e togliere 3 numeri?
 
Ultima modifica:
Ciao a tutti :)
X Cinzia
lo script di Luigi è molto più flessibile e più facile da gestire per fare le ricerche. Praticamente è sufficiente cambiare i numeri da combinare e scegliere la classe di riduzione, senza mai fare altre modifiche.
Hai fatto delle prove per notare differenza di tempo di esecuzione tra i due modi?
Sono curioso visto la potenza del tuo PC.
Se cambi classe di riduzione con i cicli for credo che siano necessari tanti script quanto le riduzioni da applicare.

X Luigi
Come sempre grazie . 🙂👍
 

Ultima estrazione Lotto

  • Estrazione del lotto
    sabato 26 luglio 2025
    Bari
    81
    09
    05
    54
    10
    Cagliari
    56
    07
    45
    69
    64
    Firenze
    39
    16
    56
    29
    09
    Genova
    67
    12
    55
    74
    04
    Milano
    40
    30
    44
    63
    27
    Napoli
    63
    07
    74
    86
    81
    Palermo
    80
    34
    16
    27
    53
    Roma
    08
    78
    43
    03
    52
    Torino
    38
    84
    47
    57
    20
    Venezia
    88
    70
    85
    65
    24
    Nazionale
    36
    09
    43
    55
    10
    Estrazione Simbolotto
    Nazionale
    25
    23
    13
    40
    35

Ultimi Messaggi

Indietro
Alto