diff --git a/c_programm b/c_programm new file mode 100644 index 0000000..0f60470 --- /dev/null +++ b/c_programm @@ -0,0 +1,204 @@ +#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; +} \ No newline at end of file