Rand

fille gl -  
overcode Messages postés 128 Statut Membre -
Bonjour,

j'ai fait un boucle dans lequel je veux remplir deux matrices aléatoirement; j'ai remarqué que malgrè que j'ai utiliser srand, que la boucle tourne les memes valeurs seront attribués!
voilà la partie du programme:
public:void saisie(int n)
{
int i,j;

for(i=0;i<n;i++)
{
float t=0;
srand(time(NULL));
for(j=0;j<n;j++)
{
t=rand();
delete &t;// initialisation de rand
M1[i][j]=rand();
// initialisation de rand
M2[i][j]=rand();
}
}
}

1 réponse

overcode Messages postés 128 Statut Membre 27
 
Bonsoir,

C'est atroce ce que je vois dans ce code ... très probablement du C++, mais mentionné nul part :S

Bon, rand() n'est pas très pratique, et son comportement n'est que vaguement défini. rand() doit retourner à chaque appel un nombre aléatoire entre 0 et RAND_MAX, cette dernière constante étant définie dans stdlib.h. Elle vaut généralement 32767.

Voilà une proposition :

Si les matrices sont supposées contenir des entiers (entre 0 et 99) :

public :
void saisie(int n)
{
    srand(time(NULL)) ;

    for(int i = 0 ; i < n ; i++ )
    { 
        for(int j = 0 ; j < n ; j++ )
        {
            M1[i][j] = rand() % 100 ;
            M2[i][j] = rand() % 100 ;
        } 
    }
}


Si les matrices sont supposées contenir des réels (compris entre -10 et 10)

public :
void saisie(int n)
{
    srand(time(NULL)) ;

    for(int i = 0 ; i < n ; i++ )
    { 
        for(int j = 0 ; j < n ; j++ )
        {
            M1[i][j] = float((rand() % 2001) - 1000) / 100 ;
            M2[i][j] = float((rand() % 2001) - 1000) / 100 ;
        } 
    }
}


PS : je vois pas l'utilité de passer la taille n à la méthode saisie, tu peux la mettre en tant que membre tout comme M1 et M2. Enfin je dis ça comme ça ...
0