Novità

Per Tutti

salvo50

Advanced Member >PLATINUM PLUS<
Esiste una funzione che elimina gli ambi doppi?

Se si qualè?

Se no, qualcuno riesce a fare una formuletta per eliminare gli ambi doppi

Tempo fa Joe mi aveva fatto una formuletta, ma era con capogioco e quella l'ho capita bene

Nello script che sto facendo, alla fine ci sono molti ambi doppi che non so come eliminare.
 
Ciao, Salvo.
Se sono ordinati, nello script puoi fare

if stringanumeri( nn)<>x then
scrivi stringanumeri( nn)
x=stringanumeri( nn)


oppure esegui lo script normalmente, copi e incolli su exel, anche qui devono essere ordinati in modo crescente o decrescente,
in modo che gli ambi uguali siano contigui e poi usi la formula SE vero o falso
SE(A2=A1; "vero"; "falso") e fai scorrere la formula posizionandoti sull'angolo destro della cella in cui l'hai scritta.
 
Ultima modifica:
Ho scritto questo inserendo i commenti, nei punti nodali.

Codice:
Option Explicit
Sub Main
   Dim N,A,B,Bi(90,90),Puliti(90,90),K
   For N = 1 To 4005 'Genera 4005 Ambi Casuali / Scomposti / Doppi e/o Disordinati.
      A = NumeroCasuale(1,90)
      B = NumeroCasuale(1,90)
      Bi(A,B) = True
   Next
' Legge le COPPIE di Numeri e le trasforma in Ambi validi.
   For A = 1 To 90
      For B = 1 To 90
         If Bi(A,B) = True Then
            Puliti(Minimo(A,B),Massimo(A,B)) = True 'Ordina e Convalida
         End If
      Next
   Next
   For A = 1 To 89
      For B = A + 1 To 90
         If Puliti(A,B) = True Then 'Seleziona quelli validi / Elimina i ripetuti
            K = K + 1 ' Conta gli Ambi convalidati
            Scrivi K & " " & Format2(A) & "." & Format2(B) 'li manda in output
         End If
      Next
   Next
End Sub

:) Un caro saluto a tutte/i.
 
Non riesco ad adattarli

Nello script che sto facendo alla fine il pronostico
è formato da 16 ambi, ma alcuni sono doppi
e alcuni sono con lo stesso numero e quindi da eliminare
elenco 16 ambi, quelli da eliminare li segno con asterischi
gli ambi doppi non hanno le stesse variabili e non sempre
sono 5 come in questo caso a volte sono di più a volte di meno


63 06
83 88
35 72
29 40
06 62
72 70
33 86
63 06 ************
06 63 ************
39 64
59 58
62 06 ************
30 40
40 28
10 10 ************ questo perché sono 2 numeri uguali
06 62 ************
 
Ciao a Tutti

Ciao Cinzia
Non riesco ad immaginare come possa fare Ordinamatrice ad eliminare i doppi ambi
mi fai un esempio
 
Il mio script ha 3 parti.

La prima compone Ambi giusti sbagliati.

Quella centrale è quella da utilizzare.

La terza verifica ed espone i risultati.

Dunque scartando la prima parte che è quella che serviva per generare ambi giusti e sbagliati ...

ti serve solo la seconda ... perché la terza parte è solo per la visualizzazione dei risultati.

In pratica un qualcosa di questo tipo dovrebbe eserti utile.

Codice:
Option Explicit
Sub Main
   Dim L(16),T(90,90)
   Dim I,K
   Dim Nu(2)
   Dim A,B
   Scrivi " SITUAZIONE INIZIALE "& Chr(13) ,1
   L(1) = "63 06"
   L(2) = "83 88"
   L(3) = "35 72"
   L(4) = "29 40"
   L(5) = "06 62"
   L(6) = "72 70"
   L(7) = "33 86"
   L(8) = "63 06" '************
   L(9) = "06 63" '************
   L(10) = "39 64"
   L(11) = "59 58"
   L(12) = "62 06" '************
   L(13) = "30 40"
   L(14) = "40 28"
   L(15) = "10 10" ' ************ questo perché sono 2 numeri uguali
   L(16) = "06 62" ' ************
 
