home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
vol_100
/
164_01
/
hp.c
< prev
next >
Wrap
Text File
|
1984-04-08
|
2KB
|
90 lines
#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