View Full Version : [C++] Generazione random number
Emaborsa
07-05-2011, 20:32
Rieccomi....avrei bisogno di una mano a scrivere del codice per la creazione di un numero casuale. Sono al corrente di rand e srand, ma vi spiego il problema:
int random(){
int number = 100;
srand(time(NULL));
int randomNumber = rand() % number + 1;
return randomNumber;
}
Il codice è perfetto, ma solo se viene chiamato con intervalli di larghi. O meglio detto: Se viene chiamato in un loop per esempio, dato che rand e srand sono legati al "tempo", viene generato sempre lo stesso numero. Se io scrivo:
...
int numero1 = random();
int numero2 = random();
int numero3 = random();
int numero4 = random();
int numero5 = random();
...
...tutte le variabili numeroX hanno lo stesso valore.
Cerco un modo per risolvere questo quesito.
Gimli[2BV!2B]
07-05-2011, 20:59
srand va invocato una sola volta: imposta il seme della sequenza di numeri pseudo-casuali.
La tua funzione lo invoca molte volte "nello stesso istante", quindi con lo stesso valore fornito da time, ottenendo sempre lo stesso numero: il primo della sequenza pseudo-casuale inizializzata.
Esempio corretto, generazione di 100 numeri pseudo-casuali, range 1-100:#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void main()
{
srand((unsigned)time(NULL));
int x = 0, nMax_rand = 100;
while( x++ < 100 )
{
printf( "%i\t", rand() % nMax_rand + 1 );
if( x % 5 == 0 )
printf("\n");
}
}
Emaborsa
07-05-2011, 22:00
Questo è il mio metodo:
/*
* This method returns a random number accordingly to
* the entries of the passed table name in the database
*/
int Database::getRandomNumber(string tableName) {
string aQuery = "SELECT number, count(*) FROM " + tableName + ";";
sqlite3_stmt *pStmt;
char* ptAQuery = &aQuery[0];
if (sqlite3_prepare_v2(databaseConnection, ptAQuery, -1, &pStmt, 0)
!= SQLITE_OK) {
cerr << "db error (preparev2 in getRandomNumber): " << sqlite3_errmsg(
databaseConnection) << endl;
}
if (sqlite3_step(pStmt) != SQLITE_ROW) {
cerr << "db error (step in getRandomNumber): " << sqlite3_errmsg(
databaseConnection) << endl;
}
int number = sqlite3_column_int(pStmt, 0);
srand(time(NULL));
int randomNumber = rand() % number + 1;
sqlite3_finalize(pStmt);
number = 0;
return randomNumber;
}
il metodo viene richiamato 6 volte di fila per creare la gui.
Come faccio?
Basta levare srand da la e metterlo in un qualsiasi altro posto che viene chiamato una sola volta :stordita:
Pure il main andrebbe benissimo.
Emaborsa
08-05-2011, 10:06
Basta levare srand da la e metterlo in un qualsiasi altro posto che viene chiamato una sola volta :stordita:
Pure il main andrebbe benissimo.
!!!!!funziona. Grazie mille!
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.