#include "quadrature.h"
#include <cmath>
#include <iostream>
#include <memory>
#include <string>
int main() {
using F = decltype(cos);
std::string input;
std::cin >> input;
std::unique_ptr<IntegrationMethod<F>> method;
if (input == "rectangle")
method.reset(new RectangleRule<F>);
else
method.reset(new TrapezoidalRule<F>);
double x, y;
std::cin >> x >> y;
int n;
std::cin >> n;
std::cout << method->Integrate(cos, x, y, n) << "\n";
std::cout << method->Integrate(sin, x, y, n) << "\n";
}
F. Выражение ПИ С++ 23
Не решена
Ограничение времени 1 секунда
Ограничение памяти 64 Мб
Ввод стандартный ввод или input.txt
Вывод стандартный вывод или output.txt
Представим арифметическое выражение, содержащее числовые константы и операции сложения и умножения, в виде дерева. В листьях этого дерева будут находиться константы, а в промежуточных узлах — операции. Вам дан абстрактный базовый класс Expression, представляющий из себя такое дерево. Код доступен в общем архиве условий задач справа сверху. Вам надо унаследовать от него классы-наследники для констант, операции сложения и операции умножения так, чтобы приведённый в функции main код (и аналогичные примеры) заработали.
Функции базового класса Evaluate и ToString должны переопределяться в классах-наследниках. Evaluate должна вычислять выражение, а ToString возвращать его текстовую запись (как в примере). При умножении на сумму запись суммы должна браться в скобки. Никаких особых специальных правил оформления нулевых или единичных множителей писать не нужно.
Примечания
Кроме классов-наследников, Вам надо будет определить функции Const, Sum и Product, которые используются в функции main в примере. Лишних копирований дерева быть не должно: мы будем проверять, что создано ровно столько экземпляров классов, сколько требуется для построения дерева. Разумеется, утечек памяти тоже не должно быть.
Для преобразования чисел в строки используете функцию std::to_string.