Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Estrazione numeri tombola
Forum - C# / VB.NET - Estrazione numeri tombola

Avatar
nervo91 (Normal User)
Newbie


Messaggi: 2
Iscritto: 16/12/2010

Segnala al moderatore
Postato alle 11:13
Giovedì, 16/12/2010
Ciao sto facendo un programmino per il gioco della tombola.
Vorrei estrarre i numeri senza ripeterli
Qualcuno mi puo aiutare??? Grazie:)

PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Up
2
Down
V
Segnala al moderatore
Postato alle 11:49
Giovedì, 16/12/2010
Testo quotato

Postato originariamente da nervo91:

Grazie ,
ti spiego cosa avevo pensato di fare io:
allora praticamente mettevo in un vettore tutti i numeri che estraggo man mano e ogni volta li vado a ricontrollare tutti..... ma quando eseguo il programma non fa nulla si blocca.
comunque sto programmando in vb.net



senza codice è difficile dire cosa c'è che non va...

x paolo: il codice che proponi è altamente inefficiente. immagina di dover generare 10000 numeri casuali che non si ripetono. secondo il tuo ragionamento tu "tiri ad indovinare" e poi controlli se il numero non è già uscito. questo comporta diversi problemi: ad esempio immagina di aver generato con successo 9999 numeri tutti diversi, sai dirmi mediamente quanti tiri dovrai fare per tirar fuori l'ultimo numero? circa 10000 (anche di più se consideriamo la tendenza di rand di estrarre numeri bassi). capisci che questo sistema non è generale, oltre al fatto che il tempo di esecuzione non è lineare!
l'approcio migliore invece è generare una lista di numeri ordinata ed eseguire una serie di n/2 swap con indici casuali in modo da randomizzare la lista.

Quoto - pierotofy - 17/12/10 18:05
PM
Avatar
nervo91 (Normal User)
Newbie


Messaggi: 2
Iscritto: 16/12/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 11:26
Giovedì, 16/12/2010
Grazie ,
ti spiego cosa avevo pensato di fare io:
allora praticamente mettevo in un vettore tutti i numeri che estraggo man mano e ogni volta li vado a ricontrollare tutti..... ma quando eseguo il programma non fa nulla si blocca.
comunque sto programmando in vb.net

PM
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Up
0
Down
V
Segnala al moderatore
Postato alle 13:02
Giovedì, 16/12/2010
scusate il post, non avevo letto del tutto quello di HeDO

Ultima modifica effettuata da lorenzo il 16/12/2010 alle 13:04
PM
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Up
0
Down
V
Segnala al moderatore
Postato alle 16:05
Giovedì, 16/12/2010
Testo quotato

Postato originariamente da HeDo:
[...]
l'approcio migliore invece è generare una lista di numeri ordinata ed eseguire una serie di n/2 swap con indici casuali in modo da randomizzare la lista.



Pienamente d'accordo,
feci qualcosa di simile quando ebbo lo stesso problema nel mio Clondike per gestire il mazzo di carte.

PM
Avatar
paoloricciuti (Ex-Member)
Pro


Messaggi: 137
Iscritto: 27/04/2010

Up
-1
Down
V
Segnala al moderatore
Postato alle 11:19
Giovedì, 16/12/2010
Testo quotato

Postato originariamente da nervo91:

Ciao sto facendo un programmino per il gioco della tombola.
Vorrei estrarre i numeri senza ripeterli
Qualcuno mi puo aiutare??? Grazie:)



Ti scrivo dello pseudo codice:
Codice sorgente - presumibilmente C# / VB.NET

  1. int[90] numeri={1,2,...,89,90};
  2. boolean[90] uscito={false,...,false};
  3. for(i=0; i<90; i++){
  4. int random;
  5. do{
  6. random=rand(90);
  7. }while(uscito[random]);
  8. stampa(numeri[random]);
  9. uscito[random]=true;
  10. }


PM