From 5e57d4a19b908d9e22f8f49955c8d69e978ccb76 Mon Sep 17 00:00:00 2001 From: Steven Schronk Date: Sun, 20 Dec 2009 16:15:26 -0600 Subject: [PATCH] Adv. Calc now supports Trig functions (sin, cos, tan), powers and square roots, and random number generation. --- calc_adv.c | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/calc_adv.c b/calc_adv.c index c666467..c94d76a 100644 --- a/calc_adv.c +++ b/calc_adv.c @@ -1,6 +1,7 @@ #include #include #include +#include #define MAXOP 100 #define NUMBER '0' @@ -34,19 +35,13 @@ int main() case NUMBER: push(atof(s)); break; - case 'D': - case 'd': - // printf("Print Top of Stack\n"); + case '#': dup_stack(); break; - case 'S': - case 's': - // printf("Print Top of Stack\n"); + case '?': print_stack(); break; - case 'R': - case 'r': - // printf("Reverse Stack\n"); + case '~': reverse(); break; case '+': @@ -75,6 +70,24 @@ int main() printf("error: zero divisor\n"); } break; + case 'c': + push(cos(pop())); + break; + case 'p': + push((int)pow(pop(),pop())); + break; + case 't': + push(tan(pop())); + break; + case 'q': // square root + push(sqrt(pop())); + break; + case 'r': + push(rand()); + break; + case 's': + push(sin(pop())); + break; case '\n': printf("\t%.8g\n", pop()); break; @@ -130,8 +143,8 @@ void print_stack() { if(sp > 0) printf("%f\t%f\n", val[sp], val[sp-1]); - else - printf("Stack is empty!\n"); + // else + // printf("Stack is empty!\n"); } /* get next operator or numberic operand */ -- 2.11.4.GIT