funguje
This commit is contained in:
parent
05c2ddb8e9
commit
4dbba7d790
118
du3/program.c
118
du3/program.c
@ -0,0 +1,118 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
#include<assert.h>
|
||||||
|
#include<string.h>
|
||||||
|
#include<stdlib.h>
|
||||||
|
|
||||||
|
#define STACK_SIZE 10
|
||||||
|
|
||||||
|
struct stack
|
||||||
|
{
|
||||||
|
float values[STACK_SIZE];
|
||||||
|
int size;
|
||||||
|
};
|
||||||
|
|
||||||
|
void push_stack(struct stack* mystack, float value)
|
||||||
|
{
|
||||||
|
assert(mystack->size<STACK_SIZE);
|
||||||
|
mystack->values[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;i<mystack->size;i++)
|
||||||
|
{
|
||||||
|
printf("%f",mystack->values[i]);
|
||||||
|
if (i<mystack->size-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;
|
||||||
|
}
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user