Newsgroup: it.comp.lang.visual-basic
Titolo: random

scusate la mia ignoranza,
come posso fare a ricavare una serie di numeri da 1 a 100 a caso in vb6
senza avere dei doppioni ?
 sperando in un vostro aiuto
vi ringrazio anticipatamente

 senza avere dei doppioni ?
Una delle soluzioni è questa:
Riempi una collection con i numeri che ti servono.
Fai un Rnd (ricordati il Randomize prima!) che copra il range da 1 a
MiaCollection.Count.
Il numero estratto è MiaCollection.Item(MioRnd).
Rimuovi l'item dalla collection.
Ripeti dal punto 2 fino ad avere quanti numeri ti servono.
Ciao
-- 
NeoDataType : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

 Ciao
Ciao :)
-- 
Quando noi ignoranti eravamo di piů, tutto era piů bello (A. Celentano).
  ___   _   ___ _  _______   _______ ___
|   \ /_\ | _ \ |/ / _ ) \ / /_   _| __|
| |) / _ \|   / ' <| _ \\ V /  | | | _|
|___/_/ \_\_|_\_|\_\___/ |_|   |_| |___|
GIGAMAIL by X-Privat: 
http://www.x-privat.org/gigamail.php

 Non sarebbe un po' più veloce usando vettori?
Certo.
Ma sono 100 numeri, non 10 milioni.
E sarebbe stato anche leggermente più complesso da implementare e da
spiegare :)



wrote:

Questo č un pň dispendioso in termini di cicli fatti ma dovrebbe
funzionare
Sub TestRandom()
    Dim b(99) As Boolean
    Dim j As Integer
    Dim k As Integer
    Randomize
    Do While j < 100
        k = Int((100 * Rnd) + 1) - 1
        If Not b(k) = True Then
          j = j + 1
          Debug.Print k + 1
        End If
    Loop
End Sub
Questo un pň piů complesso 
Sub TestRandom()
    Dim s As String
    Dim x As String
    Dim k As Integer
    Dim j As Integer
    For k = 1 To 100
        s = s & Format(k, "000")
    Next
    Randomize
    Do While s <> ""
        k = Int(((Len(s) / 3) * Rnd) + 1)
        j = (k - 1) * 3 + 1
        k = Int(Mid$(s, j, 3))
        x = s
        s = ""
        If j > 1 Then s = s & Left$(x, j - 1)
        If j + 2 < Len(x) Then s = s & Mid$(x, j + 3)
        Debug.Print k
    Loop
End Sub
=======================================================================
Se mi vuoi scrivere togli le maiuscole
Sveltolampo 
cteniza...@hotmail.com
=======================================================================

Scusate ma non c'è qualcosa di più semplice
per risolvere questo problema?
visto che io sono non sono molto pratico, e aggungo
anche molto zuccone, ad interpretare i vari vocaboli ?
comunque grazie ancora per il vostro aiuto 

 ha scritto nel messaggio

Tu soluzioni semplici, leggibili e che magari funzionino no, eh? :)


 spiegare :)
Ah beh questo si :)


 comunque grazie ancora per il vostro aiuto
Non capisco cosa tu voglia di piů semplice.
Hai letto il mio post?
Si fa tutto con 5 o 6 righe di codice.


 
http://www.visualbasicforum.com/showthread.php?s=ed8d6cb37000b748dd091aebf0311839&t=76270&highlight=random+numbers
ciao
	maxx
-- 
NOSPAM: Rimuovere i trattini dallo username!
Cut hyphens from my username!

Tu soluzioni semplici, leggibili e che magari funzionino no, eh? :)
Funzionano, che cosa ti preoccupa


>         End If
va aggiunto una riga:
b(k) = true


 senza avere dei doppioni ?
Prova cosě:
Sub Form_Load()
    Dim Fatto As Byte
    Dim T As Integer
    Dim N As Integer
    Dim TN(100) As Integer
    Randomize Timer
    Fatto = 0
    Do Until Fatto = 1
        N = Int(Rnd * 100) + 1
        If TN(N) = 0 Then
            TN(N) = N
            T = T + N
            Debug.Print N ' --- Qua lo visualizzi o lo intabelli o quello
