 
View Full Version : Linguaggio C funzione rand()
Come si fa in C a generare con la funzione rand() un numero compreso tra -100 e 100???
Grazie  :D
fai una rand()%200 in modo da avere un numero compreso tra 0 e 200 poi sottrai 100
rand()%200-100
ok e per i negativi come faccio?
ok e per i negativi come faccio?rand()%201-100 fornisce un valore random tra -100 e +100.
basta così, se hai zero dalla rand()%200 sottraendo 100 ottieni -100, se hai 200 ottieni 100
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.
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:
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?
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.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.