Programme en C

Résolu/Fermé
Yazou92 Messages postés 181 Date d'inscription jeudi 15 janvier 2009 Statut Membre Dernière intervention 30 avril 2013 - 26 mars 2009 à 13:26
BloodyAngel Messages postés 1482 Date d'inscription mardi 21 juin 2005 Statut Contributeur Dernière intervention 21 juin 2018 - 27 mars 2009 à 10:50
Bonjour,

J'ai un problème avec la programmation c. Les consigne sont d'effectuer un programme qui donne 2 chiffre aléatoire avec 2 niveau de difficultés. Pis on à aussi le choix au différentes opértations. Multiplication,addition, Soustraction et Division. Et la 5 consiste de mélanger les 4 opérations. J'ai fais mon programme, il me donne les deux nombre aléatoire mais quand j'introduit la réponse il me dit que c'est faux, et je vois pas c'est ou le probleme.

Voici le code:


#include <stdio.h>
#include <stdlib.h>
int aleatoire(int max)
{
return rand ()%max+1; // Return sert a retourner la valuer de la fonction
}

int main ()
{
srand (time(NULL));
int Nbr_difficulte;
int Multipliquation; //Introduction des variable
int Nbr1;
int Nbr2;
int reponse;
int rep_juste;
int rep_fausse;
int test; // La variable "test" permet de reproduire les operations 10x.
int resultat_juste;
int resultat_faux;
int pourcentage;
int MAX ;
int repetition;
int type;
char operateur;
int calcule;
resultat_juste = 0;
resultat_faux = 0;
rep_juste = aleatoire (4); //Définition des variables
rep_fausse = aleatoire (4);
test=0;

printf("Entre le chiffre 1 pour choisir le niveau facile\nEntre le chiffre 2 pour choisir le niveau difficile\n");
scanf ("%d",&Nbr_difficulte);
getchar ();



if (Nbr_difficulte == 1)
{
MAX = 10;
}
else
{
MAX = 100;
}


printf ("Entre le nombre de calcule que tu voudrai faire\n\n");
scanf("%d",&repetition);

printf ("Entrez 1 pour les additions\n");
printf ("Entrez 2 pour les soustractions\n");
printf ("Entrez 3 pour les multipliquations\n");
printf ("Entrez 4 pour les divisions\n");
printf ("Entrez 5 pour des calcules aleatoire\n");
scanf ("%d",&type);
do
{

test++;
Nbr1= aleatoire (MAX);
Nbr2= aleatoire (MAX);

switch (type)
{
case (1):
operateur = '+';
calcule = Nbr1+Nbr2;
break;
case(2):
operateur = '-';
if (Nbr1<=Nbr2)
{
calcule = Nbr2 - Nbr1;
}
else
{
calcule = Nbr1 - Nbr2;
}

break;
case(3):
operateur = '*';
calcule = Nbr1*Nbr2;
break;
case (4):
operateur = '/';
calcule = Nbr1/Nbr2;
break;
}

printf("combien font %d %c %d=\t",Nbr1,operateur,Nbr2);

if(scanf("%d",&reponse))
{
Multipliquation = Nbr1*Nbr2;
if (Multipliquation == reponse)
{
rep_juste = aleatoire (4);
switch (rep_juste)
{
case (1):
printf("C'est tres bien!\n\n");
break;
case (2):
printf("Exellent!\n");
break;
case (3):
printf("Tu fais du beau travail!\n\n");
break;
case (4):
printf("Bonne reponse, continue!\n\n");
break;
}

}
else
{
rep_fausse = aleatoire (4);
switch (rep_fausse)
{
case (1):
printf("Desole, essaie encore!\n\n");
break;
case (2):
printf("Mauvaise reponse, essaie une autre fois!\n\n");
break;
case (3):
printf("Ne lache pas, tu y es presque!\n\n");
break;
case (4):
printf("Non, essaie a nouveau!\n\n");
break;
}
}

}
else
{
printf ("Le nombre saisi est incorrect\n");
}


if(reponse==Multipliquation)
{
resultat_juste = resultat_juste+1;
}
else
{
resultat_faux = resultat_faux+1;
}
}
while (test < repetition);


printf("\n\nVoici les resultats :\n\tresultats correctes:%d\n",resultat_juste);
printf("\n\tresultats incorrectes:%d\n",resultat_faux);
pourcentage = (int)(((float)resultat_juste/(float)repetition)*100); //Transtipage, Voir la remarque en haut de page
printf("\n\tpourcentage de reponse juste:%d%%\n", pourcentage);
if (pourcentage<=70)
{
printf("STP,Demande a ton maitre de t'aider\n");
}
else
{
printf ("C'est tres bien !!");

4 réponses

BloodyAngel Messages postés 1482 Date d'inscription mardi 21 juin 2005 Statut Contributeur Dernière intervention 21 juin 2018 402
26 mars 2009 à 13:39
Boh... j'ai survolé ton code très très rapidement et un truc m'a sauté aux yeux dans cette portion de code :

break;
case(3):
operateur = '*';
calcule = Nbr1*Nbr2;
break;
case (4):
operateur = '/';
calcule = Nbr1/Nbr2;
break;
}

printf("combien font %d %c %d=\t",Nbr1,operateur,Nbr2);

if(scanf("%d",&reponse))
{
Multipliquation = Nbr1*Nbr2;
if (Multipliquation == reponse)
{



Apparemment, le calcul peut être l'un des quatres opérateurs. Or tu ne gère au finale que la multiplication... non ? Quid dans les autres cas ? Il affiche un autre opérateur dans le calcul, mais quand il calcule lui-même la réponse il fait un * dans tous les cas...
Enfin ce n'est qu'une impression très très rapide...
0
Yazou92 Messages postés 181 Date d'inscription jeudi 15 janvier 2009 Statut Membre Dernière intervention 30 avril 2013 16
26 mars 2009 à 13:47
Enfaite, operateur doit seulment afficher l'operateur dans le printf selon le scanf qui se trouve plus, et le calcule ce fais dans le switch.
0
Yazou92 Messages postés 181 Date d'inscription jeudi 15 janvier 2009 Statut Membre Dernière intervention 30 avril 2013 16
26 mars 2009 à 13:54
J'ai trouver l'erreur:


if(scanf("%d",&reponse))
{
Multipliquation = Nbr1*Nbr2;
if (Multipliquation == reponse)
{

il fallait mettre

if(scanf("%d",&reponse))
{

if (calcule == reponse)
0
Yazou92 Messages postés 181 Date d'inscription jeudi 15 janvier 2009 Statut Membre Dernière intervention 30 avril 2013 16
26 mars 2009 à 13:54
Merci de m'avoir mis sur la voix
0
BloodyAngel Messages postés 1482 Date d'inscription mardi 21 juin 2005 Statut Contributeur Dernière intervention 21 juin 2018 402
27 mars 2009 à 10:50
No problem ;o)
0