Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ООП / ООП / oop-ekz-tasks / Калькулятор 6 семинар

.doc
Скачиваний:
12
Добавлен:
18.02.2017
Размер:
32.77 Кб
Скачать

Семинар 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);

}

}

//------------------------------------------------------------------------------

Соседние файлы в папке oop-ekz-tasks