Evaluation d'expression arithmetique

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 719 fois - Téléchargée 37 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

Messages postés
5
Date d'inscription
mardi 4 janvier 2005
Statut
Membre
Dernière intervention
13 mai 2009

Salut ^_^ tres bon code, neanmoin si pouvez y ajoter la prise en charge des parenthèse ca sera encore plus interessant :).
Bon boulot continu .
Messages postés
237
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
31 août 2009

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.