From b2e4931c1576d86740f5aa2e4eab6fb619fe9cef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=BE=D0=BB=D0=B8=D0=BD=D0=B0=20=D0=A5=D1=80=D0=BE?= =?UTF-8?q?=D0=BC=D0=BE=D0=B2=D0=B0?= <stud126184@vyatsu.ru> Date: Sat, 13 May 2023 12:27:49 +0000 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BB(=D0=B0)=20?= =?UTF-8?q?'c=5Fprogramm'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- c_programm | 204 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 204 insertions(+) create mode 100644 c_programm 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 <stdio.h> +#include <stdlib.h> + +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