Problème Calculatrice
Résolu/Fermé
MirakRIM
Messages postés
22
Date d'inscription
jeudi 23 octobre 2014
Statut
Membre
Dernière intervention
16 novembre 2014
-
Modifié par MirakRIM le 16/11/2014 à 15:15
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 16 nov. 2014 à 19:36
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 16 nov. 2014 à 19:36
A voir également:
- Problème Calculatrice
- Installer calculatrice sur mon portable - Télécharger - Calcul & Conversion
- Calculatrice gratuit - Télécharger - Calcul & Conversion
- Ma-calculatrice - Télécharger - Calcul & Conversion
- Calculatrice windows 7 - Télécharger - Calcul & Conversion
- Calculatrice ti 83 en ligne - Forum calculatrices
8 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 835
Modifié par fiddy le 16/11/2014 à 17:20
Modifié par fiddy le 16/11/2014 à 17:20
Bonjour,
Trop de chose à voir avant de bien regarder d'où vient précisément le problème. Mes remarques :
Effectivement, déjà oublie les goto.
Ici tu peux le remplacer facilement par un while().
Ensuite, il vaut mieux utiliser des double que des float sauf raison particulière.
if(valeur1<0);
Surtout pas de ; à la fin d'un if. Sinon les instructions d'après ne sont pas exécutées.
N'oublie pas de mettre un '\n' avant le return 0; final.
case 'p' : if (donnee1<0)
Il ne faut pas mettre ce case après le default.
De plus, n'oublie pas le break.
egale=premier(donnee1);
donner est de type float et en argument, il faut mettre un int...
Dans ta fonction premier(), je ne vois pas de return...
pow() c'est plutôt pour les double, donc utilise plutôt powf() si tu souhaites rester en float.
N'oublie pas d'inclure le header math.h.
Ensuite, revois bien l'indentation (utilisation des accolades, etc.) pour plus de lisibilité.
Reposte ton code avec toutes ses corrections et utilise bien la balise "code c". Par exemple :
<code c>ici tu mets ton code</code>
Cdlt,
Google is your friend
Trop de chose à voir avant de bien regarder d'où vient précisément le problème. Mes remarques :
Effectivement, déjà oublie les goto.
Ici tu peux le remplacer facilement par un while().
Ensuite, il vaut mieux utiliser des double que des float sauf raison particulière.
if(valeur1<0);
Surtout pas de ; à la fin d'un if. Sinon les instructions d'après ne sont pas exécutées.
N'oublie pas de mettre un '\n' avant le return 0; final.
case 'p' : if (donnee1<0)
Il ne faut pas mettre ce case après le default.
De plus, n'oublie pas le break.
egale=premier(donnee1);
donner est de type float et en argument, il faut mettre un int...
Dans ta fonction premier(), je ne vois pas de return...
pow() c'est plutôt pour les double, donc utilise plutôt powf() si tu souhaites rester en float.
N'oublie pas d'inclure le header math.h.
Ensuite, revois bien l'indentation (utilisation des accolades, etc.) pour plus de lisibilité.
Reposte ton code avec toutes ses corrections et utilise bien la balise "code c". Par exemple :
<code c>ici tu mets ton code</code>
Cdlt,
Google is your friend
sambia39
Messages postés
610
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
9 février 2023
49
16 nov. 2014 à 15:30
16 nov. 2014 à 15:30
Bonjour
Alors il y' a une chose en informatique qu'il faut que tu comprennes c'est que la syntaxe
Et surtout pas de
à bientôt
Alors il y' a une chose en informatique qu'il faut que tu comprennes c'est que la syntaxe
gotoqui est à évité absolument j'en sais quelque chose et pour les nombres premiers je te conseille ce lien : https://forums.commentcamarche.net/forum/affich-37604400-verifier-si-un-nombre-entier-est-un-nombre-premier-en-c
Et surtout pas de
gotosauf cas extrême et même là "je doute"
à bientôt
MirakRIM
Messages postés
22
Date d'inscription
jeudi 23 octobre 2014
Statut
Membre
Dernière intervention
16 novembre 2014
16 nov. 2014 à 16:06
16 nov. 2014 à 16:06
Le goto permet d'effectuer plusieurs calcul d'affilé ici, je ne sais pas comment faire autrement. Et pour les nombres premiers mon programme fonctionne c'est juste qu'il y a une boucle infini quelque part mais je ne la trouve pas :/
MirakRIM
Messages postés
22
Date d'inscription
jeudi 23 octobre 2014
Statut
Membre
Dernière intervention
16 novembre 2014
16 nov. 2014 à 16:34
16 nov. 2014 à 16:34
Personne pour m'aider ? svp
sambia39
Messages postés
610
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
9 février 2023
49
16 nov. 2014 à 17:19
16 nov. 2014 à 17:19
Calmes toi les gens qui interviennent sur ce forum ont se quand appel une vie sociale donc, soit patient ce n'est pas en insistant que ton problème va se régler.
Pour commencer la syntaxe
deuxièmement il y a une autre solution qui est celle des fonction c'est à dire découper la complexité de ton programme en créant des fonctions en claire, une fonction menus ou bidule pour évité ton
et aussi une autre fonction qui contrôle la saisie car si je rentre un caractère à la place de ta première variable ton programme qui est un
à bientôt
Pour commencer la syntaxe
gotoest à supprimer
deuxièmement il y a une autre solution qui est celle des fonction c'est à dire découper la complexité de ton programme en créant des fonctions en claire, une fonction menus ou bidule pour évité ton
goto
et aussi une autre fonction qui contrôle la saisie car si je rentre un caractère à la place de ta première variable ton programme qui est un
float, ton programme plante complètement bref pas mal de choses à revoir avant même de passer au nombre premier
à bientôt
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
MirakRIM
Messages postés
22
Date d'inscription
jeudi 23 octobre 2014
Statut
Membre
Dernière intervention
16 novembre 2014
16 nov. 2014 à 17:35
16 nov. 2014 à 17:35
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
float addition (float valeur1,float valeur2)
{
float res;
res=valeur1+valeur2;
return(res);
}
float soustraction (float valeur1,float valeur2)
{
float res;
res=valeur1-valeur2;
return(res);
}
float division (float valeur1,float valeur2)
{
float res;
res=valeur1/valeur2;
return(res);
}
float multiplication (float valeur1,float valeur2)
{
float res;
res=valeur1*valeur2;
return(res);
}
float puissance (float valeur1,float valeur2)
{
float res;
res=powf(valeur1,valeur2);
return(res);
}
int premier (int valeur1)
{
int i;
if (valeur1 <= 1)
return 0;
for (i=2; i*i<=valeur1; i++)
{
if (valeur1 % i == 0)
return 0;
}
return 1;
}
int main()
{
float donnee1;
float donnee2;
char operateur;
float egale;
debut:
printf("\n ? ");
scanf("%f %c %f", &donnee1,&operateur,&donnee2);
while (operateur!='S'){
switch (operateur){
case '+' : egale=addition(donnee1,donnee2); printf("%f", egale); break;
case '-' : egale=soustraction(donnee1,donnee2); printf("%f", egale); break;
case '*' : egale=multiplication(donnee1,donnee2); printf("%f", egale); break;
case '^' : egale=puissance(donnee1,donnee2); printf("%f", egale); break;
case '/' :
if (donnee2!=0)
{egale=division(donnee1,donnee2);
printf("%f", egale);}
else printf("Erreur: division par 0"); break;
case 'p' : while (donnee1<0)
{printf("Resaisir un nombre \n");
scanf("%f", &donnee1);}
egale=premier(donnee1);
if (egale=0)
printf("Le nombre est premier");
else
printf("Le nombre n'est pas premier");
break;
case 'S' : return 0;
default : printf("Operateur %c inconnu", operateur);
}
goto debut;
}
printf("Fin du programme \n");
return 0;
}
Voila je pense avoir corrigé, a part pour le go to je n'arrive pas à trouver comment mettre le while.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 835
16 nov. 2014 à 17:58
16 nov. 2014 à 17:58
Pour la balise, j'ai dit "code <gras>c" et non "code" tout simplement. Ca sera encore plus lisible.
egale=premier(donnee1);
Tu as oublié de régler ce problème. donnee1 est un float et ta fonction premier a pour prototype char premier(<gras>int</gra>)...
Il faut régler ce problème.
Ensuite tu n'as pas remis en forme tout ton code. Cela ne nous facilite pas la lecture...
case 'S' :
Il sert à rien ton case 'S' puisque tu as mis un while(opérateur!='S') juste au dessus...
if (egale=0)
L'opérateur de comparaison est == (pas =).
Pour le goto, pour faire l'équivalent, tu mets un while(1) { à la place de debut:
Et } à la place de goto debut;
Ensuite, à toi de voir quelle condition mettre à la place de 1 dans le while() pour quitter le programme.
Et enfin, dis-nous si ton problème est corrigé...
egale=premier(donnee1);
Tu as oublié de régler ce problème. donnee1 est un float et ta fonction premier a pour prototype char premier(<gras>int</gra>)...
Il faut régler ce problème.
Ensuite tu n'as pas remis en forme tout ton code. Cela ne nous facilite pas la lecture...
case 'S' :
Il sert à rien ton case 'S' puisque tu as mis un while(opérateur!='S') juste au dessus...
if (egale=0)
L'opérateur de comparaison est == (pas =).
Pour le goto, pour faire l'équivalent, tu mets un while(1) { à la place de debut:
Et } à la place de goto debut;
Ensuite, à toi de voir quelle condition mettre à la place de 1 dans le while() pour quitter le programme.
Et enfin, dis-nous si ton problème est corrigé...
MirakRIM
Messages postés
22
Date d'inscription
jeudi 23 octobre 2014
Statut
Membre
Dernière intervention
16 novembre 2014
16 nov. 2014 à 18:07
16 nov. 2014 à 18:07
comment je fais pour que le donnee1 devienne un entier juste pour une fonction ?
MirakRIM
Messages postés
22
Date d'inscription
jeudi 23 octobre 2014
Statut
Membre
Dernière intervention
16 novembre 2014
Modifié par MirakRIM le 16/11/2014 à 18:11
Modifié par MirakRIM le 16/11/2014 à 18:11
donnee1=donnee1-(donne1%1) ?
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 835
Modifié par fiddy le 16/11/2014 à 18:11
Modifié par fiddy le 16/11/2014 à 18:11
Un petit cast suffit.
premier((int)donnee1);
premier((int)donnee1);
MirakRIM
Messages postés
22
Date d'inscription
jeudi 23 octobre 2014
Statut
Membre
Dernière intervention
16 novembre 2014
16 nov. 2014 à 18:16
16 nov. 2014 à 18:16
Ah ok merci :)
MirakRIM
Messages postés
22
Date d'inscription
jeudi 23 octobre 2014
Statut
Membre
Dernière intervention
16 novembre 2014
16 nov. 2014 à 18:29
16 nov. 2014 à 18:29
Voila le programme corrigé :
#include <stdio.h> #include <stdlib.h> #include <math.h> float addition (float valeur1,float valeur2) { float res; res=valeur1+valeur2; return(res); } float soustraction (float valeur1,float valeur2) { float res; res=valeur1-valeur2; return(res); } float division (float valeur1,float valeur2) { float res; res=valeur1/valeur2; return(res); } float multiplication (float valeur1,float valeur2) { float res; res=valeur1*valeur2; return(res); } float puissance (float valeur1,float valeur2) { float res; res=powf(valeur1,valeur2); return(res); } int premier (int valeur1) { int i; if (valeur1 <= 1) return 0; for (i=2; i*i<=valeur1; i++) { if (valeur1 % i == 0) return 0; } return 1; } int main() { float donnee1; float donnee2; char operateur; float egale; while (operateur!='S') { printf("\n ? "); scanf("%f %c %f", &donnee1,&operateur,&donnee2); switch (operateur){ case '+' : egale=addition(donnee1,donnee2); printf("%f", egale); break; case '-' : egale=soustraction(donnee1,donnee2); printf("%f", egale); break; case '*' : egale=multiplication(donnee1,donnee2); printf("%f", egale); break; case '^' : egale=puissance(donnee1,donnee2); printf("%f", egale); break; case '/' : if (donnee2!=0) { egale=division(donnee1,donnee2); printf("%f", egale); } else printf("Erreur: division par 0"); break; case 'p' : while (donnee1<0) { printf("Resaisir un nombre \n"); scanf("%f", &donnee1); } egale=premier((int)donnee1); if (egale==0) printf("Le nombre n'est pas premier"); else printf("Le nombre est premier"); break; default : printf("Operateur %c inconnu", operateur); } } printf("Fin du programme \n"); return 0; }
MirakRIM
Messages postés
22
Date d'inscription
jeudi 23 octobre 2014
Statut
Membre
Dernière intervention
16 novembre 2014
16 nov. 2014 à 19:05
16 nov. 2014 à 19:05
MirakRIM
Messages postés
22
Date d'inscription
jeudi 23 octobre 2014
Statut
Membre
Dernière intervention
16 novembre 2014
16 nov. 2014 à 19:19
16 nov. 2014 à 19:19
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 835
16 nov. 2014 à 19:25
16 nov. 2014 à 19:25
Hum. Quand tu fais -6p9, tu rentres dans la boucle scanf("%f"). On te demande donc un seul nombre et toi tu remets 12p9...
Il faudrait revoir l'algorithme.
Tu peux t'en sortir à la place du getchar() en flushant proprement le buffet clavier :
Tu peux mettre ce code dans une fonction (purgeClavier()) et appeler cette fonction à la place de getchar().
Mais réfléchis bien à la question : est-ce normal que tu tapes 12p9 alors que tu demandes un seul nombre ? ;-)
Il faudrait revoir l'algorithme.
Tu peux t'en sortir à la place du getchar() en flushant proprement le buffet clavier :
int c; while ( (c=getchar()) != '\n' && c != EOF);
Tu peux mettre ce code dans une fonction (purgeClavier()) et appeler cette fonction à la place de getchar().
Mais réfléchis bien à la question : est-ce normal que tu tapes 12p9 alors que tu demandes un seul nombre ? ;-)
MirakRIM
Messages postés
22
Date d'inscription
jeudi 23 octobre 2014
Statut
Membre
Dernière intervention
16 novembre 2014
16 nov. 2014 à 19:28
16 nov. 2014 à 19:28
AHHHHHH OUI,!!!! je suis vraiment con, il suffit que je tappe juste un nombre est c'est bon....Merci de ton aide! et désolé du dérangement ^^
MirakRIM
Messages postés
22
Date d'inscription
jeudi 23 octobre 2014
Statut
Membre
Dernière intervention
16 novembre 2014
16 nov. 2014 à 19:29
16 nov. 2014 à 19:29
Par contre un dernier truc
MirakRIM
Messages postés
22
Date d'inscription
jeudi 23 octobre 2014
Statut
Membre
Dernière intervention
16 novembre 2014
16 nov. 2014 à 19:31
16 nov. 2014 à 19:31
Tu ne saurais pas comment je peux faire pour que si je rentre un nombre à virgule il me demande de resaisir un nombre ou alors qu'il prenne juste la partie entière de ce nombre car la quand je tape un nombre à virgule il concidère la virgule comme l'opérateur du cou il me sort "Opérateur , inconnu" :/
MirakRIM
Messages postés
22
Date d'inscription
jeudi 23 octobre 2014
Statut
Membre
Dernière intervention
16 novembre 2014
16 nov. 2014 à 19:34
16 nov. 2014 à 19:34
Ah nan c'est bon merci jai jsute mis case',' devant case 'p' : ^^ Merci pour ton aide encore une fois :)