Boucle qui foire??

Résolu
CCJ Messages postés 565 Date d'inscription mercredi 19 mai 2004 Statut Membre Dernière intervention 30 avril 2008 - 12 sept. 2005 à 20:24
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 - 15 sept. 2005 à 09:55
bonjour.

jai fais ce petit bout de code vite fais mé apres une journé tres
lourde 8h 18h bah jarrive pu a trouver de solutions .Le bleme : mon
code devrai normalement afficher des codes en boucle mais quelque chose
fais foiré tt ca , le code :

#include <cstdio>

#include <cstdlib>

#include <windows.h>

#include

#include <time.h>

char l [27];

int inc[7];

int ni[7];

char nc[7];

bool end=false,chiffre[7];



void change(int num)

{

switch(inc[num])

{

case 0 :ni[num]=0;chiffre[num]=true; break;

case 1 :ni[num]=1;chiffre[num]=true; break;

case 2 :ni[num]=2;chiffre[num]=true; break;

case 3 :ni[num]=3;chiffre[num]=true; break;

case 4 :ni[num]=4;chiffre[num]=true; break;

case 5 :ni[num]=5;chiffre[num]=true; break;

case 6 :ni[num]=6;chiffre[num]=true; break;

case 7 :ni[num]=7;chiffre[num]=true; break;

case 8 :ni[num]=8;chiffre[num]=true; break;

case 9 :ni[num]=9;chiffre[num]=true; break;

case 10 :nc[num]='a';chiffre[num]=false; break;

case 11 :nc[num]='b';chiffre[num]=false;break;

case 12 :nc[num]='c';chiffre[num]=false;break;

case 13 :nc[num]='d';chiffre[num]=false;break;

case 14 :nc[num]='e';chiffre[num]=false;break;

case 15 :nc[num]='f';chiffre[num]=false;break;

case 16 :nc[num]='g';chiffre[num]=false;break;

case 17 :nc[num]='h';chiffre[num]=false;break;

case 18 :nc[num]='i';chiffre[num]=false;break;

case 19 :nc[num]='j';chiffre[num]=false;break;

case 20 :nc[num]='k';chiffre[num]=false;break;

case 21 :nc[num]='l';chiffre[num]=false;break;

case 22 :nc[num]='m';chiffre[num]=false;break;

case 23 :nc[num]='n';chiffre[num]=false;break;

case 24 :nc[num]='o';chiffre[num]=false;break;

case 25 :nc[num]='p';chiffre[num]=false;break;

case 26 :nc[num]='q';chiffre[num]=false;break;

case 27 :nc[num]='r';chiffre[num]=false;break;

case 28 :nc[num]='s';chiffre[num]=false;break;

case 29 :nc[num]='t';chiffre[num]=false;break;

case 30 :nc[num]='u';chiffre[num]=false;break;

case 31 :nc[num]='v';chiffre[num]=false;break;

case 32 :nc[num]='w';chiffre[num]=false;break;

case 33 :nc[num]='x';chiffre[num]=false;break;

case 34 :nc[num]='y';chiffre[num]=false;break;

case 35 :

nc[num]='z';

inc[num]=-1;

chiffre[num]=false;

if (num < 6)

{

change(num+1);

}

if(num=6)

{

end=true;

}

break;

}

inc[num]++;

}



void increment_2()

{

change(2);

}

void increment_3()

{

change(3);

}

void increment_4()

{

change(4);

}

void increment_5()

{

change(5);

}

void increment_6()

{

change(6);

}

void pass()

{

if (chiffre[1]==true)

{

printf("%d",ni[1]);

}else

{

printf("%c",nc[1]);

}

if (chiffre[2]==true)

{

printf("%d",ni[2]);

}else

{

printf("%c",nc[2]);

}

if (chiffre[3]==true)

{

printf("%d",ni[3]);

}else

{

printf("%c",nc[3]);

}

if (chiffre[4]==true)

{

printf("%d",ni[4]);

}else

{

printf("%c",nc[4]);

}

if (chiffre[5]==true)

{

printf("%d",ni[5]);

}else

{

printf("%c",nc[5]);

}

if (chiffre[6]==true)

{

printf("%d",ni[6]);

}else

{

printf("%c",nc[6]);

}

printf("%d %d %d %d %d %d \n",inc[1],inc[2],inc[3],inc[4],inc[5],inc[6]);

}



