Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Numeri casuali tutti diversi

    salve
    io ho un problema nel creare questa funzione cioé
    generare n numeri casuali xò essi devono essere tutti diversi.

    io ho fatto questa soluzione, ma da un errore di sovrascrizione nel vettore...roba strana.
    ah ne avevo fatto un' altro ma con l'aumentare dei numeri richiesti aumentava enormemente il tempo di generazione...

    ecco il sorgente:

    bool set_casuale_non_ripetute(int *vett, int num)
    {

    // cout<<"\nentro\n";
    casuale(vett,num); // inserisco all'interno del vettore numeri casuali.
    BubbleSort(vett,num); // li ordino, cosi se il numero successivo è uguale al precedente vuol
    // dire ke è doppione
    randomize();

    for(int i=0; i<num; i++) // prendo un cella del vettore
    {
    for(int j=0; j<num; j++) // scorro tutto il vettore
    {
    if(i==j){} // salto le posizioni uguali
    else
    {
    if( vett[i]==vett[j]) // se uguali
    {

    set_casuale_non_ripetute(vett,num); // richiamo la funzione.

    }

    }
    }

    }
    return 0;

    }

    poi nel main c'è un while..x farlo ripetere finchè non sn tutti diversi...
    voi avete una soluzione da darmi..
    xfavore???
    grazie mille per aver letto questo post!!!!

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288

    Moderazione

    Il linguaggio è C++? Hai letto il Regolamento?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Ecco un esempio in "C", facilmente utilizzabile anche in C++ (modificando innanzitutto gli include).

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    typedef struct
    {
        int *values;
        int  size;
    } UNIQUE_RANDOM;
    
    int rand_int (int min, int max)
    {
        double d;
    
        d = rand () / (RAND_MAX+1.0);
        return ((int) (d * (max-min+1))) + min;
    }
    
    int UniqueRandom_Init (UNIQUE_RANDOM *ur, int min, int max)
    {
        int  size, i;
        int *values;
    
        if (min > max)
            return 0;
    
        size = max - min + 1;
    
        values = (int*) malloc (size * sizeof (int));
    
        if (values == NULL)
            return 0;
    
        for (i = 0; i < size; i++)
            values[i] = min + i;
    
        ur->values = values;
        ur->size = size;
    
        return 1;
    }
    
    int UniqueRandom_Extract (UNIQUE_RANDOM *ur, int *value_out)
    {
        int idx;
    
        if (ur == NULL || value_out == NULL || ur->size == 0)
            return 0;
    
        idx = rand_int (0, --ur->size);
        *value_out = ur->values[idx];
        ur->values[idx] = ur->values[ur->size];
    
        return 1;
    }
    
    void UniqueRandom_Free (UNIQUE_RANDOM *ur)
    {
        if (ur != NULL && ur->values)
            free (ur->values);
    }
    
    
    /*-- Main di prova --*/
    int main (void)
    {
        UNIQUE_RANDOM ur;
        int num;
    
        srand ((unsigned int) time (NULL));
    
        if (UniqueRandom_Init (&ur, -10, 10))
        {
            while (UniqueRandom_Extract (&ur, &num))
                printf ("%d ", num);
    
            printf ("\n");
            UniqueRandom_Free (&ur);
        }
    
        return 0;
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.