1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int char2nb(char input)
{
switch(input)
{
case '0' : return 0 ;
case '1' : return 1 ;
case '2' : return 2 ;
case '3' : return 3 ;
case '4' : return 4 ;
case '5' : return 5 ;
case '6' : return 6 ;
case '7' : return 7 ;
case '8' : return 8 ;
case '9' : return 9 ;
}
return -1 ;
}
double compute(char * input)
{
int i, exp , size , virg;
double nb ;
virg = 0 ;
nb = 0 ;
size = strlen(input) ;
exp = size ;
printf("%s\n",input);
for(i = 0 ; i < size ; i++)
{
// Factor d'exposant de puissance 10 :
exp-- ;
// Si c'est un nombre :
if(input[i] > 47 && input[i] <60)
nb += pow(10,exp)*( char2nb(input[i]) ) ;
// Si c'est une virgule ou un point ( , ou . ) :
if(input[i] == ',' || input[i] == '.')
{
// 'ajustement' du compte actuel :
nb /= pow(10,size-i);
// Debut d'un compte < 1
exp = 0;
// Signaler un changement de virgule :
virg = 1;
}
// Si c'est un + ou - ou * ou / :
if( input[i] == '*' ||
input[i] == '/' ||
input[i] == '+' ||
input[i] == '-' )
{
if(!virg) nb /= pow(10,size-i);
switch(input[i])
{
case '*' :
nb *= compute(input + i + 1) ;
return nb ;
case '+' :
nb += compute(input + i + 1) ;
return nb ;
case '-' :
nb -= compute(input + i + 1) ;
return nb ;
case '/' :
nb /= compute(input + i + 1) ;
return nb ;
}
}
}
return nb;
}
int main()
{
char *input ;
// expression sous forme de chaine de charactere :
input = "4+3+1/4+1*5+3";
printf("Le resultat est : %f ( je vous conseille tt de"
"meme de reverifier le resultat lol",compute(input)) ;
return 0 ;
} |
Partager