PDA

View Full Version : Linguaggio C funzione rand()


white05
30-04-2006, 15:55
Come si fa in C a generare con la funzione rand() un numero compreso tra -100 e 100???

Grazie :D

wisher
30-04-2006, 16:05
fai una rand()%200 in modo da avere un numero compreso tra 0 e 200 poi sottrai 100
rand()%200-100

white05
30-04-2006, 16:24
ok e per i negativi come faccio?

andbin
30-04-2006, 16:47
ok e per i negativi come faccio?rand()%201-100 fornisce un valore random tra -100 e +100.

wisher
30-04-2006, 16:47
basta così, se hai zero dalla rand()%200 sottraendo 100 ottieni -100, se hai 200 ottieni 100

dnarod
30-04-2006, 16:48
come per i negativi come fai?

esempio : rand 200 = 50..... 50 - 100 = -50
esempio 2: rand 200 = 150......150 - 100 = 50

:)

Ziosilvio
30-04-2006, 17:54
Come si fa in C a generare con la funzione rand() un numero compreso tra -100 e 100???
((int)(rand()/(RAND_MAX+1.0))*200)-100
sostituendo 200 con 201 se il valore 100 è ammissibile.

white05
02-06-2006, 23:50
sostituendo 200 con 201 se il valore 100 è ammissibile


Sono sempre io.

Ho scritto

rand()%200-100

e mi da anche il valore -100 e 100 come è possibile?? Gli estremi dell'intervallo non dovrebbero essere compresi :mbe:

kiedis
03-06-2006, 20:24
Non mi ricordo perfettamente se la rand ti da un valore compreso tra 0 e l'estremo compreso, se così è, e da quello che hai scritto pare di si basta che metti rand()%198 - 99, così se ti da:

rand()% 198 = 0 - 99 = -99 --> caso minimo
rand()% 198 = 198 - 99 = 99 --> caso massimo

Non vorrei dirti cavolate...però mi sembra sia così

Ziosilvio
04-06-2006, 01:37
Ho scritto

rand()%200-100

e mi da anche il valore -100 e 100 come è possibile?
L'espressione che hai scritto corrisponde a valutare rand, prendere il resto della divisione per 200, e sottrargli 100.
Ma un resto di una divisione per 200 è fra 0 e 199, quindi l'espressione dovrebbe variare tra -100 e +99 inclusi.
Per cui, se ogni tanto esce fuori +100, deve esserci qualcosa che non va da qualche altra parte.
Puoi postare un altro po' di codice?

white05
04-06-2006, 02:06
La parte interessata è questa

........................
srand((unsigned) time(NULL));

for(i=0;i<n;i++){

numero_casuale = rand()%200-100;

a[i]=numero_casuale;

}

printf("l'array generato e':\n\n");

for(i=0;i<n;i++){

printf("%d ",a[i]);
}
.................................

a me serve che non si visualizzi ne -100 ne 100 perché l'intervallo è aperto e quindi non ammette gli estremi....

Ziosilvio
04-06-2006, 13:20
a me serve che non si visualizzi ne -100 ne 100 perché l'intervallo è aperto e quindi non ammette gli estremi....
Allora, i numeri "veri" che puoi prendere, sono gli interi tra -99 e +99 inclusi.
Il numero di questi interi è 199, non 200.
Quindi: o fai la congruenza modulare modulo 199, e poi sottrai 99; oppure fai una cosa un po' più pulita seguendo quello che ho scritto qui (http://www.hwupgrade.it/forum/showthread.php?t=1196677).

A parte questo, mi pare che il codice non contenga errori, e non capisco come faccia a uscire 100 ogni tanto, come dicevi poco fa.