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