Novità

Confrontare due righe numeriche e rilevarne i numeri mancanti...

lotto_tom75

Advanced Premium Member
Ovvero...

Se avessi ad esempio due lunghettone...

Una di 75 elementi e l'altra di 74

Come faccio a rilevare, in automatico tramite codice, il numero non presente nella seconda? :unsure:

Esiste una function che ne fa il confronto o qualcosa di simile?

Grazie :)
 

salvo50

Advanced Member >PLATINUM PLUS<
Ciao a Tutti.

Vai in questo link


c'è un mio script dove uso la funzione puntisuarray per confrontare due gruppi di numeri e poi c'è un capolavoro di Joe che riesce a fare il confronto con 2 gruppi di numeri senza la funzione puntisuarray
 

joe

Advanced Member >PLATINUM PLUS<
Buona Giornata a tutte/i.

Ho scritto questo che è molto più complicato del necessario perché

deve ricreare la sovrastruttura proposta senza un esempio reale.

In sintesi ... sono sufficienti le ultime '10 righe' dello script.

Codice:
Option Explicit
Sub Main
   Dim Nu(75),K,N,M,F
   ReDim B(90)
 
   'Genera 75 Numeri diversi in "A"
   Do While K < 75
      N = NumeroCasuale(1,90)
      If B(N) = "" Then
         K = K + 1
         Nu(K) = N
         B(N) = N
      End If
   Loop
 
   'Carica la sequenza in "B"
   ReDim B(75)
   For K = 1 To 75
      B(K) = Nu(K)
   Next
 
   'Elenca  i Numeri Ordinati e NON
   Call OrdinaMatrice(B,False)
   Scrivi "A) " & StringaNumeri(Nu)
   Scrivi
   Scrivi "B) " & StringaNumeri(B)
   Scrivi
   'Cancella '1 Numero a Caso' dalla lunghetta 'B'
   N = NumeroCasuale(10,20)
 
   Scrivi "Dalla lunghetta 'B' cancello " & B(N)
   B(N) = 0
   Scrivi
   Scrivi "B) " & StringaNumeri(B)
   Scrivi
 
   'Cerca il Numero Mancante in 'B'
   For N = 1 To 75
      F = False
      For M = 1 To 75
         If Nu(N) = B(M) Then F = True
      Next
      If Not F Then
         Scrivi "Risultato confronto: In 'B' manca " & Nu(N)
      End If
   Next

End Sub

Può essere ed è probabile che ci sia anche una funzione ad hoc.

:)
 

i legend

Premium Member
Ciao
Sub main
Redim a1(0),a2(0)
Call getcolonnacasuale(75,a1)
Scrivi stringanumeri(a1)
Call getcolonnacasuale(74,a2,a1)
Call getmancante(a1,a2,s)
Scrivi s
End sub
' quello ch segue si puo fare una sub
sub getMancante(a1,a2,s)
Dim n,n1,bret,s
S=""
For n=1 to ubound(a1)
Bret= true
For n1=1 to ubound(a2)
If a1 (n)=a2(n1) then bret=false
Next
If bret then s=s&a1(n)&" "
Next
End sub

Ciao


Scritto da cell
In pratica dovrebbe mettere in in evidenza i numeri della lunghetto più lunga ch e mancano in quella più corta
Verificate se funziona, non posso fare le verifiche , fatemi sapere ciao
 

joe

Advanced Member >PLATINUM PLUS<
Ciao.

Si, naturalmente funziona.

Ho modificato alcune cosette per renderlo più friendly.

La logica della sub è la stessa, tranne che per l'inversione di logica positiva/negativa.

La differenza più grossa è che così si intravvede anche la possibilità di un output

"convenientemente" più corposo ottenuto con uno script più semplice.

Purtroppo, questo output è reso, in formato testo.

Codice:
Sub Main
  ReDim a1(0),a2(0)
  Dim n
  n = 10 'numeri
  Call GetColonnaCasuale(n,a1)
  Scrivi StringaNumeri(a1)
  Call GetColonnaCasuale(n - 1,a2,a1)
  Scrivi StringaNumeri(a2)
  Call getMancante(a1,a2,s)
  Scrivi s
End Sub
Sub getMancante(a1,a2,s)
  Dim x,y,bret
  s = ""
  For x = 1 To UBound(a1)
    bret = True
    For y = 1 To UBound(a2)
      If a1(x) = a2(y) Then bret = False
    Next
    If bret Then s = s & a1(x) & " "
  Next
End Sub

:)
 
Ultima modifica:

joe

Advanced Member >PLATINUM PLUS<
In questa nuova versione ho previsto la possibilità

di avere una quantità selezionabile di numeri forzatamente esclusi.

ed anche di avere i valori di essi in un array numerico.

Codice:
Option Explicit
Sub Main
  ReDim a1(0),a2(0)
  Dim n,s,e

  n = 10 'Numeri
  e =  3 'Esclusi

  Call GetColonnaCasuale(n,a1)
  Scrivi StringaNumeri(a1)
  Call GetColonnaCasuale(n - e,a2,a1)
  Scrivi StringaNumeri(a2)
  Call getMancante(a1,a2,s)
  Scrivi StringaNumeri (s)
End Sub
Sub getMancante(a1,a2,s)
  Dim x,y,bret,K
  ReDim s(UBound(a1))
  For x = 1 To UBound(a1)
    bret = True
    For y = 1 To UBound(a2)
      If a1(x) = a2(y) Then bret = False
    Next
    If bret Then K = K+1 : s(K) = a1(x)
  Next
  ReDim Preserve s(K)  
