diff --git a/cv3/program.c b/cv3/program.c index 9666c20..578b096 100644 --- a/cv3/program.c +++ b/cv3/program.c @@ -1 +1,88 @@ -//////@@@@@@ \ No newline at end of file +#include +#include +#include + +#define STACK_SIZE 500 + +struct Stack +{ + float values[STACK_SIZE]; + int size; +}; + +void push_stack(struct Stack* stack, float value); +float pop_stack(struct Stack* stack); +int count_stack(struct Stack* stack); + + +void push_stack(struct Stack* stack, float value) +{ + assert(stack->size < STACK_SIZE); + stack->values[stack->size] = value; + stack->size += 1; +} +float pop_stack(struct Stack* stack) +{ + assert(stack->size > 0); + float value = stack->values[stack->size-1]; + stack->size -= 1; + return value; +} +int count_stack(struct Stack* stack) +{ + +} + +void print_stack(struct Stack* stack) +{ + for (int i=0; isize; i++) + { + printf("%f/", stack->values[i]); + } +} + + +int main() +{ + struct Stack mystack; + mystack.size=0; + //memset(&mystack,0,sizeof(struct Stack)); + + + char buf[505]; + + do + { + char* p=fgets(buf, 299, stdin); + + if(!p) + { + break; + } + else + { + char c=buf[0]; + float op1, op2, rez; + if(c=='+'||c=='-'||c=='/'||c=='*') // -45 + { + op2=pop_stack(&mystack); + op1=pop_stack(&mystack); + switch(c) + { + case '+': rez=op1+op2; break; + case '-': rez=op1-op2; break; + case '/': rez=op1/op2; break; + case '*': rez=op1*op2; break; + } + push_stack(&mystack, rez); + printf(" %.2f\n", rez); + + } + else + push_stack(&mystack, atof(buf)); + } + + }while(1); + + return 0; +}