You are on page 1of 3

/* Evaluarea unei expr.

matematice data sub forma poloneza */


/* Prin folosirea Stivei prin Tipul Tablou */

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

#define lg_max 10

typedef int tip_elem;


typedef struct
{
int varf;
tip_elem elemente[lg_max];
}STIVA;

int er;
char E[200];
STIVA S;

void initializare(STIVA *S)


{
S->varf=lg_max;
} /* Initializare */

int stiva_vida(STIVA S)
{
if(S.varf >= lg_max)
return 1;
else return 0;
} /* stiva_vida */

void adauga(tip_elem X, STIVA *S)


{
if(S->varf==0)
{
er=1;
printf("Stiva este plina!! \n");
}
else
{
S->varf=S->varf-1;
S->elemente[S->varf]=X;
}
} /* Adaugare */

void sterge(tip_elem *X, STIVA *S)


{
if(stiva_vida(*S)==1)
{
er=1;
printf("Stiva este plina!! \n");
}
else
{
(*X)=S->elemente[S->varf];
S->varf=S->varf+1;
}
} /* Stergere */

tip_elem varf_st(STIVA S)
{
if (stiva_vida(S) ==1)
{
er=1;
printf("Stiva este plina!! \n");
return 0;
}
else return S.elemente[S.varf];
}

void listare(STIVA S)
{
int i;
if(stiva_vida(S))
{
er=1;
printf("Stiva este vida!! \n");
}
else
{
printf("Stiva : ");
for(i=S.varf; i<=lg_max-1; i++)
printf(" %d, ", S.elemente[i]);
}
} /* Listare */

void listare_Tab(void)
{
int i;
printf("Tabloul : [ ");
for(i=0; i<=lg_max-2; i++)
printf(" %d,", S.elemente[i]);
printf(" %d] \n", S.elemente[lg_max-1]);
} /* listare_Tab */
void main(void)
{
int i, n;
tip_elem X, op1, op2;
clrscr();
printf("Introduceti expresia sub forma poloneza : ");
fflush(stdin); scanf("%s",E); n=strlen(E);
initializare(&S);
for(i=0; i<=n-1; i++)
if(isdigit(E[i]))
{
X=E[i]-'0';
adauga(X,&S);
}
else
{
switch(E[i])
{
case '-' : sterge(&op2, &S);
sterge(&op1, &S);
adauga(op1-op2, &S);
break;
case '+' : sterge(&op2, &S);
sterge(&op1, &S);
adauga(op1+op2, &S);
break;
case '*' : sterge(&op2, &S);
sterge(&op1, &S);
adauga(op1*op2, &S);
break;
case '/' : sterge(&op2, &S);
sterge(&op1, &S);
if(op2 != 0)
adauga(op1/op2, &S);
break;
}
}
printf(" %d \n", varf_st(S));
listare(S);
listare_Tab();
getch();
} /* MAIN */

You might also like