RAND : éviter de sortir un nombre déjà sorti... prob !
did2604
Messages postés29Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention19 août 2008
-
8 déc. 2003 à 20:30
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 2004
-
8 déc. 2003 à 21:38
Bonsoir,
J'ai un problème assez spécial à vous exposer. Je me casse la tête dessus depuis 2h et pas moyen de trouver le bug. Voilà, j'utilise donc la fonction rand qui me permet de générer des nombres aléatoires (dans ce cas ci un vecteur de lettre A à F). Pour qu'une lettre ne soit pas présente 2 fois dans mon vecteur, je fais une série de while, je compte évidemment optimiser ça par la suite, mais c'est pour avoir une base. Hors, je me rends compte que des fois, ça pose problème... Le code :
____________________________________________________
char v[6]={'A','B','C','D','E','F'};
char i;
system ("CLS");
srand ((unsigned)time(NULL));
for (i=0;i<4;i++)
{
v[i]=v[rand() % 6];
}
while ((v[0]==v[1])||(v[0]==v[2])||(v[0]==v[3]))
{
printf ("%c%c%c%c",v[0],v[1],v[2],v[3]);
printf ("\ndebut boucle 0");
v[0]=v[rand()%6];
printf ("\nfin boucle 0");
}
while ((v[0]==v[1])||(v[2]==v[1])||(v[3]==v[1]))
{
printf ("%c%c%c%c",v[0],v[1],v[2],v[3]);
printf ("\ndebut boucle 1");
v[1]=v[rand()%6];
printf ("\nfin boucle 1");
}
while ((v[2]==v[0])||(v[2]==v[1])||(v[2]==v[3]))
{
printf ("%c%c%c%c",v[0],v[1],v[2],v[3]);
printf ("\ndebut boucle 2");
v[2]=v[rand()%6];
printf ("\nfin boucle 2");
}
while ((v[3]==v[0])||(v[3]==v[1])||(v[3]==v[2]))
{
printf ("%c%c%c%c",v[0],v[1],v[2],v[3]);
printf ("\ndebut boucle 3");
v[3]=v[rand()%6];
printf ("\nfin boucle 3");
}
printf ("%c%c%c%c",v[0],v[1],v[2],v[3]);
____________________________________________________
Exemple de problème : Il boucle sans fin sur "boucle1" avec les lettres AFEF ou sur la "boucle2" avec les lettres FEED ou sur la boucle 3 avec les lettres BEFF... vu le nombre de fois où il ressort un nombre aléatoire quand il entre dans sa boucle, il ne va quand-même pas trouver 500 fois le même !!! :sad)
Merci de m'aider...
A voir également:
RAND : éviter de sortir un nombre déjà sorti... prob !
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 8 déc. 2003 à 20:56
tu veut prendre au hasard 4 lettre differentes dans v?
parce que si c'est ca, c'est bizar la facon dont tu t'y prend(ta deja fait de l'algo avec les tableau?)
did2604
Messages postés29Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention19 août 2008 8 déc. 2003 à 21:10
Mon problème est le suivant, j'ai le code suivant mais je veux empêcher une lettre de se reproduire deux fois de suite :
___________________________________________
char v[6]={'A','B','C','D','E','F'};
char i
srand ((unsigned)time(NULL));
for (i=0;i<4;i++)
{
v[i]=v[rand() % 6];
}
___________________________________________
Merci de m'aider Brunews, mais je ne demande pas que l'on me donne un code tout fait, je veux comprendre et y arriver par moi-même. Je ne te demande pas de ton temps s'il est précieux. :shock)
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 8 déc. 2003 à 21:32
ohe djl, je me permets un petite remarque. Pas important ici car petite quantite mais ton algo perd des cycles pour rien, faut sortir de la boucle quand egalite trouvee.
BruNews, ciao...