int main()

{

inc[1]=0;

inc[2]=0;

inc[3]=0;

inc[4]=0;

inc[5]=0;

inc[6]=0;

ni[1]=0;

ni[2]=0;

ni[3]=0;

ni[4]=0;

ni[5]=0;

ni[6]=0;

nc[1]=0;

nc[2]=0;

nc[3]=0;

nc[4]=0;

nc[5]=0;

nc[6]=0;

for(1;1;1)

{

if(end==true)

{

break;

}

change(1);

pass();

}

system("PAUSE");

}

j'admet que c long alors merci a ceux qui aurait rien que le courage d'avoir lu la source

merci d'avance

Si l'informatique été de l'alcool il y aurait des genies partout

13 réponses

CCJ Messages postés 565 Date d'inscription mercredi 19 mai 2004 Statut Membre Dernière intervention 30 avril 2008 1
14 sept. 2005 à 18:15
bingo g trouvé !!!
#include <cstdio>
#include <cstdlib>
#include <windows.h>
#include
#include <time.h>
int inc[7];//incrementation
int ni[7];
char nc[7];
bool end=false,chiffre[7];

void pass()
{
if (chiffre[1]==true)
{
printf("%d",ni[1]);
}else
{
printf("%c",nc[1]);
}
if (chiffre[2]==true)
{
printf("%d",ni[2]);
}else
{
printf("%c",nc[2]);
}
if (chiffre[3]==true)
{
printf("%d",ni[3]);
}else
{
printf("%c",nc[3]);
}
if (chiffre[4]==true)
{
printf("%d",ni[4]);
}else
{
printf("%c",nc[4]);
}
if (chiffre[5]==true)
{
printf("%d",ni[5]);
}else
{
printf("%c",nc[5]);
}
if (chiffre[6]==true)
{
printf("%d",ni[6]);
}else
{
printf("%c",nc[6]);
}
printf("%d %d %d %d %d %d \n",inc[1],inc[2],inc[3],inc[4],inc[5],inc[6]);
}

void change(int num)
{
inc[num]=inc[num]+1;
switch(inc[num])
{
case 0 :ni[num]=0;chiffre[num]=true; break;
case 1 :ni[num]=1;chiffre[num]=true; break;
case 2 :ni[num]=2;chiffre[num]=true; break;
case 3 :ni[num]=3;chiffre[num]=true; break;
case 4 :ni[num]=4;chiffre[num]=true; break;
case 5 :ni[num]=5;chiffre[num]=true; break;
case 6 :ni[num]=6;chiffre[num]=true; break;
case 7 :ni[num]=7;chiffre[num]=true; break;
case 8 :ni[num]=8;chiffre[num]=true; break;
case 9 :ni[num]=9;chiffre[num]=true; break;
case 10 :nc[num]='a';chiffre[num]=false; break;
case 11 :nc[num]='b';chiffre[num]=false;break;
case 12 :nc[num]='c';chiffre[num]=false;break;
case 13 :nc[num]='d';chiffre[num]=false;break;
case 14 :nc[num]='e';chiffre[num]=false;break;
case 15 :nc[num]='f';chiffre[num]=false;break;
case 16 :nc[num]='g';chiffre[num]=false;break;
case 17 :nc[num]='h';chiffre[num]=false;break;
case 18 :nc[num]='i';chiffre[num]=false;break;
case 19 :nc[num]='j';chiffre[num]=false;break;
case 20 :nc[num]='k';chiffre[num]=false;break;
case 21 :nc[num]='l';chiffre[num]=false;break;
case 22 :nc[num]='m';chiffre[num]=false;break;
case 23 :nc[num]='n';chiffre[num]=false;break;
case 24 :nc[num]='o';chiffre[num]=false;break;
case 25 :nc[num]='p';chiffre[num]=false;break;
case 26 :nc[num]='q';chiffre[num]=false;break;
case 27 :nc[num]='r';chiffre[num]=false;break;
case 28 :nc[num]='s';chiffre[num]=false;break;
case 29 :nc[num]='t';chiffre[num]=false;break;
case 30 :nc[num]='u';chiffre[num]=false;break;
case 31 :nc[num]='v';chiffre[num]=false;break;
case 32 :nc[num]='w';chiffre[num]=false;break;
case 33 :nc[num]='x';chiffre[num]=false;break;
case 34 :nc[num]='y';chiffre[num]=false;break;
case 35 :
nc[num]='z';
chiffre[num]=false;
break;
}
pass();
}


