#include #include enum calculator_state { NUMBER_FIRST, NUMBER_SECOND, RESULT }; enum calculator_op { NO_OP, ADD, SUB, DIV, MUL }; struct calculator { // 1 число int num1; // 2 число int num2; // 3 операция enum calculator_op operation; // 4 результат double result; // 5 состояние атомата enum calculator_state state; }; // double calculate(char op, double num1, double num2) { // double result = 0; // switch (op) { // case '+': // result = num1 + num2; // break; // case '-': // result = num1 - num2; // break; // case '*': // result = num1 * num2; // break; // case '/': // result = num1 / num2; // break; // } // return result; // } int main() { struct calculator calc; calc.state = NUMBER_FIRST; calc.operation = NO_OP; calc.num1 = 0; calc.num2 = 0; calc.result = 0; char input; while (1) { scanf("%d", &input); switch (calc.state) { case NUMBER_FIRST: switch (input) { case 0: calc.num1 = (calc.num1 * 10) + 7; printf("%d",calc.num1); break; case 1: calc.num1 = (calc.num1 * 10) + 8; break; case 2: calc.num1 = (calc.num1 * 10) + 9; break; case 3: calc.operation = DIV; calc.state = NUMBER_SECOND; break; case 4: calc.num1 = (calc.num1 * 10) + 4; break; case 5: calc.num1 = (calc.num1 * 10) + 5; break; case 6: calc.num1 = (calc.num1 * 10) + 6; break; case 7: calc.operation = MUL; calc.state = NUMBER_SECOND; break; case 8: calc.num1 = (calc.num1 * 10) + 1; break; case 9: calc.num1 = (calc.num1 * 10) + 2; case 10: calc.num1 = (calc.num1 * 10) + 3; break; case 11: calc.operation = SUB; calc.state = NUMBER_SECOND; break; case 12: calc.num1 = 0; break; case 13: calc.state = NUMBER_FIRST; calc.operation = NO_OP; calc.num1 = 0; calc.num2 = 0; calc.result = 0; break; case 14: break; case 15: calc.operation = ADD; calc.state = NUMBER_SECOND; break; } case NUMBER_SECOND: switch (input) { case 0: calc.num2 = (calc.num2 * 10) + 7; break; case 1: calc.num2 = (calc.num2 * 10) + 8; break; case 2: calc.num2 = (calc.num2 * 10) + 9; break; case 3: break; case 4: calc.num2 = (calc.num2 * 10) + 4; break; case 5: calc.num2 = (calc.num2 * 10) + 5; break; case 6: calc.num2 = (calc.num2 * 10) + 6; break; case 7: break; case 8: calc.num2 = (calc.num2 * 10) + 1; break; case 9: calc.num2 = (calc.num2 * 10) + 2; case 10: calc.num2 = (calc.num2 * 10) + 3; break; case 11: break; case 12: calc.num2 = 0; break; case 13: calc.state = NUMBER_FIRST; calc.operation = NO_OP; calc.num1 = 0; calc.num2 = 0; calc.result = 0; break; case 14: calc.state = RESULT; break; case 15: break; } case RESULT: switch (calc.operation) { case ADD: calc.result = calc.num1 + calc.num2; break; case SUB: calc.result = calc.num1 - calc.num2; break; case MUL: calc.result = calc.num1 * calc.num2; break; case DIV: calc.result = calc.num1 / calc.num2; break; return calc.result; } } } return 0; }