CCJ
Messages postés565Date d'inscriptionmercredi 19 mai 2004StatutMembreDernière intervention30 avril 2008
-
12 sept. 2005 à 20:24
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 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 :
CCJ
Messages postés565Date d'inscriptionmercredi 19 mai 2004StatutMembreDernière intervention30 avril 20081 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();
}
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 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...
Vous n’avez pas trouvé la réponse que vous recherchez ?
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 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]);
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 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...
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 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...