int main()
{
inc[1]=0;
inc[2]=0;
inc[3]=0;
inc[4]=0;
inc[5]=0;
inc[6]=0;
ni[1]=0;
ni[2]=0;
ni[3]=0;
ni[4]=0;
ni[5]=0;
ni[6]=0;
nc[1]=0;
nc[2]=0;
nc[3]=0;
nc[4]=0;
nc[5]=0;
nc[6]=0;
while(!end)
{
change(1);
if(inc[1]==35)
{
inc[1]=0;
change(2);
}
if(inc[2]==35)
{
inc[2]=0;
change(3);
}
if(inc[3]==35)
{
inc[3]=0;
change(4);
}
if(inc[4]==35)
{
inc[4]=0;
change(5);
}
if(inc[5]==35)
{
inc[5]=0;
change(6);
}
if(inc[6]==35)
{
end=true;
}
}
system("PAUSE");
}
3
Sizlaa Messages postés 58 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 20 septembre 2005
12 sept. 2005 à 22:01
Ceci n'est pas une boucle,

Une boucle est repérée par un Whils, un Goto, ou alors un for(*;*;*);

DOnc ton code ne pourra archer en boucle,

Tu peux largement améliorer grace a un while ou un for ;)

Donc bonne chance!

++

Comme on dit a Varsovie:"Boire ou Conduire de toutes façon on a pas de voiture"
0
CCJ Messages postés 565 Date d'inscription mercredi 19 mai 2004 Statut Membre Dernière intervention 30 avril 2008 1
12 sept. 2005 à 22:26
euh ba si il y a une boucle :

int main()

{

inc[1]=0;

inc[2]=0;

inc[3]=0;

inc[4]=0;

inc[5]=0;

inc[6]=0;

ni[1]=0;

ni[2]=0;

ni[3]=0;

ni[4]=0;

ni[5]=0;

ni[6]=0;

nc[1]=0;

nc[2]=0;

nc[3]=0;

nc[4]=0;

nc[5]=0;

nc[6]=0;

for(1;1;1)

{

if(end==true)

{

break;

}

change(1);

pass();

}

system("PAUSE");

}

Si l'informatique été de l'alcool il y aurait des genies partout
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
13 sept. 2005 à 09:03
A première vue, y'a un souci dans les indices de tableau: ça doit aller de 0 à N-1 (N étant la taille du tableau).
Sinon, "quelquechose fait tout foiré"... c'est-à-dire??

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0

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

Posez votre question
CCJ Messages postés 565 Date d'inscription mercredi 19 mai 2004 Statut Membre Dernière intervention 30 avril 2008 1
13 sept. 2005 à 18:57
bah la boucle ne sexecute q'une seule foi

Si l'informatique été de l'alcool il y aurait des genies partout
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
14 sept. 2005 à 09:58
Que doit faire ton code exactement? Je ne comprends pas très bien...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
CCJ Messages postés 565 Date d'inscription mercredi 19 mai 2004 Statut Membre Dernière intervention 30 avril 2008 1
14 sept. 2005 à 11:57
il devrai faire defilier des mot de cette facon :

