[VB6] Eliminare elementi uguali array

lunedì 11 gennaio 2010 - 14.19

guli Profilo | Junior Member

Ciaooo a tutti,
ho un array di numeri e devo eliminare numeri uguali....
grazie e ciao

Dainesi Profilo | Senior Member

Cicli due volte l'intero array.
Per ogni elemento controlli gli altri elementi se sono uguali e se lo sono cambi il loro valore a 0 o a -1.
Finito il doppio ciclo ripassi l'array e cancelli gli elementi con il valore 0 (o -1)
Autore del libro sul FOREX, MetaTrader e creazione dei trading system http://ilmiolibro.kataweb.it/schedalibro.asp?id=115872

guli Profilo | Junior Member

cortesemente potresti postarmi il codice, xkè nn capisco bene....

Grazieeee

Dainesi Profilo | Senior Member

Prova un pò a vedere questo esempietto che ti ho buttato giù:

Private Sub Command1_Click() Dim aNumeri(20) As Integer Dim aNuovi() As Integer Dim i As Integer Dim y As Integer Dim fool As Integer Dim flag As Boolean For i = 0 To 20 aNumeri(i) = CInt(Int((20 - 1 + 1) * Rnd() + 1)) Debug.Print aNumeri(i) Next For i = 0 To 20 fool = aNumeri(i) For y = 0 To 20 If aNumeri(y) = fool And i <> y Then aNumeri(i) = 0 Next Next For i = 0 To 20 - 1 If aNumeri(i) = 0 And aNumeri(i + 1) <> 0 Then aNumeri(i) = aNumeri(i + 1) aNumeri(i + 1) = 0 flag = True End If Next ReDim aNuovi(0) For i = 0 To 20 If aNumeri(i) <> 0 Then If UBound(aNuovi) >= 0 And aNuovi(0) <> 0 Then ReDim Preserve aNuovi(UBound(aNuovi) + 1) aNuovi(UBound(aNuovi)) = aNumeri(i) Else aNuovi(0) = aNumeri(i) End If End If Next Debug.Print "Correzzione" For i = 0 To UBound(aNuovi) Debug.Print aNuovi(i) Next End Sub

.
Autore del libro sul FOREX, MetaTrader e creazione dei trading system http://ilmiolibro.kataweb.it/schedalibro.asp?id=115872

guli Profilo | Junior Member

scusami ma che significa questo pezzo:

CInt(Int((20 - 1 + 1) * Rnd() + 1))

Dainesi Profilo | Senior Member

>scusami ma che significa questo pezzo:
>
>CInt(Int((20 - 1 + 1) * Rnd() + 1))

La funzione Rnd ritorna un numero compreso tra 0 e 1 e quindi molto probabile che il numero ottenuto sia decimale. Dato che volevo un numero intero compreso tra 1 e 20 ho dovuto "normalizzare il risultato.

La formula che ho scritto dovresti vederla in quest'ottica:

Numero generato = CInt(Int(LimiteSuperiore - LimiteInferiore + 1) * Rnd() + LimiteInferiore))

Dove CInt è una funzione di typecasting per convertire un valore in un Integer e Int è una funzione che tronca un valore alla sua parte intera.

.
Autore del libro sul FOREX, MetaTrader e creazione dei trading system http://ilmiolibro.kataweb.it/schedalibro.asp?id=115872

guli Profilo | Junior Member

ok, grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5