che meglio credi
        End If
        If T = 5050 Then ' --- Somma dei numeri da 1 a 100
            Fatto = 1
        End If
    Loop
End Sub
Ciao a presto
Stephen

 ha scritto nel messaggio
news:2v4282F...@uni-berlin.de...

Ma cos'č?
La fiera delle soluzioni eclettiche? :)
(mi verrebbe da dire "demenziali", ma non vorrei offendere qualcuno).
Variabili tipizzate in modo errato, magic numbers, operazioni matematiche
inutili...
Dovreste provare a iscrivervi a qualche torneo di "obfuscated code", come
questo che per eseguire la somma di due numeri positivi ha scritto questo
comprensibile codice in C
http://remus.rutgers.edu/~rhoads/Obfuscated_C/heathbar


per risolvere questo problema?
Certo, c'è l'algoritmo di termoPilucco.
dim Wizard as new termoPilucco.wizard
call Wizard.summon("estrai cento numeri casuali da uno a cento non ripetuti")
set Wizard=nothing ' mi raccomando: metti a nothing altrimenti il wizard non può
passare dagli altri programmatori che lo invocano.
Se quello non funziona, prova questo:
Sub estrai_senza_ripetizioni(ByVal PartiDa As Long, finoA As Long)
Dim UltimaCella As Long ' tiene traccia dell'ultima cella
		             ' dell'array in cui stanno i numeri da estrarre
Dim b As Long              ' contatore
Dim Arr() As Long         ' array d'appoggio
' dimensiono array di appoggio
ReDim Arr(0 To finoA - PartiDa)
' popolo l'array con i valori desiderati da estrarre 
UltimaCella = UBound(Arr)
For b = LBound(Arr) To UltimaCella
   Arr(b) = PartiDa
   PartiDa = PartiDa + 1
Next
' estraggo i 100 valori a caso e senza ripetizioni
Randomize
While UltimaCella <> -1
    b = CLng(Rnd * UltimaCella)
    ' numero estratto
    Debug.Print Arr(b)               
    ' scambio di posizione l'ultimo dell'array con l'ultimo estratto
    Arr(b) = Arr(UltimaCella)
    ' faccio finta che l'array diventi più piccolo
    UltimaCella = UltimaCella - 1
Wend
Erase Arr 
End Sub
termoPilucco


Si però ti ha anche disegnato il circuito elettronico (con porte AND)
per farlo!!!
    danilo

 inutili...
Cosa sono i magic numbers?
-- 
Ciao
Bob
Home page:
http://www.webalice.it/argonex/
Starcraft - La rivolta di Korhal -
http://digilander.libero.it/korhal/


Mi ricorda qualcosa ;)
L'hai trovato su qualche sito? 
E' uguale a quella che ho postato un anno fa.
termoPilucco

 E' uguale a quella che ho postato un anno fa.
E' una routine in Basic-Plus di Thomas Dwyer e Margot Critchfield
del 1977 adattata da me al VisualBasic più di 10 anni fa.
Se è uguale alla tua si tratta di una caso, vista "l'enorme"
complessita del codice niente di più probabile. ;-)


complessita del codice niente di più probabile. ;-)
Direi :)
Volevo solo capire se aveva un nome, come gli algoritmi più nobili...
Se non ce l'ha, Dwyer-Critchfield-termoPilucco è un nome un po' lungo... per cui
toglierei i primi due ;)
termoPilucco
P.s. 
Per motivi più frivoli (videogiochi) ero finito in una classifica mantenuta da
giapponesi, e per loro, "termoPilucco" è un nome troppo lungo.
Alla fine mi hanno messo in classifica come "pilucco-san".

 Alla fine mi hanno messo in classifica come "pilucco-san".
abebe', mo' ti tocca postare col nuovo nick.
uma ne sarebbe entusiasta :)
ciao pilucco-san, j.

> Cosa sono i magic numbers?
Suppongo che Zanna con magic Numbers intendesse il numero 5050
    danilo