Пусть задана строка, содержащая простое арифметическое выражение, в котором могут встречаться числа (в том числе с плавающей точкой, десятичный разделитель – символ точка «.»), операторы «+», «-», «», «/», «^» («^» – оператор возведение в степень) и скобки «(», «)». Строка может содержать любое количество пробельных символов и символов табуляции. Необходимо написать класс Calculator, который предоставляет открытый метод double calc(const char str); производящий расчет выражения, переданного в виде строки через аргумент str и возвращающий результат типа double. В случае возникновения ошибок при расчете выражения или обработки строки, метод calc должен возбуждать исключение типа std::runtime_error. В программе допускается использование потоков std::cin, std::cout, класса std::runtime_error из библиотек и , функций malloc, realloc, calloc, free, memcpy, pow из библиотек , и . Использование любых других функций, классов и библиотек запрещено (включая функцию atoi и её аналоги – функции преобразования строки в число необходимо разработать самостоятельно).
#include #include #include #include #include
using namespace std;
class Calculator { public: double calc(const char* str); };
Примеры выражений (строк на входе метода calc и возвращаемых методом значений):
Входная строка Результат “10.1” 10.1 “(10.1)” 10.1 “2 ^ 2. ^ 3.0” 256.0 “13.0 / 2.” 6.5 “((4.0 – 1.) / (2.0 – 1))” 3.0