[C++] Funzione su array
Ciao a tutti.... io sto facendo un banalissimo programma in c++ , un semplice ordinamento di vettore di interi, i numeri presenti all'interno possono essere compresi da uno a 20 e sono randomici, quindi ho utilizzato la funzione random()...ma ho un problema...la prima volta ha funzionato perfettamente...ma gia dalla seconda volta ke l'ho provato mi sono accorto ke mi genera sempre gli stessi numeri randomici..ki mi sa aiutare??? grazie
QUESTA è LA FUNZIONE :
QUESTA è LA FUNZIONE :
void carica(int vet1[]){ int i; for(i=0;i<N;i++){ vet1[i]=random(19)+1; } }
Risposte
non vorrei dire castronerie ma mi pare che random vada a prendere valori sempre dalle stesse celle di memoria nelle quali rimane lo stesso valore casuale, mi pare ci fosse una funzione che ogni volata sceglieva celle di memoria diverse ma proprio non me la ricordo mi spiace...
ma perchè ti interessa che siano randomizzati?
ma perchè ti interessa che siano randomizzati?
random non è la funzione standard per la generazione di numeri casuali. Credo che la funzione che hai deciso di utilizzare sia solo disponibile per i compilatori Borland (ma potrei sbagliarmi comunque). Chi ti ha insegnato che devi usare quella?
Il metodo standard è il seguente:
Il metodo standard è il seguente:
// inizializzare il generatore con un numero intero (seed). // Spesso si usano le funzioni time() o clock() per ottenere un numero casuale da usare. srand(seed); // ... // generare un numero casuale. rand() genera un numero tra 0 e RAND_MAX e in questo // esempio ho usato l'operatore % per ottenere un numero da 0 a 19 inclusi. Ci sono metodi // per ottenere distribuzioni più uniformi dei numeri ma direi che per la tua applicazione // questo metodo può andare. vet1[i] = rand()%20 + 1;
è da un anno che non faccio C ma mi è stato kiesto di fare un programmino dove al suo interno necessita una funzione con un vettore di n numeri interi randomici...ma ho sentito dire che per fare come faccio io...c'è bisogno di una randomize() ma nn ricordo proprio come si utilizza....
Non conosco la particolare funzione che vuoi utilizzare (come ti ho detto non è portabile perché disponibile solo su alcuni particolare compilatori), ma puoi sempre usare le funzioni srand e rand dello standard C (e C++). Per farlo è sufficiente scrivere:
Gli std:: puoi ometterli se aggiungi "using namespace std;" all'inizio o includi gli header usando il metodo tipico del C con l'estensione .h
#include <cstdlib> #include <ctime> // ... // da qualche parte nel codice prima di chiamare la funzione carica // uso clock() ma anche time(NULL) può andare bene std::srand((unsigned) std::clock()); // ... void carica(int vet[]) { for (int i = 0; i < 20; ++i) { vet[i] = std::rand()%20 + 1; } }
Gli std:: puoi ometterli se aggiungi "using namespace std;" all'inizio o includi gli header usando il metodo tipico del C con l'estensione .h
ok ora provo e vi faccio sapere grazie a tutti....ciao a presto