évaluation d'une expression arithmétique
bella
-
bella -
bella -
Bonjour,
pouvez vous m'aider à corriger mon programme car lorsque je le compile il n'y a pas d'erreurs mais il ne fonctionne pas!! merci
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int calcul(char *buffer);
int main()
{
char A="12+15";
int a ;
a=calcul(A);
printf(a);
return 0;
}
int calcul(char *buffer){
int i=0;
int j=0;
char S1[17],S2[17];
int index_fonction=0;
char fonction;
int resultat=0;
int Nb1=0;
int Nb2=0;
for (i=0;i++;i<17){
if (( buffer[i]=='+') || (buffer[i]=='-') || (buffer[i]=='*') || (buffer[i]=='/' ))
{ fonction=buffer[i];
index_fonction=i;
}
}
for (j=0;j++;j<index_fonction){
S1[j]=buffer[j];
}
for (j=index_fonction+1;j++;j<17)
{
S2[j]=buffer[j];
}
Nb1=atoi(S1);
Nb2=atoi(S2);
if (fonction=='+')
{
resultat=Nb1+Nb2;
}
if (fonction=='-')
{
resultat=Nb1-Nb2 ;
}
if (fonction=='*'){
resultat=Nb1*Nb2 ;
}
if (fonction=='/'){
resultat=Nb1/Nb2 ;
}
return resultat;
}
pouvez vous m'aider à corriger mon programme car lorsque je le compile il n'y a pas d'erreurs mais il ne fonctionne pas!! merci
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int calcul(char *buffer);
int main()
{
char A="12+15";
int a ;
a=calcul(A);
printf(a);
return 0;
}
int calcul(char *buffer){
int i=0;
int j=0;
char S1[17],S2[17];
int index_fonction=0;
char fonction;
int resultat=0;
int Nb1=0;
int Nb2=0;
for (i=0;i++;i<17){
if (( buffer[i]=='+') || (buffer[i]=='-') || (buffer[i]=='*') || (buffer[i]=='/' ))
{ fonction=buffer[i];
index_fonction=i;
}
}
for (j=0;j++;j<index_fonction){
S1[j]=buffer[j];
}
for (j=index_fonction+1;j++;j<17)
{
S2[j]=buffer[j];
}
Nb1=atoi(S1);
Nb2=atoi(S2);
if (fonction=='+')
{
resultat=Nb1+Nb2;
}
if (fonction=='-')
{
resultat=Nb1-Nb2 ;
}
if (fonction=='*'){
resultat=Nb1*Nb2 ;
}
if (fonction=='/'){
resultat=Nb1/Nb2 ;
}
return resultat;
}
A voir également:
- évaluation d'une expression arithmétique
- Moyenne arithmétique excel - Guide
- Expression écrite cm1 cm2 télécharger gratuit - Télécharger - Éducatifs
- Microsoft expression encoder - Télécharger - Divers Utilitaires
- Expression de recherche - Guide
- Avoir du ping expression ✓ - Forum jeux en ligne
4 réponses
des erreurs sur le code, après correction de toutes les erreurs et en apportant des améliorations voila un prog fonctionnel
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int calcul(char *buffer);
int main()
{
char A[20]="30/15";
int a ;
a=calcul(A);
printf("%d",a);
system("PAUSE>nil");
return 0;
}
int calcul(char *buffer)
{
int i=0;
int j=0;
int k = 0;
char S1[17],S2[17];
int index_fonction=0;
char fonction;
int resultat=0;
int Nb1=0;
int Nb2=0;
for (i=0;i<17;i++)
{
if (( buffer[i]=='+') || (buffer[i]=='-') || (buffer[i]=='*') || (buffer[i]=='/' ))
{
fonction=buffer[i];
index_fonction=i;
}
}
for (j=0;j<index_fonction;j++)
{
S1[j]=buffer[j];
}
for (j=index_fonction+1;j<17;j++)
{
S2[k]=buffer[j];
k++;
}
Nb1=atoi(S1);
Nb2=atoi(S2);
switch (fonction)
{
case '+' :
resultat=Nb1+Nb2;
break;
case '-':
resultat=Nb1-Nb2 ;
break;
case '*':
resultat = Nb1*Nb2;
break;
case '/':
if (Nb2 == 0)
{
// Gestion de l'erreur division par 0
resultat = -1;
break;
}
else
{
resultat = Nb1 / Nb2;
break;
}
}
return resultat;
}
Il y a encore quelques cas à gérer, en particulier lorsque la chaîne de caractères se termine ou lorsqu'il n'y a pas d'opérateurs...
J'ai également renommées ou supprimées les variables qui pouvaient l'être afin que le programme soit plus clair...
J'ai également renommées ou supprimées les variables qui pouvaient l'être afin que le programme soit plus clair...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const int nmax=17;
int calcul(const char *);
int main()
{
printf("%d\n",calcul("3+2")); // 5
printf("%d\n",calcul("3-2")); // 1
printf("%d\n",calcul("3*2")); // 6
printf("%d\n",calcul("3/2")); // 1
printf("%d\n",calcul("3%2")); // 1
printf("%d\n",calcul("32")); // 32
printf("%d\n",calcul("toto")); // 0
printf("%d\n",calcul("3+2+1")); // 5
return 0;
}
int calcul(const char *operation)
{
int index_operateur;
char operateur;
for (index_operateur=0; index_operateur<nmax; index_operateur++)
{
operateur = operation[index_operateur];
if (operateur=='+' || operateur=='-' || operateur=='*' || operateur=='/' || operateur=='%' || operateur=='\0')
break;
}
int i;
char s1[nmax];
for (i=0; i<index_operateur; i++)
s1[i]=operation[i];
s1[i]='\0';
int nb1=atoi(s1);
char s2[nmax];
for (i=index_operateur+1; i<nmax; i++)
s2[i-index_operateur-1]=operation[i];
s2[i-index_operateur-1]='\0';
int nb2=atoi(s2);
switch (operateur)
{
case '+' : return nb1+nb2;
case '-' : return nb1-nb2;
case '*' : return nb1*nb2;
case '/' : return (nb2==0)? 0 : nb1/nb2;
case '%' : return nb1%nb2;
case '\0' : return nb1;
}
}
Quand tu compiles il n'y a pas d'erreurs ?!
Change de compilateur alors...
Change de compilateur alors...
Erreur ligne 10 : error C2440: 'initialisation' : impossible de convertir de 'const char [6]' en 'char' Erreur ligne 13 : error C2664: 'calcul' : impossible de convertir le paramètre 1 de 'char' en 'char *' Erreur ligne 14 : error C2664: 'printf' : impossible de convertir le paramètre 1 de 'int' en 'const char *' Avertissements ligne 31, ligne 37, ligne 40 : warning C4552: '<' : opérateur sans effet ; opérateur avec effet secondaire attendu