Поддерживаются базовые арифметические операции и ввод десятичных чисел. Операции производятся над значением из единственного регистра (он же - приёмник результата) и, если операция бинарная, вторым операндом, вводимым после оператора.
Размер вводимых чисел ограничен 10 десятичными цифрами.
- сложение
+ - вычитание
- - умножение
* - деление
/ - остаток от деления
% - инвертирование знака
_ - возведение в степень
^ - квадратный корень
SQRT
Пользовательский ввод построчно читается из стандартного ввода, в каждой строке ожидается одна операция:
op [arg]
Результат каждой операции выводится в стандартный вывод, сообщения об ошибках - в стандартный вывод ошибок.
Требуется расширить реализацию калькулятора двумя новыми операциями: факториал и логарифм по произвольному основанию.
Факториал - унарная операция над значением регистра калькулятора. Если в регистре находится что-то отличное от неотрицательного целого числа, нужно выдать ошибку.
Логарифм - бинарная операция, основание указывается в качестве аргумента, а значение регистра используется как число от которого берётся логарифм. Оба числа должны быть положительными, иначе нужно выдать ошибку.
Поменять код так, чтобы программный интерфейс не поменялся - реализация должна предоставлять в качестве интерфейса функцию double process_line(double, const std::string &).
!- факториалLOG 10- десятичный логарифмLOG 0.1- логарифм по основанию0.1
Как и в прочих случаях, при обнаружении ошибки нужно записать понятное сообщение в std::cerr и не менять значение регистра калькулятора.
Формат сообщения об ошибке для факториала:
Bad argument for factorial: xxxx
Формат сообщения об ошибке для логарифма (значение регистра не подходит):
Bad argument for logarithm: xxxx
или (значение базы не подходит):
Bad base for logarithm: yy