|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Jan 2007
Messaggi: 112
|
[C++] generazione di numeri casuali
salve
vorrei implementare Quick sort random in effetti devo creare la funzione random(int p, int u) che mi restituisce un numero casuale tra p e u Codice:
int random(int p, int u) { srand(time(NULL)); return p+rand()%(u-2); } Codice:
for(int i = 0; i < 10; i++) { cout << random(3,10) << endl; } cout << random(3,10) << endl; cout << random(3,10) << endl; cout << random(3,10) << endl; cout << random(3,10) << endl; cout << random(3,10) << endl; l'output e' : 9 9 9 9 9 9 9 . . . 9 9 io vorrei: 3 5 2 3 10 4 5 come mai? |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Jan 2007
Messaggi: 112
|
un aggiornamento:
eliminando srand(time(NULL)) ottengo quello che volevo ma il problema è che poi ad ogni esecuzione genera sempre gli stessi numeri e quindi non posso valutare l'efficienza degl'algoritmi come posso fare? |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Non sono un esperto di C++ e funzioni/strutture dati affini, ma leggendo questo mi sono fatto un'idea:
Quote:
![]() Usa una funzione di timestamp più fine (non so quale) per generare l'argomento da passare a srand(). Ciao ![]()
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Jan 2007
Messaggi: 112
|
ho risolto eliminando la srand all'interno della function e richiamdola nel main così mi vale per tutti i test dove ho bisogno di numeri casuali e funziona correttamente.
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Se usi VS2008 puoi installare il Feature Pack e usare la classe uniform_int definita nel TR1.
Oppure usare funzioni specifiche dell'OS per la generazione del seme tipo GetTickCount o ftime (lo so che non sono analoghe ma per lo meno acquisiscono una unità di tempo al millisecondo) |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:09.