c_programming_language/exercices/functions/par_4_3.c
2026-02-08 20:16:38 +03:00

65 lines
1.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <stdlib.h>
#define MAXOP 100 // Максимальный размер операдна (цифры) или оператора
#define NUMBER '0' // Признак числа
int getop(char[]);
void push(double);
double pop(void);
int main() {
int type;
double pop2;
char s[MAXOP];
while ((type = getop(s)) != EOF) {
switch (type) {
case NUMBER:
push(atof(s));
break;
case '+':
push(pop() + pop());
break;
case '*':
push(pop() * pop());
break;
case '-':
/*
* Тут сначала извлекаем верхний операнд, из которого надо
* вычитать. В отличии от `+`, `*` для `-` и `/` порядок операндов
* важен.
*
* ----------
* -
* 10
* 20
* ...
* ----------
*
* Чтобы сделать вычитание - надо из 20 вычесть 10 - получается
* излекам со стека 10, затем 20 и делаем вычитание
*/
pop2 = pop();
push(pop() - pop2);
break;
case '/':
/*
* Тут примерно то-же самое, только еще надо сделать проверку
* на ноль
*/
pop2 = pop();
if (pop2 != 0.0)
push(pop() / pop2);
else
printf("Error: Division by zero\n");
break;
case '\n':
printf("\t%.g\n", pop());
break;
default:
printf("Error: Unknown operation %s\n", s);
break;
}
}
}