A voir également:
- évaluation d'une expression arithmétique
- Expression de recherche - Guide
- Evaluation pc - Guide
- Expression encoder - Télécharger - Divers Utilitaires
- T'as du ping expression ✓ - Forum Réseau
- Modèle fiche expression de besoin excel - Forum Word
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
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; }
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
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...
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; } }
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
9 mai 2011 à 13:05
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