Ejemplo n.º 1
0
int main()
{
    double op2;
    char buf[BUFSIZ];
    int result;
    infix2postfix(buffer);
    puts(buffer);

    while ((result = getop2(buf) != EOF)) {
        switch (result) {
            case '+':
                STACK_push(STACK_pop() + STACK_pop());
                break;

            case '*':
                STACK_push(STACK_pop() * STACK_pop());
                break;

            case '/':
                op2 = STACK_pop();

                if (op2 == 0) {
                    error("zero divisor\n");
                }

                STACK_push(STACK_pop() / op2);
                break;

            case '-':
                op2 = STACK_pop();
                STACK_push(STACK_pop() / op2);
                break;

            case '$':
                STACK_push(sqrt(STACK_pop()));
                break;

            case NUMBER:
                STACK_push(atof(buf));
                break;

            case '\n':
                printf("%f\n", STACK_pop());
                break;

            default:
                error("unrecognize character %c\n", result);
                break;
        }
    }

    return 0;
}
Ejemplo n.º 2
0
/* reverse Polish calculator */
int main(void) {

	int type;
	double op2;
	char s[MAXOP];
	
	while ((type = getop2(s)) != EOF) {
		switch (type) {
			case NUMBER:
				push(atof(s));
				break;
			case '+':
				push(pop() + pop());
				break;
			case '*':
				push(pop() * pop());
				break;
			case '-':
				op2 = pop();
				push(pop() - op2);
				break;
			case '/':
				op2 = pop();
				if (op2 != 0.0)
					push(pop() / op2);
				else 
					printf("error: zero divisor\n");	
				break;
			case '%':
				op2 = pop();
				if (op2 != 0.0)
					push(fmod(pop(),op2));	
				else
					printf("error: modulo by zero\n");
				break;
			case '\n':
				printf("\t%.8g\n", pop());
				break;
			default:
				printf("error: unknown command %s\n", s);
		}
	}
	return 0;
}