diff --git a/du3/program.c b/du3/program.c index e69de29..7b68ec5 100644 --- a/du3/program.c +++ b/du3/program.c @@ -0,0 +1,118 @@ +#include +#include +#include +#include + +#define STACK_SIZE 10 + +struct stack +{ + float values[STACK_SIZE]; + int size; +}; + +void push_stack(struct stack* mystack, float value) +{ + assert(mystack->sizevalues[mystack->size]=value; + mystack->size+=1; +} + +int switch_operators(const char input[]) +{ + switch (input[0]) + { + case '+': + return 0; + break; + case '-': + return 0; + break; + case '*': + return 0; + break; + case '/': + return 0; + break; + default: + return 1; + break; + } +} + +float pop_stack(struct stack* mystack,const char input[]) +{ + assert(mystack->size>1); + float val1=mystack->values[mystack->size-2]; + float val2=mystack->values[mystack->size-1]; + switch (input[0]) + { + case '+': + mystack->size-=2; + return val1+val2; + break; + case '-': + mystack->size-=2; + return val1-val2; + break; + case '*': + mystack->size-=2; + return val1*val2; + break; + case '/': + mystack->size-=2; + return val1/val2; + break; + default: + break; + } +} + +int count_stack(struct stack* stack) +{ + +} + +void print_stack(struct stack* mystack) +{ + for(int i=0;isize;i++) + { + printf("%f",mystack->values[i]); + if (isize-1) + { + printf(" "); + } + } + printf("\n"); +} + + +int main() +{ + struct stack mystack; + memset(&mystack,0,sizeof(struct stack)); + char input[1000]; + while (fgets(input,sizeof(input),stdin)!=NULL) + { + int flag=switch_operators(input); + input[strcspn(input,"\n")]=0; + if (strlen(input)==0) + { + continue; + } + if (flag==0) + { + float op_num=pop_stack(&mystack,input); + push_stack(&mystack,op_num); + } + else + { + char* ptr; + float num=strtof(input,&ptr); + push_stack(&mystack,num); + } + print_stack(&mystack); + } + return 0; +} +