#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#include <string.h>
#include <math.h>
#define MAX 100
#define TRUE 1
#define FALSE 0
typedef struct{
int top;
double node[MAX];
} stack;
int Empty(stack *);
void Push( stack *, double);
double Pop(stack *);
double Dinhtri(char *);
int lakyso(char);
double tinh(int, double, double);
int Empty(stack *ps) {
if (ps->top==-1){
delay(2000);return(TRUE);
}
return(FALSE);
}
void Push(stack *ps, double p){
if (ps ->top==MAX-1){
delay(2000);return;
}
ps->top=(ps->top) + 1;
ps->node[ps->top]=p;
}
double Pop(stack *ps ){
if (Empty(ps)){
delay(2000); return(0);
}
return(ps->node[ps->top--]);
}
double Dinhtri(char *Bieuthuc){
int i,c, vitri;
double toanhang1, toanhang2, giatri;
stack s;
s.
top=-1;vitri
=strlen(Bieuthuc
); for(i=0;i<vitri;i++){
if (lakyso(Bieuthuc[i]))
Push(&s,(double)(Bieuthuc[i]-'0'));
else {
toanhang2=Pop(&s);
toanhang1=Pop(&s);
giatri=tinh(Bieuthuc[i],toanhang1, toanhang2);
Push(&s, giatri);
}
}
return(Pop(&s));
}
int lakyso(char kitu) {
return(kitu>='0' && kitu<='9');
}
double tinh(int toantu, double toanhang1, double toanhang2){
double ketqua=0;
switch(toantu){
case '+': ketqua=toanhang1+toanhang2;break;
case '-': ketqua=toanhang1-toanhang2;break;
case '*': ketqua=toanhang1*toanhang2;break;
case '/': ketqua=toanhang1/toanhang2;break;
case '$': ketqua
=pow(toanhang1
,toanhang2
);break; }
return(ketqua);
}
void main(void){
char c, bieuthuc[MAX];
int vitri;clrscr();
printf("\n Gia tri = %f",Dinhtri
(bieuthuc
)); }