|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Aug 2007
Messaggi: 70
|
c# tobola senza ripetizione dei numeri
vorrei fre un programma in visual c# tipo tombola ma ho un problema i numeri che si ripetono ho provato a utilizziare il .next(1,91) ma niente anche mettendolo in un vettore e facendo + controlli con dei cicli for ho sempre delle ripetizioni voi avete soluzioni per questo problemi?
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Ti serve in pratica una permutazione dei numeri da uno a 90
un metodo semplice e' quello di partire con un array con i valori da 1 a 90, cominciare dalla prima posizione e scambiarla con un'altra a caso (e ottieni il primo valore). Poi passi alla posizione successiva e fai uguale e cosi' via per tutte le posizioni. Non so il C#, ti offro una versione python che dovrebbe darti cmq l'idea di come funzioni: Codice:
def tombola_casuale():
estrazioni = range(1,91)
for i in range(89):
j = random.randint(i,89)
estrazioni[i],estrazioni[j] = estrazioni[j],estrazioni[i]
yield estrazioni[i]
yield estrazioni[89]
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Nov 2007
Città: Cosenza
Messaggi: 13
|
Un altro metodo potrebbe essere quello di inserire i numeri da 1 a 90 in una lista, quindi generi numeri a caso da 0 fino alla taglia della lista meno 1.
Questo numero random lo utilizzi come indice per accedere agli elementi della lista. In questo modo scegli un numero proveniente dalla lista e quindi lo rimuovi. Quando genererai un nuovo numero casuale accederai ad un nuovo elemento della lista che, per forza, non potrà essere un numero già estratto (quelli estratti vengono rimossi). |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Aug 2007
Messaggi: 70
|
grazie per ora mi avete fatto venire in mente un modo
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Aug 2007
Messaggi: 70
|
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2784
|
Probabilmente lui parlando di lista non intendeva una listbox ma un array.
|
|
|
|
|
|
#7 |
|
Junior Member
Iscritto dal: Nov 2007
Città: Cosenza
Messaggi: 13
|
In effetti con "lista" intendevo una struttura dati tipo "linked list". Tramite questa struttura simuli il sacchetto con i numeri. Ecco perché quando estrai un numero lo rimuovi dalla lista, operazione che è molto semplice fare su una lista. Questa operazione la puoi fare anche tramite un array, però ogni volta che estrai un numero devi stare attento a ricompattare l'array altrimenti rischi che ad una estrazione successiva tiri fuori un numero già estratto oppure estrai un "buco" nel senso che restituisci un numero non valido se i numeri estratti li sostituisci nell'array con qualcosa come -1 (un'alternativa sarebbe rigenerare il numero random se l'accesso all'array ti porta su un "buco" fino a quando non ottieni l'indice di un numero valido).
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
La soluzione di ¬A or B è ottima soprattutto in presenza di pochi elementi (90 sono molto pochi).
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:47.



















