Generare array

di Anonimizzato18311 il
8 risposte
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

  • Il modo è semplice, non ci hai pensato?

    E quanto dovrebbe essere grande questo 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
  • 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.
  • O semplicemente, prepari l'array con valori da 0 a 7 e poi li mescoli
  • 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.
  • 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
  • Vedi tu... Scegli un algoritmo e scrivi il codice...
  • 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