Загрузка данных


#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.