Problème fonction pour générer un tableau 2D aléatoire en C

enroe Messages postés 3 Date d'inscription mardi 22 décembre 2009 Statut Membre Dernière intervention 23 décembre 2009 - 22 déc. 2009 à 15:27
biriatou Messages postés 3 Date d'inscription vendredi 11 novembre 2005 Statut Membre Dernière intervention 28 décembre 2009 - 25 déc. 2009 à 11:03
Salut à tous :)j'espère que quelqu'un pourra m'aider :(. parce que la je suis sur un projet de C (pour demain lol...)et j'ai une fonction qui me donne quelque chose que je comprend pas trop :(. donc alors la fonction prend en entrée un tableau 2D(int**) (avec de la mémoire alloué au préalable avant) et un nombre de joueur n. A la base le tableau est remplit de 0. Le but de la fonction est de remplir le tableau avec un minimum de 1 égal à(n*4).. (il faut au moin n*4 case contenant un 1).
Le reste des cases dois être remplit avec soit un 0 soit un 1 (c'est aléatoire).
donc ma fonction fonctionne normalement quand je l'utilise une fois. sauf que le problème c'est que je dois l'utiliser pour 2 tableau différent à l'affilé. et cela me donne 2 fois le même tableau :(. Je voudrais savoir si quelqu'un a une idée sur la raison de ce problème....^^.

Voila la fonction :
void ConfigAleatoire (int **plateau,int n) //créer aleatoirement des trous (1)
{
        int i,ligne,colonne,j;

srand(time(NULL));
for (i=0; i<(n*4); i++)
{
ligne= (rand() % TAILLE) ;
colonne=(rand() % TAILLE) ;
if (plateau[ligne][colonne]==1)
{
i--;
}
else 
                {
        plateau [ligne][colonne] =1;
}
}
for(i=0; i<TAILLE; i++)
{
for(j=0; j<TAILLE; j++)
{
       if (plateau[i][j]==0)plateau[i][j]= (rand() % 2) ; 
}
}
}



Merci d'avance à tous !

5 réponses

tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
22 déc. 2009 à 17:04
Bonjour,

Met l'appel à srand() en dehors de ta fonction, par exemple au début du main().

2 appels consécutifs à srand() avec la même valeur produisent les mêmes séries de valeurs aléatoires.
S'il y a moins d'une seconde entre les 2 appels à ta fonction ....


thip
0
enroe Messages postés 3 Date d'inscription mardi 22 décembre 2009 Statut Membre Dernière intervention 23 décembre 2009
22 déc. 2009 à 17:13
salut thip, merci pour ta réponse. Je met le srand(time(NULL)); dans le main ca d'accord. mais ca changera en aucun cas la série de chiffre non ? sachant que entre les 2 tirages il y a moin de 2 secondes. Il faudrais que je fasse un wait/sleep ou quelque chose du genre ?
0
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
23 déc. 2009 à 07:58
Non, c'est à chaque appel à srand() que tu réinitialise la série. Donc, tu mets srand() dans main(), la série est initialisée, tu appelles ta fonction une première fois, et, à la deuxième, rand() continue la série sans la reprendre au début. Si srand() est dans la fonction, la série est réinitialisée avec time(), qui n'a certainement pas changé depuis l'appel précédent; Donc la même série.


thip
0
enroe Messages postés 3 Date d'inscription mardi 22 décembre 2009 Statut Membre Dernière intervention 23 décembre 2009
23 déc. 2009 à 11:28
ahh :) merci thip tu gère :P.

bye
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
biriatou Messages postés 3 Date d'inscription vendredi 11 novembre 2005 Statut Membre Dernière intervention 28 décembre 2009
25 déc. 2009 à 11:03
Salut Enroe
Est ce que tu es vraiment oblige de cree un tableau en 2 dimensions.Tu peux faire la même chose avec un tableau a une dimension.C'est plus simple et pour les passages de parametres de fonction ca ne pose pas de probleme.
0
Rejoignez-nous