ООП / ООП / oop-ekz-tasks / Калькулятор 6 семинар
.docСеминар 4 «Калькулятор с использованием STL». Создайте список STL, хранящий в каждом элементе по операнду (целое число) и по оператору (+ – * /). Создайте алгоритм вычисления результата. Реализуйте вычисления с учетом приоритета, заданного скобками. Исходное выражение задается строкой (например: “5+6*7/3-9=”), результат – целое число.
#include <stdio.h>
//------------------------------------------------------------------------------
char* level1 (char*, double&); // Обработка сложений и вычитаний
char* level2 (char*, double&); // Обработка умножений и делений
char* level3 (char*, double&); // Обработка унарных минусов и скобок
char* level4 (char*, double&); // Обработка неотрицательных чисел
//------------------------------------------------------------------------------
char* level1 (char* str, double& res)
{
double arg;
str = level2(str, res);
switch (*str)
{
case '+':
str = level1(str+1, arg);
res += arg;
break;
case '-':
str = level1(str+1, arg);
res -= arg;
break;
}
return str;
}
//------------------------------------------------------------------------------
char* level2 (char* str, double& res)
{
double arg;
str = level3(str, res);
switch (*str)
{
case '*':
str = level2(str+1, arg);
res *= arg;
break;
case '/':
str = level2(str+1, arg);
res /= arg;
break;
}
return str;
}
//------------------------------------------------------------------------------
char* level3 (char* str, double& res)
{
switch (*str)
{
case '(':
str = level1(str+1, res);
++str;
break;
case '-':
str = level4(str+1, res);
res = -res;
break;
default:
str = level4(str, res);
}
return str;
}
//------------------------------------------------------------------------------
char* level4 (char* str, double& res)
{
res = 0;
while (*str >= '0' && *str <= '9')
{
res = 10 * res + (*str - '0');
++str;
}
return str;
}
//------------------------------------------------------------------------------
void main ()
{
char str[80];
double res;
while (1)
{
printf(">> ");
gets(str);
if (str[0] == 0)
break;
level1(str, res);
printf(" ans = %f\n\n", res);
}
}
//------------------------------------------------------------------------------