End Sub

:)
 

i legend

Premium Member
Ciao a tutti :)
Grazie joe per la verifica e per la conferma.
Buona domenica a tutti :)
Credo che lo script serva a Tom per tenere traccia degli esclusi nella riduzione delle lunghette. .
 

lotto_tom75

Advanced Premium Member
Ciao a tutti :)
Grazie joe per la verifica e per la conferma.
Buona domenica a tutti :)
Credo che lo script serva a Tom per tenere traccia degli esclusi nella riduzione delle lunghette. .

Si i legend mi serve proprio per quello ;)

A proposito...

ho provato a mettere le lunghette come array nello script ma mi da errore... e non riesco a trovarne il motivo... (l'errore mi si presenta sia con il tuo che con quello di joe).

posto il tuo ad es.

Se lascio la versione "colonnacasuale" OK
Se però decommento le righe del code per provare a confrontare due specifiche righe di prova da errore... Deve essere sicuramente una sciocchezza ma al momento non riesco a trovarla... ?


Codice:
Sub Main

ReDim a1(0),a2(0)
Call GetColonnaCasuale(75,a1)

'ReDim a1(4)
'ReDim a2(3)

'a1 = Array (0,1,2,3)
'a2 = Array (0,1,2)

Scrivi StringaNumeri(a1)

Call GetColonnaCasuale(70,a2,a1)

Call getMancante(a1,a2,s)

Scrivi s

End Sub

' quello che segue si puo fare una sub

Sub getMancante(a1,a2,s)
Dim n,n1,bret',s
s = ""
For n = 1 To UBound(a1)
bret = True
For n1 = 1 To UBound(a2)
If a1(n) = a2(n1) Then bret = False
Next
If bret Then s = s & a1(n) & " "
Next
End Sub

[/code+
 

i legend

Premium Member
Ciao l errore dipende dalla classe
Getcolonnacasuale( classe, nome dell array, nome dell array di numeri selezionati)
Se metti in un array 5 elementi non si possono sviluppare lunghette da 75
E non serve sviluppare con getcolonnacasuale
Se fai
Remma getcolonnacasuale
Fai a1=array(0,1,2,3,4,6)
A2=array(0,1,3 4,6)
getMancante(a1 ,a2,s)
Dovrebbe funziare:)
 

lotto_tom75

Advanced Premium Member
Ciao l errore dipende dalla classe
Getcolonnacasuale( classe, nome dell array, nome dell array di numeri selezionati)
Se metti in un array 5 elementi non si possono sviluppare lunghette da 75
E non serve sviluppare con getcolonnacasuale
Se fai
Remma getcolonnacasuale
Fai a1=array(0,1,2,3,4,6)
A2=array(0,1,3 4,6)
getMancante(a1 ,a2,s)
Dovrebbe funziare:)

Ciao legend :)
non l'avevo scritto e nel codice non l'avevo riportato ma avevo anche remmato entrambi le call ma anche adesso ho riprovato e mi da sempre errore. Più nello specifico mi scrive "Errore tipo non corrispondente..." e mi evidenzia... questa riga:

a1 = Array (0,1,2,3)

sotto ti riporto anche il codice remmato...

Codice:
Sub Main

'ReDim a1(0),a2(0)
'Call GetColonnaCasuale(75,a1)

ReDim a1(4)
ReDim a2(3)

a1 = Array (0,1,2,3)
a2 = Array (0,1,2)

Scrivi StringaNumeri(a1)

'Call GetColonnaCasuale(70,a2,a1)

Call getMancante(a1,a2,s)

Scrivi s

End Sub

' quello che segue si puo fare una sub

Sub getMancante(a1,a2,s)
Dim n,n1,bret',s
s = ""
For n = 1 To UBound(a1)
bret = True
For n1 = 1 To UBound(a2)
If a1(n) = a2(n1) Then bret = False
Next
If bret Then s = s & a1(n) & " "
Next
End Sub

Ciao :)
 

joe

Advanced Member >PLATINUM PLUS<
Ciao nel primo messaggio hai scritto lunghettone di 75 numeri.

Chiaro che se è una stringa di 150/200 caratteri,

devi anche fornire le specifiche sul come interpretarla.

Diversamente gli elementi indistinti di essa non

possono essere confrontati uno ad uno con quelli

di un altra lunghetta che sia una stringa di 147/197 caratteri.

Brevemente se sono da splittare devi splittarle.

Poi se erano stringhe sono state splittate

Rimangono piccole stringhe dunque

confronti stringhe con stringhe.

E come risultato generi una stringaa cui aggiungono

una ad una le strighette.

Altrimenti se sono numeri li devi raccogliere come elementi iesimi di un array ottenuti dal confronto di

Numero con Numero.

:)
 
Ultima modifica:

Ultima estrazione Lotto

  • Estrazione del lotto
    sabato 13 aprile 2024
    Bari
    36
    14
    82
    54
    13
    Cagliari
    30
    22
    07
    06
    10
    Firenze
    15
    90
    28
    24
    51
    Genova
    67
    14
    23
    85
    90
    Milano
    67
    53
    40
    90
    84
    Napoli
    62
    58
    64
    29
    05
    Palermo
    61
    36
    90
    70
    83
    Roma
    71
    49
    72
    12
    54
    Torino
    16
    41
    78
    17
    75
    Venezia
    52
    09
    56
    85
    81
    Nazionale
    17
    84
    54
    28
    15
    Estrazione Simbolotto
    Genova
    33
    25
    27
    15
    10
Alto