PDA

Visualizza la versione completa : [C/C++] Spiegazione casi particolari rand()


spaghetto
10-09-2007, 20:37
Ciauzzzzzzzzzzzz!
Salve ragazzuoli, posso chiedervi una cosa?
Non so come utilizzare la funzione rand(), di generazione casuale di numeri, come si fa esempio a poter scegliere dei numeri in un insieme definito, mi spiego meglio, per esempio se devo stampare dei numeri interi compresi tra 3 e 27?
Oppure ancora più specifico, in numero compreso in questo insieme (3,98,27,5,13)?
Vi ringrazio in anticipo!
:unz:

pallinopinco
10-09-2007, 21:19
dei numeri in un insieme definito, mi spiego meglio, per esempio se devo stampare dei numeri interi compresi tra 3 e 27?

valore = rand() % MAX + MIN;



Oppure ancora più specifico, in numero compreso in questo insieme (3,98,27,5,13)?


Metti gli elementi in una struttura dati pre-inizializzata e accedi agli elementi con un indice generato casualmente.

MItaly
10-09-2007, 21:21
Dopo aver inizializzato il generatore di numeri casuali con srand usa questa funzione che ho scritto:


int nrand(int min, int max)
{
max-=min;
if (max<=RAND_MAX)
return (rand()%max)+min;
else
return ((int)((double)rand()/(double)max*RAND_MAX))+min;
}; min e max sono ovviamente i due estremi della gamma di valori che vuoi ottenere.
Se non lavori con numeri molto grossi in realtà di solito è sufficiente usare


int tuoValore;
tuoValore=(rand()%(max-min))+min
//o, se il minimo è 0
tuoValore=rand()%max;
.
Quanto alla selezione di un numero compreso in un insieme basta fare così:


int nrange[]={3,98,27,5,13}; //l'insieme in cui sono contenuti i numeri da estrarre
int tuoValore=nrange[rand()%(sizeof(nrange)/sizeof(int))];
.

andbin
10-09-2007, 21:35
Esempio completo:


#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int rand_int (int min, int max)
{
double d;

d = rand () / (RAND_MAX+1.0);
return ((int) (d * (max-min+1))) + min;
}

int main (void)
{
int i;

srand ((unsigned int) time (NULL));

for (i = 0; i < 30; i++)
printf ("%d ", rand_int (-10, +10));

printf ("\n");

return 0;
}

spaghetto
10-09-2007, 21:52
Non posso far altro che ringraziarvi!
Veramente molto gentili, una mano santa...! :quote:

spaghetto
10-09-2007, 22:01
Un' ultima cosa, mi sto preparando per un esame, e il libro che sto utilizzando è il DEITEL & DEITEL, sapreste consigliarmi qualche altro titolo?
Io ho delle difficoltà con le strutture, magari conoscete qualcuno che ne tratta in modo ancora più dettagliato?
Vi ringrazio ancora per le vostre risposte e il vostro tempo.

Skywalker87
10-09-2007, 23:02
Io ho delle difficoltà con le strutture, magari conoscete qualcuno che ne tratta in modo ancora più dettagliato?
Ogni manuale completo tratta le strutture (che poi non richiedono molto tempo per il loro studio). Comunque una buona guida e' sicuramente questa: McGraw Hill Fondamenti di C++ 2/ed (http://www.catalogo.mcgraw-hill.it/catLibro.asp?item_id=1725), anche se penso che il libro che stai leggendo vada gia' piu' che bene, e se hai dei problemi con le struct poi sempre chiedere qui!!

LeleFT
11-09-2007, 09:48
Magari, la prossima volta, indicare anche il linguaggio...


Ciao. :ciauz:

GreyFox86
11-09-2007, 10:59
Se ti interessano trovi diversi esempi che ho tratto da esercitazioni/esami del corso di Programmazione dell'università (quanti ricordi, il primo corso sulla programmazione dei 3 anni :D ) sul mio sito, diversi usano le strutture. C'è pure testo e soluzione della prova di labo che insieme allo scritto mi ha fruttato la lode :unz:

spaghetto
11-09-2007, 18:02
Vi ringrazio tutti quanti, siete stati molto gentili...
Cmq il linguaggio è il C!
:quote:

Loading