Newsgroup: it.comp.lang.pascal
Titolo: Tombola

Qualcuno sa o ha fatto il gioco della tombola con pascal.
A me serve soltanto la simulazione dell'estrazione dei numeri.Ogni numero
deve essere estratto una sola volta!!
Grazie

EMILIANO PEZONE ha scritto 7 righe per esprimere il seguente concetto:

Tempo fa avevo lo stesso problema per simulare un mazzo di carte nel
gioco del poker. 
Ho risolto cosě: ho messo tutti i numeri (nel mio caso le carte) in un
array, poi mischiavo random il mazzo, poi estraevo normalmente le
carte in sequenza, incrementando un indice globale.
La parte piů difficile resta quindi "mischiare" il mazzo:
Ecco come ho fatto io (in delphi ma puoi sempre adattarlo)
mazzo[] č l'array contenitore.
TCard č il tipo delle carte, ma tu puoi usare tranquillamente integer.
procedure ClassCards.MischiaMazzo;
var
  i : integer;
  c1, c2, tmp : TCard; 
begin
  for i := 1 to random(100) + 100 do  (* da 100 a 199 *)
  begin
    c1 := random(52) + 1;             (* da 1 a 52 *)
    c2 := random(52) + 1;
    tmp := mazzo[c1];                 (* Esegue lo swap *)
    mazzo[c1] := mazzo[c2];
    mazzo[c2] := tmp;
  end;
  indice := 1;	// punta alla prima carta del mazzo
end;
-- 
(*metallikop*libero*it*)
{
http://web.tiscali.it/mbsoftware
}


wrote:

Devi fare un vettore di boolean e ogni volta che strani un numero devi
confrontarlo con l'elemento del vetore per vedere se è gia stato
estratto
Il Razziatore,
The Only Good Windows in an uninstalled Windows
-----------------------------------------------
E-MAILs : IlRazziat...@NOSPAMnetscape.net
WEB     : 
http://www.razziatore.dns2go.com/
ICQ     : 67552596

ti fai un array[1..90] of boolean e ogni volta che estrai un numero
(con random(89)+1 direi) setti a true la var corrispondente...
quando estrai un nuovo numero controlli nell'array che non
sia gia' uscito...  boh ci sono anche altri metodi ma mi sembra
il piu' facile...
--
Dreadnaut (dn)
drea...@liberoDALLASPAM.it
(Life would be easier if I had the source code)

 ha scritto nel messaggio
news:M0KP7.4767$Sq4.1...@news1.tin.it...


complessita in O(n^2) per estrarre tutti i numeri... sigh...


 wrote in message
M0KP7.4767$Sq4.1...@news1.tin.it...


Una soluzione sarebbe quella di andare a prendere il numero non estratto
sucessivo o precedente a quello memorizzato nell'array
es:
abbiamo il nostro array boleano da 1 a 90  e 10 numeri
mettiamo a 1 10 elementi dell'array
poi la sfiga vuole che 1 elemento ci sia gią , allora vado a vedere il
sucessivo č vuto? si ok prendo quello, se non sono arrivato alla fine no
passo al sucessivo se no faccio una scansione all'inidetro da dove ero
partito e prendo il primo elemento vuoto se non trovo nulla vuol dire che ho
estratto i tutti i 90 numeri

Perdi mooolto random:
se la sequenza di numeri casuali e' 5 7 10 10
con il tuo modo uscira' sempre 5 7 10 11 (o 9)
ma se andassi avanti col random cosa potrebbe uscire ??
9, 11 o magari 89 :-)  quindi inserisci un determinismo
che "non e' bello"
e cmq cercare un numero libero in su o in giu' ha costo lineare,
prendere un altro numero a caso mooolto di meno :-)


 prendere un altro numero a caso mooolto di meno :-)
Falso controlla i calcoli della complessità del tuo algoritmo il mio va in
O(n) anche se facendo i calcoli con una anlisi ammortizzata si può mostrare
che la complessità si  abbassa notevolmente

 gioco di parole)
no asp forse mi sono spiegato male...
dato un certo numero di randomize la random potrebbe restituire la
sequenza 10 50 34 10 80, con un altro a.e. 10 50 34 10 63
Su un'estrazione di 4 numeri, il tuo metodo restituisce la _stessa_
sequenza 10 50 34 11 ... il mio "ritenta" per ottenere un altro numero
senza basarsi su metodi di scelta (il piu' vicino, il succ) e quindi mi
sembra meno deterministico: una volta 10 50 34 80, un'altra - - - 63
molto dipende anche dall'uso che devi fare, ma imporre una regola
sulla scelta di un numero casuale mi sembra... ecco... contraddittorio
[ gia' e' un'utopia il numero casuale... :-) ]


 azzeccarlo al primo colpo con la rulette ne ho 1/27
Il post è vecchio ma... se proprio vuoi azzeccare i numeri al primo colpo
quando i numeri sono in fine puoi fare una variabile integer e aumentarla
di 1 ad ogni numero estratto (che nn è uscito prima) poi quando la vaiabile
supera un certo valore (per esempio 80) applichi quel procedimento.


Salve
Oggi in mensa stavamo discutendo (io e dei miei compagni di corso) di questi
problemi, legati alla generazione di numeri casuali senza incorrere in
ripetizioni, e siamo riusciti a trovare un algoritmo di complessità costante
per la singola estrazione, fonamentalmente si tratta di creare un array di
interi contenete i numeri da estrarre, poi si genera un numero casuale che
va da 0 (o 1 a seconda di come si considera l'array) al numero di elementi
restanti da estrarre, si prende il valore indicizzato, lo si scambia con
l'ultimo elemento, e si decrementa il numero restante di elementi da
estrarre(..scusate le ripetizioni)
{G}eppo
Panther Power 3D Studio - Coder of GBA Team
www.panther3d.com