[C++] Funzione su array

pane92
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 :

void carica(int vet1[]){
int i;
for(i=0;i<N;i++){
    vet1[i]=random(19)+1;
    }
}

Risposte
dzcosimo
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?

apatriarca
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:
// 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; 

pane92
è 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....

apatriarca
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:

#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

pane92
ok ora provo e vi faccio sapere grazie a tutti....ciao a presto

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.