Отчёты Ерофеев / Лабы / ОТЧЁТ
.docxФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»
(СПбГУТ)
Факультет информационных технологий и программной инженерии (ИТПИ)
Кафедра
программной инженерии и вычислительной
техники (ПИиВТ)
Дисциплина: «Алгоритмические основы программной инженерии»
Лабораторная работа №1.
Выполнил: Студент группы ИКПИ-41
Летягина Е. А.
Подпись
Принял: Доцент кафедры ПИиВТ
Ерофеев Сергей Анатольевич
Подпись
«_____»________ 2024
г. Санкт-Петербург
2025 г.
Постановка задачи
Разработать программу решения кубического уравнения вида ax3+bx2+cx+d = 0. Если а = 0, b = 0, с ≠ 0, то решение линейного уравнения вида cx + d = 0 с помощью теоремы Виета. Если a = 0, b ≠ 0, то решение квадратного уравнения вида bx2 + cx + d = 0 методом Дискриминанта. Если a ≠ 0, то решение исходного кубического уравнения методом Хорд.
Техническое задание
1. Маршруты выполнения программы
Старт программы: запрос ввода коэффициентов уравнения: a, b, c, d.
Если а = 0, b = 0, с = 0, d = 0, то уравнение вида 0 = 0. Вывод: «Бесконечное количество решений.»
Если а = 0, b = 0, с = 0, d ≠ 0, то уравнение вида d = 0. Вывод: «Нет решений.»
Если а = 0, b = 0, с ≠ 0, то уравнение вида cx + d = 0 решается с помощью теоремы Виета:
.
Вывод x.Если a = 0, b ≠ 0, то вызывается функция, которая решает уравнение вида ax2 + bx + c = 0 методом Дискриминанта:
Вычисляем значение дискриминанта
.
Если Discr > 0, то
,
.
Вывод корней.Если Discr = 0, то
.
Вывод корня.Если Discr < 0, то в уравнении нет действительных корней.
Если a ≠ 0, то решение методом Хорд:
Ввод начальных параметров (xprev, xcur, e, maxit).
Вводим счётчик “counter” для подсчёта количества итераций.
Проверка на деление на ноль: если
,
то продолжаем решение, в противном
случае решение методом хорд невозможно.
Сохраняем текущее значение Икс:
Вычисляем новое приближение:
.Обновляем предыдущее значение Икс:
Добавляем к счётчику counter единицу: counter = counter + 1.
Проверяем, не превышено ли максимальное количество итераций:
.
Если превышено, то завершаем программу,
иначе продолжаем.Проверка не превышает ли значение
заданной пользователем точности. Пока
не превышает повторяем цикл с п. 3. Если
превышает, то выход из цикла.Если вышли из цикла, то xcur является корнем уравнения. Выводим xcur.
Вызов функции, которая понижает степень кубического уравнения по схеме Горнера.
Вызов функции, которая решает полученное квадратное уравнение через дискриминант (см. п. 5).
Конец программы.
2. Описание переменных
Наименование |
Функциональное значение |
Тип |
Диапазон типа |
Ёмкость переменной |
a, b, c, d |
Коэффициенты уравнения: |
double |
- 1.79E+308 до 1.79E+308 |
64 бита |
Discr |
Дискриминант квадратного уравнения |
double |
+/- 1.7E-308 до 1.7E+308 |
64 бита |
x, x1, x2 |
Корни уравнений (линейного, квадратного) |
double |
+/- 1.7E-308 до 1.7E+308 |
64 бита |
xprev, xcur |
Границы интервала для метода хорд |
double |
+/- 1.7E-308 до 1.7E+308 |
64 бита |
e |
Точность (погрешность) метода хорд |
double |
+/- 1.7E-308 до 1.7E+308 |
64 бита |
maxit |
Максимальное число итераций метода хорд |
int |
1 до 2 147 483 647 |
4 байта |
count |
Счетчик итераций метода хорд |
int |
1 до 2 147 483 647 |
4 байта |
tmp |
Временная переменная для обмена значений в методе хорд |
double |
+/- 1.7E-308 до 1.7E+308 |
64 бита |
new_a, new_b, new_c |
Новые коэффициенты после схемы Горнера |
double |
+/- 1.7E-308 до 1.7E+308 |
64 бита |
Блок-схемы
Основная программа
Метод Дискриминанта
Функция
Метод Хорнера
Код программы
Вывод программы
1. Бесконечное количество решений
Уравнение:
Вывод:
2. Нет решений
Уравнение:
Вывод:
3. Линейное уравнение
Уравнение:
Вывод:
4. Квадратное уравнение (2 корня)
Уравнение:
Вывод:
5. Квадратное уравнение (1 корень)
Уравнение:
Вывод:
6. Квадратное уравнение (нет действительных корней при дискриминанте меньше 0)
Уравнение:
Вывод:
7. Кубическое уравнение (метод хорд + схема Горнера)
Уравнение:
Вывод:
8. Ошибка деления на ноль в методе хорд
Уравнение:
Вывод:
9. Превышение числа итераций
Уравнение:
Вывод:
10. Кубическое уравнение с комплексными корнями
Уравнение:
Вывод:
Выводы
Поставленная задача по разработке программы для решения кубического уравнения вида ax3+bx2+cx+d = 0 была успешно выполнена. Программа была реализована на языке Си в среде разработки Visual Studio.
В ходе работы были проведены тесты для различных случаев:
Уравнения с бесконечным количеством решений и отсутствием решений.
Линейные уравнения, решаемые с помощью теоремы Виета.
Квадратные уравнения, решаемые методом дискриминанта (включая случаи с одним, двумя и отсутствием действительных корней).
Кубические уравнения, решаемые методом Хорд с последующим понижением степени через схему Горнера.
Результаты тестирования подтвердили корректность работы программы: все ожидаемые выводы совпали с фактическими результатами. Программа корректно обрабатывает особые случаи, такие как деление на ноль и превышение максимального числа итераций, а также выводит сообщения об ошибках в соответствующих ситуациях.
Таким образом, программа соответствует техническому заданию, демонстрирует высокую надёжность и точность вычислений, а также удобство использования для решения уравнений различной степени сложности.
