Простой способ решить эту проблему - получить большое значение cout << var1 << ' + ' << var2 << ' = ' << answer << endl;
для каждого вида вычислений, который может выполнять ваш калькулятор.Это может занять довольно много времени, когда вы делаете площадь поверхности конуса или чего-то еще, и есть риск, что формула, которую вы говорите, что вы оцениваете, и формула, которую вы на самом деле оцениваете, могут не совпадать, если вы допустите ошибку.
Правильный способ решения этой проблемы, вероятно, заключается в использовании системы дерева выражений .У вас будет класс (ExpressionNode
), представляющий экземпляр операции, такой как сложение, деление или возведение в степень, или просто буквальное число, например 5 или Pi.У этого класса будет метод для вычисления выражения, которое он представляет, и для возврата double
, при необходимости сначала вычисляя левый и правый аргументы операции.У него также будет метод печать выражения, которое оно представляет, либо печать числа, если оно является просто числом, либо печать левого аргумента '+', а затем правого аргумента, если он представляетсложение и т. д.
Тогда ваши различные функции калькулятора будут принимать входные данные и возвращать не окончательные вычисленные значения, а деревья выражений, представляющие, как вычислять эти значения, а основной цикл выводит выражение, которое вычисляетответьте, а затем оцените его и напечатайте результат.
Если вы не хотите реализовывать все это самостоятельно, библиотека Boost предоставляет библиотеку "Proto" , которая дает вам деревья выражений испособы их оценки, но его документация предполагает, что вы знаете кое-что о том, как работает синтаксический анализ выражений в деревьях выражений, что такое «терминалы» и так далее.Но в их уроке есть пример калькулятора.