TOUR DE MAGIE

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 24 déc. 2009 à 12:20
Braiman Messages postés 4 Date d'inscription mardi 1 juillet 2003 Statut Membre Dernière intervention 22 décembre 2007 - 24 déc. 2009 à 15:20
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/51013-tour-de-magie

Braiman Messages postés 4 Date d'inscription mardi 1 juillet 2003 Statut Membre Dernière intervention 22 décembre 2007
24 déc. 2009 à 15:20
Voila ce que ça donne :

static char* CarteType[] = {"Carreau", "Coeur", "Pique", "Trefle"};
static char* CarteVal[] = {"As", "Deux", "Trois", "Quatre", "Cinq", "Six", "Sept", "Huit", "Neuf", "Dix", "Valet", "Dame", "Roi"};


int nb = 27; // Nombre saisi

nb -= 26;
int type = nb % 10;
int valeur = (nb - type) / 10;

if (type >= 0 && type < (sizeof(CarteType) / sizeof(char*)) && valeur >= 0 && valeur < (sizeof(CarteVal) / sizeof(char*)))
printf("***Votre carte est %s de %s***!\n", CarteVal[valeur], CarteType[type]);
else
printf("Désolez votre nombre ne correspond à aucune carte !\n");


(sizeof(CarteType) / sizeof(char*)) = nombre d'élément dans CarteType
Braiman Messages postés 4 Date d'inscription mardi 1 juillet 2003 Statut Membre Dernière intervention 22 décembre 2007
24 déc. 2009 à 14:43
On peu faire deux tableaux associatifs.
Le premier contiendrait carreau, coeur, ...
Le deuxième contiendrait As, Deux, Troix, ...

On aurait plus qu'à faire résultat = résultat - 26
Le modulo 10 donnerait directement l'index du premier tableau (si compris entre 0 et 3)
[(résultat - résultat modulo 10) / 10] donnerait directement l'index du deuxième tableau (si compris entre 0 et 12)
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
24 déc. 2009 à 12:20
La source section source est là pour poster des codes techniquement intéressant ou pédagogique. Elle n'est pas là pour accueillir le premier programme des débutants, fier de montrer qu'ils savent à peu près bidouiller.
Si tu veux montrer ton code, c'est plutôt sur le forum qu'il faut aller. Tu mets en sujet: "Critiquer mon code".

Le code est pas terrible, il y a énormément de redondance. C'est peu intéressant techniquement puisque c'est uniquement une suite de if.

Il aurait été plus judicieux de réaliser un tableau associatif.

typedef struct
{
int num;
char* nom;
} carte;

static const carte[] =
{
{26, "As de carreau"},
etc...
{149, "Roi de trèfle"},
0
};

nb = nombre entré par l'utilisateur
int i = 0;
while (carte[i] && carte[i] != nb)
++i;
if (!carte[i])
printf("Désolez votre nombre ne correspond à aucune carte !\n");
else
printf("***Votre carte est %s***!\n", carte[i]);
Rejoignez-nous