Evaluation d'expression arithmetique

Contenu du snippet

ce petit programme vous permmet de evaluer une expression arithmetique entrer par le clavier "sous forme de caractere biensur" pour la calculer ensuite .

Source / Exemple :


# include<stdio.h>
# include<conio.h>
# include<alloc.h>
# include<string.h>

 int ver_nbr(char x)
{
switch (x)
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':return( 1);
default:return (0);
}
}

int ver_oper(char x)
{
switch (x)
{
case '+' :
case '-' :
case '*' :
case '/' :
case '^' :return( 1);
default :return (0);
}
}

int con_nbr(char x)
{
switch (x)
{
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);
default:return (0);
}
}

float con_oper(char x)
{
switch (x)
{
case '+' :return( -1);
case '-' :return( -2);
case '*' :return( -10);
case '/' :return( -20);
case '^' :return( -100);
default :return (0);

}
}

int verif(char t[],int n)
{
  int ver_nbr(char x);
  int ver_oper(char x);
  int succe=1,i;

 if(ver_oper(t[0])==1)
 {succe=0;

 }
 if(ver_oper(t[n-1])==1)
 {succe=0;
  }
  for(i=0;i<=n-2;i++)
 {
 if((ver_oper(t[i])==1)&& (ver_oper(t[i+1])==1))
 {succe=0;
 }
 if((ver_nbr(t[i])==0)&& (ver_oper(t[i])==0))
 {succe=0;
  }
 }
 return(succe);
 }

void compact(int *i,int *nbrcase,float e[])
{ int k;
 while(*i<=*nbrcase-1)
 {
  e[*i]=e[*i+2];
  e[*i+1]=e[*i+3];

  • i=*i+2 ;
} k=*i-1; farfree(e+k);
  • nbrcase=*nbrcase-2;
} double expo (double a, unsigned int b) { if (b == 0) { if (a == 0.0) { return 0.0; } return 1.0; } return a * expo(a, b-1); } void main() { char t[100];float *e,oper,min; int l,result,i,nbr,r,f,nbrcase,k,entre,ent,s=0; clrscr(); textcolor(4); cprintf("BIENVENUE DANS LE PROGRAMME : ALI'S CALCULATOR\r\n"); printf("donner moi l'expression a calculer\n"); scanf("%s",&t); l=strlen(t); result=verif(t,l); while(result==0) {printf("vous avez mal introduit votre expression reessayez\n"); printf("donner moi l'expression a calculer\n"); scanf("%s",&t); l=strlen(t); result=verif(t,l);} if(result==1) { for(i=0;i<=l-1;i++) { if(ver_oper(t[i])==1) s=s+1; } nbrcase=2*s+1; e=(float *)malloc(nbrcase*sizeof(float)); nbr=0;k=0;entre=1;f=0; while(k<=l-1) { if(ver_oper(t[k])==0) { r=con_nbr(t[k]); nbr=nbr*10+r; } if((ver_oper(t[k])==1)||(k==l-1)) { entre=0; oper=con_oper(t[k]); } if(entre==0) {e[f]=nbr; if(f<=nbrcase-1) e[f+1]=oper; nbr=0; f=f+2; entre=1; } k++; } while(nbrcase>1) { min=e[1];ent=0; for(i=1;i<=nbrcase-1;i=i+2) { if(e[i]<=min) { min=e[i]; s=i; } } if(min==-100) { if(expo (e[s+1],e[s-1])!=0.0) e[s-1]=expo (e[s-1],e[s+1]); else {ent=1; nbrcase=0;} } if(min==-20) { if(e[s+1]!=0) e[s-1]=e[s-1]/e[s+1]; if(e[s+1]==0) {ent=1; nbrcase=0;} } if(min==-10) e[s-1]=(e[s+1]*e[s-1]); if(min==-2) e[s-1]=(e[s-1]- e[s+1]); if(min==-1) e[s-1]=(e[s+1]+ e[s-1]); i=s; if (nbrcase!=0) { compact(&i,&nbrcase,e); } } } if(ent==1) {printf("le calcule de cette expression est impossible vous avez fait une erreur dans la saisi\n"); printf("JE VOUS REMERCIE D'AVOIR UTILISER MON PROGRAMME A TRES BIENTOT ;c)\n"); getch(); } else {printf("le resultat du calucul de votre expression est %f \n",e[0]); printf("JE VOUS REMERCIE D'AVOIR UTILISER MON PROGRAMME A TRES BIENTOT ;c)\n"); getch(); } }

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.