|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: May 2005
Messaggi: 249
|
Linguaggio C funzione rand()
Come si fa in C a generare con la funzione rand() un numero compreso tra -100 e 100???
Grazie |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
fai una rand()%200 in modo da avere un numero compreso tra 0 e 200 poi sottrai 100
rand()%200-100
__________________
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: May 2005
Messaggi: 249
|
ok e per i negativi come faccio?
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
basta così, se hai zero dalla rand()%200 sottraendo 100 ottieni -100, se hai 200 ottieni 100
__________________
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 4329
|
come per i negativi come fai?
esempio : rand 200 = 50..... 50 - 100 = -50 esempio 2: rand 200 = 150......150 - 100 = 50
__________________
|18k+|slk800|a7n8x|1Gb/ddr400|Gf4mx440|Pio108|WD 160Gb|Case|Uni|Album|AnimeClick|OneManga| |ClassicThrash!|BNR Metal|TrueMetal|Dime|Chuck| |
|
|
|
|
|
#7 | |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
Codice:
((int)(rand()/(RAND_MAX+1.0))*200)-100
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
|
|
|
|
|
#8 | |
|
Member
Iscritto dal: May 2005
Messaggi: 249
|
Quote:
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
|
|
|
|
|
|
|
#9 |
|
Junior Member
Iscritto dal: Jun 2006
Messaggi: 4
|
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ì |
|
|
|
|
|
#10 | |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
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?
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
|
|
|
|
|
#11 |
|
Member
Iscritto dal: May 2005
Messaggi: 249
|
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.... |
|
|
|
|
|
#12 | |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
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. 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.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:10.



