For I = 1 To UBound(L)
      Nu(1) = CInt(Left(L(I),2))
      Nu(2) = CInt(Right(L(I),2))
      If Nu(1) <> Nu(2) Then
         Scrivi I &" ) " & StringaNumeri(Nu,,True)
         T(Minimo(Nu(1),Nu(2)),Massimo(Nu(1),Nu(2))) = True
      Else
         Scrivi I &") Scarto " & StringaNumeri(Nu)
      End If
   Next
   Scrivi
 Scrivi "AMBI CORRETTI e ORDINATI "& Chr(13),1
   For A = 1 To 89
      For B = A + 1 To 90
         If T(A,B) = True Then
            K = K + 1
            Scrivi "Ambo (" & K & ") = """,0,0
            Scrivi Format2(A) & "." & Format2(B) & """"
         End If
      Next
   Next
End Sub

:)
 
Ultima modifica:
Ciao Joe
Grazie
Non l'ho ancora provato, ma sicuramente va bene
Grazie anche alla mitica Cinzia
 
Aggiungo che nella soluzione che ti ho proposto la parte principale dello script è:

If Nu(1) <> Nu(2) Then
T(Minimo(Nu(1),Nu(2)),Massimo(Nu(1),Nu(2))) = True

E' sostanzialmente identica a quella che ti ha suggerito Cinzia.

Cioè controlla che i numeri siano diversi e se lo sono li mette in ordine.

A questo punto l'Ambo è convalidato dall'essere Vero (True).

Altrimenti è Falso e non sarà utilizzabile.

:)
 
salve a tutti senza nulla togliere allle altre soluzioni esiste questo sistema , che consente di registrare univocamente gli ambi in una collection e quindi consente anche di scrivere in output solo quelli non gia scritti.
Per comodita gli ambi in input sono stati inseriti in un vettore , il terzo ambo è duplicato ma non viene messo in output.



Codice:
Option Explicit
Sub Main
  
  Dim aAmbi ,k, CollValidi 
  
  aAmbi = Array ("1.2","1.3","1.2")
  
  
  Set CollValidi = GetNewCollection 
  
  For k = 0 To UBound(aAmbi)
     If AddItemColl ( CollValidi , aAmbi(k) , aAmbi(k)) Then 
        Call Scrivi (aAmbi(k))
     End If 
  Next 
End Sub
 
Li sto vagliando tutti e due perchè alla fine questi ambi che io per farmi capire
ho messo dei numeri, ma sono delle variabili, ultimo quando restano gli ambi
corretti li devo mettere in Impostagiocata voglio mettere un FOR-NEXT, anche
perché alla fine non so quante ne restano, adesso sto cercando di fare questo
se avrò delle difficoltà chiederò ancora aiuto

Grazie a tutti e tre
 
Franco, Joe dove sto sbagliando?

Per joe l'ho modificato cosi ma non funziona
Codice:
A1 = 63 : Re1 = 06
   A2 = 83 : Re2 = 88
   A3 = 35 : Re3 = 72
   A4 = 29 : Re4 = 40
   A5 = 06 : Re5 = 42
   A6 = 72 : Re6 = 70
   A7 = 33 : Re7 = 86
   A8 = 63 : Re8 = 06
   A9 = 06 : Re9 = 63
   A10 = 39 : Re10 = 64
   A11 = 59 : Re11 = 58
   A12 = 62 : Re12 = 06
   A13 = 30 : Re13 = 40
   A14 = 40 : Re14 = 28
   A15 = 10 : Re15 = 10
   A16 = 06 : Re16 = 62
    
   L(2) = "A2 Re2"
   L(3) = "A3 Re3"
   L(4) = "A4 R4"
   L(5) = "A5 R5"
   L(6) = "A6 R6"
   L(7) = "A7 R7"
   L(8) = "A8 R8" '************
   L(9) = "A9 R9" '************
   L(10) = "A10 R10"
   L(11) = "A11 R11"
   L(12) = "A12 R12" '************
   L(13) = "A13 R13"
   L(14) = "A14 R14"
   L(15) = "A15 R15" ' ************ questo perché sono 2 numeri uguali
   L(16) = "A16 R16" ' ************

Per FrancoBru
l'ho modificato così ma non funziona

Codice:
Sub Main
  Dim A1,A2,A3,A4,Re1,Re2,Re3,Re4
  Dim aAmbi,k,CollValidi
  A1 = 27 : Re1 = 36
  '
  A2 = 36 : Re2 = 29
  '
  A3 = 36 : Re3 = 27
  '
  A4 = 36 : Re4 = 29
 
  aAmbi = Array("A1.Re1","A2.Re2","A3.Re3","A4.Re4")
  
 
  Set CollValidi = GetNewCollection
 
  For k = 0 To UBound(aAmbi)
     If AddItemColl(CollValidi,aAmbi(k),aAmbi(k)) Then
        Call Scrivi(aAmbi(k))
     End If
  Next
End Sub
 
Ciao, Salvo.
Ecco un esempio molto semplice che unisce numeri da ordinare al loro interno,
numeri ordinati in senso decrescente, ambi doppi.
Senza condizioni, hai il primo elenco con carattere semplice.
Con le condizioni hai l'elenco in grassetto.

Codice:
Sub main()

Dim n(2),n1(2),nu()
For i=1 To 3
For j=1 To 3
n(1)=i
n(2)=j
'----------------------elenco semplice

Scrivi StringaNumeri (n)
Next
Next
Scrivi

'----------------------elenco con condizioni

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

co=co+1
OrdinaMatrice n,1,1 'ti ordina in senso crescente gli elementi dell'ambo
If n(1)<>n(2) Then' chiede che si tratti di elementi diversi
Redim preserve nu(co) ' ridichiara la variabile nu() ma stavolta mettendo il valore co ( conteggio ambi)
nu(co)= StringaNumeri (n)' carico l'ambo
OrdinaMatrice nu,1,1 'ordino in senso crescente gli ambi ottenuti
If nu(co)<>nn Then' se l'ambo che sto scrivendo è diverso da quello precedente allora
Scrivi nu(co),1' lo scrivo
nn=nu(co)' questo è l'ambo precedente
End If
End If
Next
Next
End Sub
 
Ultima modifica:
Salvo, si può fare, ma è un modo bruttissimo di scrivere.

A1 A2 A3 ecc sono un numero enorme di variabili diverse e che vanno gestite una ad una.

Si deve scrivere un sacco di codice il che comporta, la possibilità di commettere errori,

grande dispendio di risorse e quel che è peggio devono essere trattate tutte. Una ad Una.

E poi ancora 2 volte.

Come vedi :

Codice:
Sub Main
   Dim L(16),T(90,90)
   Dim I,K
   Dim Nu(2)
   A1 = 63 : Re1 = 06
   A2 = 83 : Re2 = 88
   A3 = 35 : Re3 = 72
   A4 = 29 : Re4 = 40
   A5 = 06 : Re5 = 42
   A6 = 72 : Re6 = 70
   A7 = 33 : Re7 = 86
   A8 = 63 : Re8 = 06
   A9 = 06 : Re9 = 63
   A10 = 39 : Re10 = 64
   A11 = 59 : Re11 = 58
   A12 = 62 : Re12 = 06
   A13 = 30 : Re13 = 40
   A14 = 40 : Re14 = 28
   A15 = 10 : Re15 = 10
   A16 = 06 : Re16 = 62
  
   Scrivi " SITUAZIONE INIZIALE " & Chr(13),1
   L(1) =  a1 & Re1
   L(2) = a2 & Re2
   L(3) = a3 & Re3
   L(4) = a4 & Re4
   L(5) = a5 & Re5
   L(6) = a6 & Re6
   L(7) = a7 & Re7
   L(8) = a8 & Re8'************
   L(9) = a9 & Re9 '************
   L(10) = a10 & Re10
   L(11) = a11 & Re11
   L(12) = a12 & Re12 '************
   L(13) = a13 & Re13
   L(14) = a14 & Re14
   L(15) = a15 & Re15 ' ************ questo perché sono 2 numeri uguali
   L(16) = a16 & Re16 ' ************
   For I = 1 To UBound(L)
      Nu(1) = CInt(Left(L(I),2))
      Nu(2) = CInt(Right(L(I),2))
      If Nu(1) <> Nu(2) Then
         Scrivi I & " ) " & StringaNumeri(Nu,,True)
         If T(Minimo(Nu(1),Nu(2)),Massimo(Nu(1),Nu(2))) = False Then C = C + 1
         T(Minimo(Nu(1),Nu(2)),Massimo(Nu(1),Nu(2))) = True
      Else
         Scrivi I & ") Scarto " & StringaNumeri(Nu)
      End If
   Next
   Scrivi
   Scrivi "Saranno " & C,True
   Scrivi
   Scrivi "AMBI CORRETTI e ORDINATI " & Chr(13),1
   For A = 1 To 89
      For B = A + 1 To 90
         If T(A,B) = True Then
            K = K + 1
            Scrivi "Ambo (" & K & ") = """,0,0
            Scrivi Format2(A) & "." & Format2(B) & """"
         End If
      Next
   Next
End Sub

Ho dovuto cambiare e scrivere manualmente 16 righe prima e poi anche "Linee" dopo.

Quando scrivendo

For I = 1 to 1000

L(I) = xyz

next

In 3 righe ne elaboro 1000 automaticamente e senza scrivere troppo codice.

Cioè è giusto il consiglio di usare degli Array L(xyz) e non L1 , L2 , L3.

Ho inserito anche un contatore "C" che come vedi "sa" quanti ambi validi ci saranno.

:)
 
Nello script che segue, come vedi, ho mantenuto separate le due linee di dati A1 e Re1

(anche se gli Ambi sarebbe meglio esporli diversamente).

Però nonostante questo ho potuto eliminare molte variabili ed altrettante linee si codice.

Codice:
Sub Main
   Dim L(16),T(90,90)
   Dim I,K
   Dim Nu(2)
   A1  = Array (0,63,83,35,29,06,72,33,63,06,39,59,62,30,40,10,06)
   Re1 = Array (0,06,88,72,40,42,70,86,06,63,64,58,06,40,28,10,62)
   'A1 = 63 : Re1 = 06
   'A2 = 83 : Re2 = 88
   'A3 = 35 : Re3 = 72
   'A4 = 29 : Re4 = 40
   'A5 = 06 : Re5 = 42
   'A6 = 72 : Re6 = 70
   'A7 = 33 : Re7 = 86
   'A8 = 63 : Re8 = 06
   'A9 = 06 : Re9 = 63
   'A10 = 39 : Re10 = 64
   'A11 = 59 : Re11 = 58
   'A12 = 62 : Re12 = 06
   'A13 = 30 : Re13 = 40
   'A14 = 40 : Re14 = 28
   'A15 = 10 : Re15 = 10
   'A16 = 06 : Re16 = 62
   
   Scrivi " SITUAZIONE INIZIALE " & Chr(13),1
   'L(1) =  a1 & Re1
   'L(2) = a2 & Re2
   'L(3) = a3 & Re3
   'L(4) = a4 & Re4
   'L(5) = a5 & Re5
   'L(6) = a6 & Re6
   'L(7) = a7 & Re7
   'L(8) = a8 & Re8'************
   'L(9) = a9 & Re9 '************
   'L(10) = a10 & Re10
   'L(11) = a11 & Re11
   'L(12) = a12 & Re12 '************
   'L(13) = a13 & Re13
   'L(14) = a14 & Re14
   'L(15) = a15 & Re15 ' ************ questo perché sono 2 numeri uguali
   'L(16) = a16 & Re16 ' ************
   For I = 1 To UBound(A1)
      Nu(1) = A1 (I)
      Nu(2) = Re1(I)
      If Nu(1) <> Nu(2) Then
         Scrivi I & " ) " & StringaNumeri(Nu,,True)
         If T(Minimo(Nu(1),Nu(2)),Massimo(Nu(1),Nu(2))) = False Then C = C + 1
         T(Minimo(Nu(1),Nu(2)),Massimo(Nu(1),Nu(2))) = True
      Else
         Scrivi I & ") Scarto " & StringaNumeri(Nu)
      End If
   Next
   Scrivi
   Scrivi "Saranno " & C,True
   Scrivi
   Scrivi "AMBI CORRETTI e ORDINATI " & Chr(13),1
   For A = 1 To 89
      For B = A + 1 To 90
         If T(A,B) = True Then
            K = K + 1
            Scrivi "Ambo (" & K & ") = """,0,0
            Scrivi Format2(A) & "." & Format2(B) & """"
         End If
      Next
   Next
End Sub

:)
 
Per Joe, lo so hai perfettamente ragione infatti dato che a1 si accoppia con re1 potevo mettere un FOR-NEXT
Ma poi i numeri che andavano in queste variabili non avevano una sequenza ordinata , quindi non l'ho fatto,
Perchè non sono abbastanza bravo
Comunque adesso penso di avere risolto, infatti prima di chiederti quest'ultimo favore, avevo già inserito
impostagiocata nell'ultimo FOR-NEXT del tuo esempio, ed era funzionante

Per Cinzia, grazie, ho dato un occhiata veloce alla tua spiegazione di come eliminare gli ambi doppi con
Ordinamatrice, dopo me lo studio bene.
 
Ultima modifica:
Altra opzione

Codice:
Sub main()

Dim n(2),n1(2),n2(2),n3(2),nn(4)
n(1)=85
n(2)=18
OrdinaMatrice n,1,1

n1(1)=39
n1(2)=22
OrdinaMatrice n1,1,1

n2(1)=85
n2(2)=18
OrdinaMatrice n2,1,1

n3(1)=53
n3(2)=12
OrdinaMatrice n3,1,1

nn(1)=StringaNumeri(n)
nn(2)=StringaNumeri(n1)
nn(3)=StringaNumeri(n2)
nn(4)=StringaNumeri(n3)
OrdinaMatrice nn,1,1

For i=1 To 4
If nn(i)<>nr Then
Scrivi nn(i)
nr=nn(i)
End if
Next

End Sub
 
ciao Salvo , con il metodo che avevo proposto il computer non sa che si tratta di ambi , lui sa solo che ogni stringa deve essere presa una sola volta per farlo le memorizza in una collection con una chiave , la chiave è la stringa stessa ogni chiave per sua natura intrinseca puo essere usata una volta sola ed è questo quello che lo sript sfrutta, infatti se lanci il tuo script noterai l'output

1750107496089.png

che sono le 4 stringhe con le quali hai valorizzato gli elementi del vettore
1750107709611.png

quello che devi fare è trasformare l'ambo in una stringa e inserirlo nella collection, se passa vuol dire che non lo avevi mai preso e percio puoi mandarlo in output.

Attenzione , l'ambo 1.2 è diverso dal 2.1 dal punto di vista del computer , infatti sono due stringhe diverse.
quando lo trasformi in una stringa devi frare attenzione che i numeri che lo compongono siano ordinati


un saluto a tutti gli amici del forum , mangiate tutti pane e volpe a quanto vedo :-) eheh ciao !
 

Ultima estrazione Lotto

  • Estrazione del lotto
    sabato 14 giugno 2025
    Bari
    43
    28
    11
    04
    79
    Cagliari
    44
    24
    17
    54
    40
    Firenze
    51
    68
    85
    05
    58
    Genova
    35
    40
    22
    31
    45
    Milano
    84
    30
    47
    28
    85
    Napoli
    12
    06
    24
    83
    82
    Palermo
    66
    03
    88
    41
    45
    Roma
    15
    77
    68
    70
    59
    Torino
    81
    25
    06
    33
    77
    Venezia
    77
    79
    12
    49
    87
    Nazionale
    01
    84
    11
    31
    45
    Estrazione Simbolotto
    Napoli
    06
    18
    07
    23
    13

Ultimi Messaggi

Indietro
Alto