évaluation d'une expression arithmétique

Fermé
bella - 9 mai 2011 à 12:45
 bella - 9 mai 2011 à 13:39
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;
}
A voir également:

4 réponses

Vicking54 Messages postés 89 Date d'inscription lundi 11 octobre 2010 Statut Membre Dernière intervention 17 mai 2011 26
9 mai 2011 à 13:26
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; 
}
1
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
9 mai 2011 à 13:35
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...

#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;
	}
}
1
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
9 mai 2011 à 13:05
Quand tu compiles il n'y a pas d'erreurs ?!
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
0
merciiii beaucoup pour votre aide ^_^
0