000000

100000

200000

300000

...

a00000

b00000

...

a10000

b10000

...

aa0000

ba0000

voila

Si l'informatique été de l'alcool il y aurait des genies partout
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
14 sept. 2005 à 12:15
J'ai repris ton code, je l'ai "optimisé" et corrigé.
Est-ce que ça te convient?

#include



int inc[7]; // incréments
int ni[7]; // codes en chiffres
char nc[7]; // codes en lettres
bool end=false; // condition de fin
bool chiffre[7]; // chiffre ou lettre?



// change la valeur du digit
void change(int num)
{
if (inc[num]<10) // c'est un chiffre
{
ni[num]=inc[num];
chiffre[num]=true;
}
else // c'est une lettre
{
if (inc[num]==35)
{
// c'est la fin
inc[num]=-1;
chiffre[num]=false;


end=(num>=6);
}
else
{
// Ajout de la valeur 87 pour trouver le code ascii de la lettre ('a'=97)
nc[num]=inc[num]+87;
chiffre[num]=false;
if (num<6)
change(num+1);
}
}


inc[num]++;
}



// affichage
void pass()
{
// pour chaque digit, test si c'est un chiffre ou une lettre
// et affichage en conséquence
for (int i=0; i<7; i++)
if (chiffre[i])
printf("%d",ni[i]);
else
printf("%c",nc[i]);


printf(" %d %d %d %d %d %d %d \n",inc[0], inc[1],inc[2],inc[3],inc[4],inc[5],inc[6]);
}



int main()
{
// initialisation
inc[0]=1;
inc[0]=3;
inc[0]=5;
inc[0]=7;
inc[0]=11;
inc[0]=13;
inc[0]=17;


// "calcul" du code
while (!end)
{
change(0);
pass();
}


// fin
system("PAUSE");
return 0;
}

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
CCJ Messages postés 565 Date d'inscription mercredi 19 mai 2004 Statut Membre Dernière intervention 30 avril 2008 1
14 sept. 2005 à 12:29
euh le code est bien mais si le mien ne lest pas c parceke comme ca ca affiche pas toutes les posibilitée

merci de ton aide mais c toujour pas ca :s

Si l'informatique été de l'alcool il y aurait des genies partout
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
14 sept. 2005 à 14:05
Tu veux obtenir TOUS les codes à 7 digits compris entre 0000000 et zzzzzzz?
Dans ce cas, 2 boucles for suffisent...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
CCJ Messages postés 565 Date d'inscription mercredi 19 mai 2004 Statut Membre Dernière intervention 30 avril 2008 1
14 sept. 2005 à 16:32
ah?? pourait tu me dire comment plz?
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
14 sept. 2005 à 17:46
Testé avec 3 digits seulement, devrait marcher pour plus avec quelques modif:

#include <stdio.h>
#include <string>

int main(int argc,char ** argv)
{
char digits[4]; // tous les digits + caractère nul
int index[2]={0,0}; // numéro du digit à écrire, pas besoin d'index pour le dernier


// init du tableau de digits
strcpy(digits,"012");

// Incrémentation du dernier digit avec propagation de la "retenue"
while (1)
{
// affichage du code courant
for (int i=0; i<3; i++)
printf("%c%c%c\n",digits[index[0]],digits[index[1]],digits[i]);


// propagation de la retenue
if (++index[1]>=3)
{
index[1]=0;
if (++index[0]>=3)
{
break;
}
}
}


system("pause");
return 0;
}

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
15 sept. 2005 à 09:55
Quelques remarques concernant ton code:
- return 0 à la fin du main() serait bien
- tes codes ne font pas EXACTEMENT 6 digits
- le caractère '0' n'est pas bien géré je trouve: 'z' a aussi bien le code 0 que 35
- l'instruction switch{} n'est pas super utile
- la fonction pass() peut être "optimisée"

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
Rejoignez-nous