PDA

View Full Version : c++ numeri casuali


Carlo1991
06-08-2008, 01:33
ciao a tutti.. Vado subito al sodo.. Mi serve una traccia di programma che dia dei numeri completamente casuali tra 10 e 18 e li metta tutti in un vettore di sei elementi..
srand(time(0));
for(i=0; i=6; i++)
{
scelta = 1+rand() % 8;
i=0;
switch(scelta)
{
case 1: valori[i]=11;
break;
case 2: valori[i]=12;
break;
case 3: valori[i]=13;
break;
case 4: valori[i]=14;
break;
case 5: valori[i]=15;
break;
case 6: valori[i]=16;
break;
case 7: valori[i]=17;
break;
case 8: valori[i]=18;
break;
}
for(i=0; i=6; i++)
{
cout<<valori[i]<<endl;
}
ho provato facendo così ma quando mi da i valori va in loop facendo uscire tutti 0.. Sapete qualche altro metodo ? Grazie in anticipo a tutti

DanieleC88
06-08-2008, 09:58
Ti conviene innanzitutto eliminare interamente lo switch: una volta ottenuto il numero casuale, ti basta aggiungervi 10, o generare direttamente un numero tra 10 e 18. :p

Vedo alcuni errori gravi poi:

hai due cicli for che utilizzando la stessa variabile come contatore (i); da come hai scritto sono uno interno all'altro e sarebbe quindi un problema: però, se ho letto male io ed il secondo ciclo è successivo al primo, allora è ok.
inizializzi i a 0 ad ogni ciclo (i = 0).
dopo ogni ciclo, invece di controllare che i sia minore di 6, le assegni il valore 6 (i = 6). Nel C e nel C++ il valore numerico zero è considerato logicamente "falso", tutti gli altri valori numerici sono valutati logicamente come "vero", perciò assegnando i = 6 hai un valore "vero" di i e il tuo for va avanti all'infinito. :) La tua intenzione era di dire "fermati quando i è uguale a 6"? Volendola scrivere in quel modo, avresti dovuto usare i == 6 (dove il doppio uguale è l'operatore giusto, che fa i confronti e non assegna), ma sarebbe stato ancora semanticamente errato, perché il for va avanti fintanto che quella condizione è verificata, e avresti dovuto continuare nel mentre che i non uguagliava 6 (i != 6).


Io farei in questo modo:
#define RAND(min, max) ((min) + (int) ((float)(max) * (rand() / (RAND_MAX + 1.0f))))
#define N 6

// ...

int valori[N];
int i;

srand(time(0));
for (i = 0; i < N; ++i)
{
valori[i] = RAND(10, 18);
cout << valori[i] << endl;
}

Ziosilvio
06-08-2008, 12:07
http://www.hwupgrade.it/forum/showthread.php?t=1196677