- •Федеральное государственное бюджетное образовательное учреждение высшего образования "Санкт-Петербургский государственный университет телекоммуникаций им. Проф. М.А. Бонч-Бруевича"
- •По лабораторной работе №2
- •Постановка задачи
- •Определённый тип уравнения
- •1. Задание структуры данных и предикатов
- •2. Загрузка входных данных
- •3. Определение типа уравнения и ветвление логики
- •4. Вычисление корней уравнения
- •5. Получение результатов
- •Перечень предикатов (функций)
- •1. Предикаты ввода-вывода и управления
- •2. Предикаты определения типа уравнения и выбора метода
- •Блок-схемы
- •Проверка функционала программы
- •Код программы
2. Предикаты определения типа уравнения и выбора метода
• equation_type(A,B,C,D,K,Type) -
определяет тип уравнения
• solve_equation(A,B,C,D,K) -
запускает нужный
алгоритм
• handle_quartic(A,B,C,D,K) -
решение уравнения 4-й
степени
• handle_cubic(B,C,D,K) -
решение кубического
уравнения
• handle_quadratic(C,D,K) -
решение квадратного
уравнения
• handle_linear(D,K) -
решение линейного уравнения
• handle_no_solution(K) -
случай
при
нулевых коэффициентах
• handle_any_number -
случай
3. Предикаты для метода хорд (поиск одного корня 4-й степени, a ≠ 0)
• secant_method(A,B,C,D,K, X0, X1, Root) - реализация метода хорд • f(A,B,C,D,K,X,Value) - вычисление значения полинома в точке X • close_enough(X1,X2) - проверка точности • choose_initial_points(A,B,C,D,K,X0,X1) - выбор стартовых приближений
4. Предикаты схемы Горнера (понижение степени)
• horner_division(A,B,C,D,K, Root, B1,C1,D1,K1) - деление на (x - Root) • solve_reduced_cubic(B1,C1,D1,K1) - поиск оставшихся трёх корней • evaluate_polynomial(List, X, Value) - вспомогательная функция
5. Предикаты для решения кубического уравнения (схема Кардано)
• cardano(B,C,D,K,
X1,X2,X3) -
основной алгоритм Кардано
• reduce_cubic(B,C,D,K,
P,Q) -
приведение к виду
• discriminant(P,Q,Dscr) -
вычисление
дискриминанта
• cardano_three_real(P,Q,X1,X2,X3) -
обработка случая D <
0
• cardano_one_real(P,Q,X1,X2,X3) -
обработка случая D ≥ 0
• cube_root(Value,
Result) -
корректный кубический корень
6. Предикаты для решения квадратного уравнения
• solve_quadratic(C,D,K,
X1,X2) -
решение квадратного
уравнения
• discriminant_quadratic(C,D,K,Disc) -
вычисление
• safe_sqrt(Value,
Result) -
безопасное извлечение корня
7. Предикаты для решения линейного уравнения
• solve_linear(D,K, X) - вычисляет
8. Вспомогательные предикаты
• is_zero(Value) - проверка числа на ноль • not_zero(Value) - отрицательная проверка • round_value(Value, Result) - округление результата • abs_value(X,Abs) - модуль числа
Блок-схемы
Рисунок 1. Блок схема приложения.
Рисунок 2. Блок схема решения линейного уравнения.
Рисунок 3. Блок схема решения квадратного уравнения.
Рисунок 4. Блок схема метода Кардано.
Рисунок 5. Метод Хорд
Рисунок 6. Схема Горнера.
Проверка функционала программы
Для проверки работоспособности программы были выполнены тестовые запросы к базе знаний в среде Prolog. Результаты выполнения запросов приведены ниже в виде скриншотов, подтверждающих корректность работы предикатов и правил.
При коэффициентах 0,0,0,0,0
Рисунок 7. Результат программы при 0,0,0,0,0
При коэффициентах 0,0,0,0,0.5
Рисунок 8. Результат программы при 0,0,0,0,5
При коэффициентах 0,0,0,2.0,-4.0
Рисунок 9. Результат программы при 0,0,0,2.0,-4.0
При коэффициентах 0,0,1,-5.0,6.0
Рисунок 10. Результат программы при 0,0,1.0,-5.0,6.0
При коэффициентах 0,0,1.0,4.0,5.0
Рисунок 11. Результат программы при 0,0,1.0,4.0,5.0
При коэффициентах 0,1.0,-6.0,11.0,-6.0
Рисунок 12. Результат программы при 0,1.0,-6.0,11.0,-6.0
При коэффициентах 0,1.0,-3.0,3.0,-1.0
Рисунок 13. Результат программы при 0,1.0,-3.0,3.0,-1.0
При коэффициентах 0,1.0,0,1.0,0
Рисунок 14. Результат программы при 0,1.0,0,1.0,0
При коэффициентах 0,1.0,0,1.0,0
Рисунок 15. Результат программы при 0,1.0,-3.0,3.0,-1.0
При коэффициентах 1.0,-10.0,35.0,-50.0,24.0
Рисунок 15. Результат программы при 1.0,-10.0,35.0,-50.0,24.0
