Домашнее задание №6
Сборка многомодульных программ. Вычисление корней уравнений и определенных интегралов
Постановка задачи
С заданной точностью ε вычислить площадь плоской фигуры, ограниченной тремя кривыми.
Вариант задания
-
Уравнения кривых: вариант 2.
- $f_1=3(\frac{0.5}{x+1}+1)$
- $f_2=2.5x-9.5$
- $f_3=\frac{5}{x},\ x > 0$
-
Методы приближенного решения уравнений: метод хорд(секущих).
-
Квадратурные формулы: формула трапеций.
Зависимости
NixOS
nix-shell --pure
Fedora
sudo dnf install gcc nasm make glibc-devel.i686 libgcc.i686
Debian(Ubuntu)
sudo apt install -y nasm binutils gcc gdb make gcc-multilib libc6-dev-i386
Arch
Для упрощения установки зависимостей советуется использовать yay или paru.
paru -S nasm binutils gcc gdb make lib32-gcc-libs lib32-glib
Запуск программы:
Поскольку разработка программы производилась под Apple Silicon(arm) без поддержки 32-битной архитектуры(поддержка 32-битных программ была удалена еще в macos mojave 12 сентября 2018 года) для разработки программы был создан docker container.
Сборка (Windows(Powershell), Linux, MacOS High Siera и ниже):
make all
Сбока в docker (Windows(Powershell), Linux, MacOS Mojave и выше):
cd docker-related
docker compose build
docker compose run integral-docker
make clean
make && ./build/integral
Запуск программы
Исполняемый файл после сборки находится в папке /build
Запуск решения поставленной задачи
./integral
Справка по программе
Параметры для вызова справки: -h, --help
Все поддерживаемые флаги запуска программы можно вызвать с помощью этого
Текст справки:
-h, --help - вывести это сообщение -r, --root - напечатать абсциссы точек пересечения кривых -i, --iterations - напечатать число итераций, потребовавшихся на приближенное решение уравнений при поиске точек пересечения -R, --test-root F1:F2:A:B:E:R, где F1, F2 — номера используемых функций, A, B, E — значения параметров a, b, eps1 функции root, R - правильный ответ - протестировать функцию root -I, --test-integral F:A:B:E:R, где F — номер используемой функции, A, B, E — значения параметров a, b, eps2 функции integral, R — правильный ответ - протестировать функцию integral