- #include<conio.h>
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
-
- //------------------------------------------------------------------------
-
-
- typedef struct
-
- {float tab [99]; //structure Pile
- int taille ;
- }pile;
-
- char equation[99]; //tableau Saisie
-
- int Q[99]; //tableau Intermediare
- int tailleq;
-
- int P[99]; //tableau Final
- int taillep;
-
- float valeur; //Resultat Final
- //-------------------------------------------------------------------
-
-
- void push(pile*p,float x)
- {if (p->taille <100 )
- {
- p->tab [ p->taille]=x;
- p->taille ++;
- }
- else
- printf("pile pleine");
- }
-
- float pop (pile*p)
- {
- p->taille --;
- return ( p->tab[p->taille]);
- }
-
- void init (pile*p)
- {
- p->taille=0;
- }
-
- int pile_pleine (pile*p)
- {
- if (p->taille==100)
- return 1;
- else
- return 0;
- }
-
- int pile_vide (pile*p)
- { if (p->taille == 0)
- return 1;
- else
- return 0;
- }
-
- float top (pile*p)
- {
- return p->tab[p->taille-1];
- }
-
- //-------------------------------------------------------------------
- int prio(int x)
- {
- if ((x=='*')||(x=='/'))
- return 2;
- else
- return 1;
- }
-
-
- //--------------------------------------------------------------------
- void saisi0()
- {
- int i;
- clrscr();
- textcolor(4);
- cprintf (" copyright 2004-2005 .sfar..MAMINO.corp.\n");
- cprintf ("********************************************************************************\n");
- ("********************************************************************************\n");
- }
-
-
-
-
-
- //-----------------------------------------------------------------------
-
-
-
- void saisie()
- {char *e[1];
-
-
-
- int k=0;
- int i=0;
- int A,B;
- printf("entrer votre equation :\n");
- scanf("%s",equation);
- while (i<strlen(equation))
- {
-
- if ((equation[i]!='+' )&& (equation[i]!='-' ) && (equation[i]!='*') && (equation[i]!='/' ) && (equation[i]!='(' )&& (equation[i]!=')' ) )
-
- {e[0]= equation[i] ;
- A=atoi(e);
- i++;
- while ((equation[i]!='+' )&& (equation[i]!='-' ) && (equation[i]!='*') && (equation[i]!='/' ) && (equation[i]!='(' ) && (equation[i]!=')' )&& (i<strlen(equation)) )
- { e[0]= equation[i] ;
- B=atoi(e) ;
- A=((A*10)+B);
- i++;
- }Q[k]=(A);k++;
-
-
- }
- else
- { switch(equation[i])
- {
- case 43 :Q[k]='+' ;
- break;
-
- case 45 :Q[k]='-' ;
- break;
-
- case 42 :Q[k]='*' ;
- break;
-
- case 47 :Q[k]='/' ;
- break;
-
- case 40 :Q[k]='(' ;
- break;
-
- case 41 :Q[k]=')' ;
- break;
- } i++;k++;
-
- }
-
- }tailleq=k;
-
- }
-
-
- //--------------------------------------------------------------------
-
-
-
- void infixe_suffixe()
- {
- pile stack;
- int x;
- int i=0;
- init(&stack);
- taillep=-1;
- push(&stack,'(');
- Q[tailleq]=')';
- while ((pile_vide(&stack))==0)
- {
- if ((Q[i]!='+' )&& (Q[i]!='-' ) && (Q[i]!='*') && (Q[i]!='/' ) && (Q[i]!='(' ) && (Q[i]!=')'))
- {taillep++;
- P[taillep]=Q[i]; }
- else
- if((Q[i]=='(')) push (&stack,Q[i]);
- else
- {
- if(Q[i]==')')
- {while (top(&stack)!='(')
- {x=pop(&stack);
- taillep++;
- P[taillep]=x;
- }
- pop(&stack);
- }
- else
- {if ((top(&stack)!='(')&&(top(&stack)!=')') )
- while (prio(top(&stack)) > prio(Q[i]) )
-
- { x=pop(&stack);
- taillep++;
- P[taillep]=x;
- }push (&stack,Q[i]);
- }
-
- }i++;
- }
- }
- //------------------------------------------------------------------
-
- void suffixe_evaluation ()
- {
- pile stack;
- int i;
- float A,B,C;
- //
- init(&stack);
-
- for (i=0;i<=taillep;i++)
- {
- if ((P[i]!='+') && (P[i]!='-')&&(P[i]!='*')&&(P[i]!='/'))
- {push(&stack,P[i]); }
- else
- {A=pop(&stack);
- B=pop(&stack);
-
- switch(P[i])
- {
- case '+' :C=B+A ;
- break;
-
- case '-' :C=B-A ;
- break;
-
- case '*' :C=B*A ;
- break;
-
- case '/' :C=B/A ;
- break;
- }
- push(&stack,C); }
-
- valeur=top(&stack);
- }
-
-
-
-
- }
- //--------------------------------------------------------------
- void affiche_infixe()
- {
- char e[10];
- char infixe[99];
- int i,k=0,j;
- for (i=0;i<=taillep;i++)
- { infixe[k]=' ';k++;
- if ((P[i]!='+') && (P[i]!='-')&&(P[i]!='*')&&(P[i]!='/'))
- {
-
-
- itoa(P[i],e, 10);
- for (j=0;j<strlen(e);j++)
- {
- infixe[k]=e[j];
- k++;
- }
- }
- else if
- ((P[i]=='+') || (P[i]=='-') || (P[i]=='*') || (P[i]=='/'))
-
- switch(P[i])
- {
- case '+' :infixe[k]='+'; k++;
- break;
-
- case '-' :infixe[k]='-'; k++;
- break;
-
- case '*' :infixe[k]='*'; k++;
- break;
-
- case '/' :infixe[k]='/'; k++;
- break;
-
- }
- }infixe[k]='\0';
-
- textcolor(5);
- cprintf("\n Equation infixe = %s",infixe );
-
- }
-
-
-
- //--------------------------------------------------------------
- void affiche()
- {
-
-
- clrscr();
- textcolor(4);
- printf ("UTC Email :maminomamino@hotmail.com");
- printf (" copyright 2004-2005 .sfar..MAMINO.corp.");
- printf ("********************************************************************************\n");
- cprintf("\n###########################################################");
- printf("\n");
- cprintf ("\n*********");
- textcolor(6);
- cprintf("Projet en C |Infixe-->Suffixe-->Resultat");
- textcolor(4);
- cprintf ("*********:");
- printf("\n");
- cprintf("\n###########################################################");
-
- printf("\n");
- printf("\n");
-
-
- textcolor(6);
- printf("\n");
- cprintf("\n EQUATION :%s ",equation);
- printf("\n");
- affiche_infixe() ;
- printf("\n");
- textcolor(6);
- cprintf("\n LE RESULTAT apres traitement :%f ",valeur);
-
-
-
- }
- //---------------------------------------------------------------
- void main()
- {
- saisi0();
- saisie();
- infixe_suffixe();
- suffixe_evaluation ();
- affiche();
- getch();
- }
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//------------------------------------------------------------------------
typedef struct
{float tab [99]; //structure Pile
int taille ;
}pile;
char equation[99]; //tableau Saisie
int Q[99]; //tableau Intermediare
int tailleq;
int P[99]; //tableau Final
int taillep;
float valeur; //Resultat Final
//-------------------------------------------------------------------
void push(pile*p,float x)
{if (p->taille <100 )
{
p->tab [ p->taille]=x;
p->taille ++;
}
else
printf("pile pleine");
}
float pop (pile*p)
{
p->taille --;
return ( p->tab[p->taille]);
}
void init (pile*p)
{
p->taille=0;
}
int pile_pleine (pile*p)
{
if (p->taille==100)
return 1;
else
return 0;
}
int pile_vide (pile*p)
{ if (p->taille == 0)
return 1;
else
return 0;
}
float top (pile*p)
{
return p->tab[p->taille-1];
}
//-------------------------------------------------------------------
int prio(int x)
{
if ((x=='*')||(x=='/'))
return 2;
else
return 1;
}
//--------------------------------------------------------------------
void saisi0()
{
int i;
clrscr();
textcolor(4);
cprintf (" copyright 2004-2005 .sfar..MAMINO.corp.\n");
cprintf ("********************************************************************************\n");
("********************************************************************************\n");
}
//-----------------------------------------------------------------------
void saisie()
{char *e[1];
int k=0;
int i=0;
int A,B;
printf("entrer votre equation :\n");
scanf("%s",equation);
while (i<strlen(equation))
{
if ((equation[i]!='+' )&& (equation[i]!='-' ) && (equation[i]!='*') && (equation[i]!='/' ) && (equation[i]!='(' )&& (equation[i]!=')' ) )
{e[0]= equation[i] ;
A=atoi(e);
i++;
while ((equation[i]!='+' )&& (equation[i]!='-' ) && (equation[i]!='*') && (equation[i]!='/' ) && (equation[i]!='(' ) && (equation[i]!=')' )&& (i<strlen(equation)) )
{ e[0]= equation[i] ;
B=atoi(e) ;
A=((A*10)+B);
i++;
}Q[k]=(A);k++;
}
else
{ switch(equation[i])
{
case 43 :Q[k]='+' ;
break;
case 45 :Q[k]='-' ;
break;
case 42 :Q[k]='*' ;
break;
case 47 :Q[k]='/' ;
break;
case 40 :Q[k]='(' ;
break;
case 41 :Q[k]=')' ;
break;
} i++;k++;
}
}tailleq=k;
}
//--------------------------------------------------------------------
void infixe_suffixe()
{
pile stack;
int x;
int i=0;
init(&stack);
taillep=-1;
push(&stack,'(');
Q[tailleq]=')';
while ((pile_vide(&stack))==0)
{
if ((Q[i]!='+' )&& (Q[i]!='-' ) && (Q[i]!='*') && (Q[i]!='/' ) && (Q[i]!='(' ) && (Q[i]!=')'))
{taillep++;
P[taillep]=Q[i]; }
else
if((Q[i]=='(')) push (&stack,Q[i]);
else
{
if(Q[i]==')')
{while (top(&stack)!='(')
{x=pop(&stack);
taillep++;
P[taillep]=x;
}
pop(&stack);
}
else
{if ((top(&stack)!='(')&&(top(&stack)!=')') )
while (prio(top(&stack)) > prio(Q[i]) )
{ x=pop(&stack);
taillep++;
P[taillep]=x;
}push (&stack,Q[i]);
}
}i++;
}
}
//------------------------------------------------------------------
void suffixe_evaluation ()
{
pile stack;
int i;
float A,B,C;
//
init(&stack);
for (i=0;i<=taillep;i++)
{
if ((P[i]!='+') && (P[i]!='-')&&(P[i]!='*')&&(P[i]!='/'))
{push(&stack,P[i]); }
else
{A=pop(&stack);
B=pop(&stack);
switch(P[i])
{
case '+' :C=B+A ;
break;
case '-' :C=B-A ;
break;
case '*' :C=B*A ;
break;
case '/' :C=B/A ;
break;
}
push(&stack,C); }
valeur=top(&stack);
}
}
//--------------------------------------------------------------
void affiche_infixe()
{
char e[10];
char infixe[99];
int i,k=0,j;
for (i=0;i<=taillep;i++)
{ infixe[k]=' ';k++;
if ((P[i]!='+') && (P[i]!='-')&&(P[i]!='*')&&(P[i]!='/'))
{
itoa(P[i],e, 10);
for (j=0;j<strlen(e);j++)
{
infixe[k]=e[j];
k++;
}
}
else if
((P[i]=='+') || (P[i]=='-') || (P[i]=='*') || (P[i]=='/'))
switch(P[i])
{
case '+' :infixe[k]='+'; k++;
break;
case '-' :infixe[k]='-'; k++;
break;
case '*' :infixe[k]='*'; k++;
break;
case '/' :infixe[k]='/'; k++;
break;
}
}infixe[k]='\0';
textcolor(5);
cprintf("\n Equation infixe = %s",infixe );
}
//--------------------------------------------------------------
void affiche()
{
clrscr();
textcolor(4);
printf ("UTC Email :maminomamino@hotmail.com");
printf (" copyright 2004-2005 .sfar..MAMINO.corp.");
printf ("********************************************************************************\n");
cprintf("\n###########################################################");
printf("\n");
cprintf ("\n*********");
textcolor(6);
cprintf("Projet en C |Infixe-->Suffixe-->Resultat");
textcolor(4);
cprintf ("*********:");
printf("\n");
cprintf("\n###########################################################");
printf("\n");
printf("\n");
textcolor(6);
printf("\n");
cprintf("\n EQUATION :%s ",equation);
printf("\n");
affiche_infixe() ;
printf("\n");
textcolor(6);
cprintf("\n LE RESULTAT apres traitement :%f ",valeur);
}
//---------------------------------------------------------------
void main()
{
saisi0();
saisie();
infixe_suffixe();
suffixe_evaluation ();
affiche();
getch();
}