Array di interi unici non ordinati con la funzione random

di il
5 risposte

Array di interi unici non ordinati con la funzione random

Ciao!
Devo scrivere una funzione che dato in input un numero intero N mi generi un array di N elementi random che non si ripetano ma purtroppo non so come fare. Potete aiutarmi?

5 Risposte

  • Re: Array di interi unici non ordinati con la funzione random

    Ciao e benvenuto sul forum,
    per evitare di fornire del codice già pronto (spesso assolutamente inutile, dato che CTRL-C + CTRL-V non è da considerarsi un'abilità... ) il regolamento richiede che vengano postati i propri tentativi/idee insieme alle richieste di aiuto.

    Tu cosa faresti? Metti giù qualche idea o riga di codice (meglio) e poi vediamo di completare insieme.

  • Re: Array di interi unici non ordinati con la funzione random

    Hazel Grace ha scritto:


    Ciao!
    Devo scrivere una funzione che dato in input un numero intero N mi generi un array di N elementi random che non si ripetano ma purtroppo non so come fare. Potete aiutarmi?
    Se cerchi con Google C++ random, scoprirai che la libreria standard del C++ prevede una funzione che genera numeri pseudorandom. Dovrai ingegnarti a far si che la funzione generi numeri compresi tra 0 e N (banale). Questo e' il primo pezzo dela tua funzione.

    Il secondo, e' quello di assicurarti che il numero random generato dalla funzione di cui sopra, non sia gia' stato generato (il fatto che sia random, non vuol dire che genera un numero una sola volta )

    E questo lo si puo' fare in diversi modi.
    Uno potrebbe essere quello di usare i bit come flag generato|non generato.

    Praticamente esercizio risolto
  • Re: Array di interi unici non ordinati con la funzione random

    migliorabile ha scritto:


    Se cerchi con Google C++ random, scoprirai che la libreria standard del C++ prevede una funzione che genera numeri pseudorandom.
    Ma sarà in C++ o in C?
    In ogni caso se si tratta di C c'è la funzione rand() che si inizializza con la srand.
  • Re: Array di interi unici non ordinati con la funzione random

    Il programma e da scrivere in C++
    La mia idea era di far inserire prima nel vettore tutti i numeri random e poi farli controllare in un do...while che incrementa una variabile contatore tutte le volte che trova due numeri uguali. Il ciclo terminerebbe solo quando la variabile contatore è uguale a zero. Vi scrivo il codice per capire meglio. Scusate l'indentazione ma non riesco a farla dal tablet
    
    for(i=0; i<dim; i++)
    {
    srand(time(0));
    random[i]=(rand()%dim)+1;         
    }
    do
    {
    Conta=0;
    for(i=0; i<dim; i++)
    {
    for(j=1; j<dim; j++);
    {
    if(random[i]==random[j])
    {
    random[i]=(rand()%dim)+1;
    Conta= conta+1;
    }
    }
    }
    }while(conta==1);
    
  • Re: Array di interi unici non ordinati con la funzione random

    Così sprechi moltissime risorse.

    Ti consiglio di dichiarare un vettore di bool di "dim" elementi, con ogni elemento = false

    Poi, per ogni numero casuale da generare :

    do{
    genera un numero n casuale
    } while ( l'elemento nella posizione n del vettore di bool == true )

    elemento nella posizione n del vettore di bool = true
    numero casuale[posizione] = n

    vai al prossimo numero da generare ( ricomincia il ciclo principale )



    Inoltre srand() deve essere chiamato fuori dal ciclo più esterno, all'inizio del programma
Devi accedere o registrarti per scrivere nel forum
5 risposte