Generare array

di il
8 risposte

Generare array

Esiste un modo di generare un array di numeri da 0 a 7 utilizzando la funzione rand ma evitando ripetizioni dei numeri già generati?

8 Risposte

  • Re: Generare array

    Il modo è semplice, non ci hai pensato?

    E quanto dovrebbe essere grande questo array?
  • Re: Generare array

    oregon ha scritto:


    Il modo è semplice, non ci hai pensato?

    E quanto dovrebbe essere grande questo array?
    8 posizioni quindi i numeri da 0 a 7 non saprei che condizione devo mettere per non farli ripetere
  • Re: Generare array

    velen96 ha scritto:


    8 posizioni quindi i numeri da 0 a 7 non saprei che condizione devo mettere per non farli ripetere
    Prepari un array ordinato con i numeri da 0 a 7, e poi li prelevi scegliendo la posizione (indice) in modo random. Quando hai scelto un elemento, sposti l'ultimo a ricoprirne la posizione ed estrai un nuovo indice casuale, diminuendo di un'unità l'ampiezza dell'intervallo.
  • Re: Generare array

    O semplicemente, prepari l'array con valori da 0 a 7 e poi li mescoli
  • Re: Generare array

    oregon ha scritto:


    O semplicemente, prepari l'array con valori da 0 a 7 e poi li mescoli
    Sì forse così è ancora più semplice. Nel caso velen96 non abbia chiaro come "mescolare" gli elementi, è sufficiente eseguire N volte uno scambio tra due elementi dell'array, sorteggiando i due indici che indicano le posizioni degli elementi da scambiare.
  • Re: Generare array

    Io avevo pensato di mettere un controllo che mi vede ogni volta il contenuto del vettore per vedere se il numero è già presente e continua a fare il rand finchè non mette uno non presente nell'array
  • Re: Generare array

    Vedi tu... Scegli un algoritmo e scrivi il codice...
  • Re: Generare array

    velen96 ha scritto:


    Io avevo pensato di mettere un controllo che mi vede ogni volta il contenuto del vettore per vedere se il numero è già presente e continua a fare il rand finchè non mette uno non presente nell'array
    In pratica può funzionare, ma in teoria potrebbe andare in loop infinito! Infatti, la probabilità che venga sempre estratto lo stesso numero è molto bassa (e cala all'aumentare delle ripetizioni) ma non è nulla. Quindi non puoi escludere che il programma non riesca a terminare.
    Al contrario, gli algoritmi che ti abbiamo proposto io e oregon non possono andare in loop infinito: si sa perfettamente che termineranno e si sa anche dopo quante iterazioni lo faranno.

    P.S. Siamo d'accordo sul fatto che anche il tuo algoritmo terminerebbe prima o poi, ma da un punto di vista puramente teorico, credo che non si possa escludere nulla.
Devi accedere o registrarti per scrivere nel forum
8 risposte