Evaluation d'expression arithmetique

3/5 (2 avis)

Snippet vu 9 371 fois - Téléchargée 39 fois

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

Ajouter un commentaire Commentaires
a_adn Messages postés 5 Date d'inscription mardi 4 janvier 2005 Statut Membre Dernière intervention 13 mai 2009
23 avril 2006 à 17:52
Salut ^_^ tres bon code, neanmoin si pouvez y ajoter la prise en charge des parenthèse ca sera encore plus interessant :).
Bon boulot continu .
ranouf Messages postés 237 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 31 août 2009
5 nov. 2004 à 15:23
il manque le .h dommage

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.