terminal/c_programm

204 lines
4.9 KiB
Plaintext

#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;
}