#include "stack.h" #include "stdio.h" #include "conio.h" #include "stack.h" #include "stdio.h" #include "conio.h"
main() { char c,theta,array[20]; int a,b,t,i=0,j=0; SqStack OPTR; SqStack2 OPND; clrscr(); main() { char c,theta,array[20]; int a,b,t,i=0,j=0; SqStack OPTR; SqStack2 OPND; clrscr();
InitStack(&OPTR); Push(&OPTR,'#'); InitStack2(&OPND); gets(array); while(array[i]) i++; InitStack(&OPTR); Push(&OPTR,'#'); InitStack2(&OPND); gets(array); while(array[i]) i++;
if(array[i-1]!='=') printf("You must put a character make this procedure to the end!!!"); else{ i=0; while(array[i]!='='||GetTop(OPTR)!='#'){ while(In(array[i])){i++;j++;} if(j){ t=atoi(&array[i-j]); Push2(&OPND,t); j=0; } if(!In(array[i])){ switch(Precede(GetTop(OPTR),array[i])){ case '<': Push(&OPTR,array[i]);i++; break; case '=': Pop(&OPTR,&c);i++; break; case '>': Pop(&OPTR,&theta); Pop2(&OPND,&a);Pop2(&OPND,&b); Push2(&OPND,Operate(a,theta,b)); break; default:printf("Warning:Data Error!"); } /*switch*/ } /*if*/ } /*swicth*/ } /*else*/ printf("%d",GetTop2(OPND)); sleep(2); } /*main*/ if(array[i-1]!='=') printf("You must put a character make this procedure to the end!!!"); else{ i=0; while(array[i]!='='||GetTop(OPTR)!='#'){ while(In(array[i])){i++;j++;} if(j){ t=atoi(&array[i-j]); Push2(&OPND,t); j=0; } if(!In(array[i])){ switch(Precede(GetTop(OPTR),array[i])){ case '<': Push(&OPTR,array[i]);i++; break; case '=': Pop(&OPTR,&c);i++; break; case '>': Pop(&OPTR,&theta); Pop2(&OPND,&a);Pop2(&OPND,&b); Push2(&OPND,Operate(a,theta,b)); break; default:printf("Warning:Data Error!"); } /*switch*/ } /*if*/ } /*swicth*/ } /*else*/ printf("%d",GetTop2(OPND)); sleep(2); } /*main*/
Precede(char a,char b){ if(((a=='(')&&(b==')')) ||((a=='#')&&(b=='='))) return '='; else if(((a=='('||a=='#')&&(b=='+'||b=='-'||b=='*'||b=='/'||b=='(')) ||((a=='+'||a=='-')&&(b=='*'||b=='/'||b=='(')) ||((a=='*'||a=='/')&&b=='(')) return '<'; else if(((a=='+'||a=='-'||a=='*'||a=='/'||a==')')&&(b=='+'||b=='-'||b==')'||b=='='))||((a=='*'||a=='/')&&(b=='*'||b=='/'))) return '>' ; else return '@'; Precede(char a,char b){ if(((a=='(')&&(b==')')) ||((a=='#')&&(b=='='))) return '='; else if(((a=='('||a=='#')&&(b=='+'||b=='-'||b=='*'||b=='/'||b=='(')) ||((a=='+'||a=='-')&&(b=='*'||b=='/'||b=='(')) ||((a=='*'||a=='/')&&b=='(')) return '<'; else if(((a=='+'||a=='-'||a=='*'||a=='/'||a==')')&&(b=='+'||b=='-'||b==')'||b=='='))||((a=='*'||a=='/')&&(b=='*'||b=='/'))) return '>' ; else return '@';
} } int Operate(int a,char theta,int b){ int t; switch(theta){ case '+': t=(a+b);break; case '-': t=(b-a);break; case '*': t=(a*b);break; case '/': t=(b/a);break; }; return t; }
int In(char c){ if(c>='0'&&c<='9') return 1; else return 0; }
int Operate(int a,char theta,int b){ int t; switch(theta){ case '+': t=(a+b);break; case '-': t=(b-a);break; case '*': t=(a*b);break; case '/': t=(b/a);break; }; return t; }
int In(char c){ if(c>='0'&&c<='9') return 1; else return 0; }
|