[c++] numeri casuali in un ciclo for

Oo.Stud.ssa.oO
Ciao a tutti, volevo fare un programma che ha un'array contenente 3 liste, che inserisca in ordine 10 elementi casuali scegliendo casualmente tra una delle 3 liste! Il mi problema è che i numeri casuali sono sempre uguali! Come posso rimediare?
STRUTTURE DATI:
typedef struct TipoDato{
        int x;
};

struct El{
        TipoDato info;
        struct El *next;
};

typedef struct El ElemLista;
typedef ElemLista *ListaDiElem;


FUNZIONE RANDOM:
int random_n(int min,int max){
    int x;
    srand(time(NULL));
    x=rand()%(max-min+1)+min;
}

FUNZIONE INSERIMENTO:
void InsertInOrder(ListaDiElem *lista, int value){
     ElemLista *punt,*puntcorrente,*puntprecedente;
     puntcorrente = *lista;
     puntprecedente= NULL;
     while(puntcorrente!=NULL && value>puntcorrente->info.x){
                               puntprecedente=puntcorrente;
                               puntcorrente = puntcorrente->next;
                               }
       punt = (ElemLista *)malloc(sizeof(ElemLista));
       punt->info.x=value;
       punt->next = puntcorrente;
       if(puntprecedente!=NULL){   
                                   puntprecedente->next = punt;
                                   }else{
                                         *lista=punt;}   
     
     }

FUNZIONE STAMPA:
void Stampa(ListaDiElem lista){
     ListaDiElem punt;
     punt=lista;
     if(punt==NULL){
                    cout<<"la lista e' vuota"<<endl;
                    }else{
                    while(punt!=NULL){
                       cout<<punt->info.x<<"-";
                       punt=punt->next;}
     }
     
}



NEL MAIN:
 ListaDiElem lista0,lista1,lista2;
    ElemLista *array[NLISTE];
    int i,x,y;
   
    lista0 = Create_lista();
    lista1 = Create_lista();
    lista2 = Create_lista();
    array[0]=lista0;
    array[1]=lista1;
    array[2]=lista2;
    for(i=0;i<10;i++){
                          srand(time(0));
                          x=random_n(0,100);
                          y=random_n(0,2);
                          cout<<"elemento "<<x<<"verra' inserito nella lista"<<y<<endl;
                          if(y==0){
                                 InsertInOrder(&lista0,x);
                                 }else{
                                    if(y==1){
                                    InsertInOrder(&lista1,x);
                                    }else{
                                        if(y==2){
                                        InsertInOrder(&lista2,x);}}}
                                          
}
    cout<<"lista0:"<<endl;
    Stampa(lista0);
    cout<<"lista1:"<<endl;
    Stampa(lista1);
    cout<<"lista2:"<<endl;
    Stampa(lista2);


In pratica lui mi trova 10 volte lo stesso numero e tutte le volte lo inserisce nella stessa lista scelta a caso..
Io voglio 10 numeri diversi ogni volta inseriti in una lista diversa..

E un'altra domanda: l'array non lo sto usando non è vero?

Risposte
apatriarca
srand va chiamato una sola volta all'inizio del main e basta.. Inizializza il generatore di numeri pseudocasuali e siccome il valore restituito da time cambia una volta al secondo il generatore di numeri pseudocasuali viene inizializzato in continuazione con lo stesso valore. E quindi il primo valore restituito da rand sarà sempre lo stesso..

Oo.Stud.ssa.oO
Quindi non va bene metterlo nella funzione di random?

apatriarca
No, non va bene.. e il motivo mi sembra evidente.

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