home *** CD-ROM | disk | FTP | other *** search
- #include "stdio.h"
- #include "tran.c"
- double pop(),push();
- double stack[6];
- int sp=0;
- main()
- {
- double dp=1;
- int x,i,df=0;
- while ((x=getchar()) != 'q' && x != 'Q') {
- if (x>='0' && x<='9') {
- if (df) dp=10*dp;
- stack[0]=10*stack[0]+x-'0';
- }
- else if (x=='.') df=1;
- else {
- stack[0] = stack[0] / dp;
- dp=1;
- df=0;
- if (x==',' && stack[0] == 0) stack[0]=stack[sp];
- if (stack[0] == 0) stack[0]=pop();
- switch (x) {
- case ',' :
- case '\13' :
- break;
- case '+' :
- stack[0] = stack[0]+pop();
- break;
- case '-' :
- stack[0] = pop()-stack[0];
- break;
- case '*' :
- stack[0] = pop()*stack[0];
- break;
- case '/' :
- stack[0] = pop()/stack[0];
- break;
- case '^' :
- stack[0] = exp( stack[0] * log( pop(0) ) ) ;
- break;
- case 'I' :
- case 'i' :
- stack[0] = 1/stack[0];
- break;
- case 'N' :
- case 'n' :
- stack[0] = -stack[0];
- break;
- case 'r' :
- case 'R' :
- stack[0]=root(stack[0]);
- break;
- case 'l' :
- case 'L' :
- stack[0]=log(stack[0]);
- break;
- case 'e' :
- case 'E' :
- stack[0]=exp(stack[0]);
- break;
- }
- push (stack[0]);
- stack[0]=0;
- if (x != '\0') {
- for (i=1;i<=sp;i++) printf("%f ",stack[i]);
- printf ("%c\n",x);
- }
- }
- }
- }
-
- /* Pop floating from stack */
- double pop()
- {
- if (sp>0) return (stack[sp--]);
- else return (0);
- }
-
- /* Push floating onto stack */
- double push(x)
- double x;
- {
- if (sp<5) stack[++sp] = x;
- }
- turn (stack[sp--]);
- else return (0);
- }
-
- /* Push floating onto stack */
- double pus