Скачиваний:
0
Добавлен:
22.09.2026
Размер:
548 Кб
Скачать
☆

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»

(СПбГУТ)

Факультет информационных технологий и программной инженерии (ИТПИ)

Кафедра программной инженерии и вычислительной техники (ПИиВТ)

Дисциплина: «Алгоритмические основы программной инженерии»

Лабораторная работа №1.

Выполнил: Студент группы ИКПИ-41

Летягина Е. А.

Подпись

Принял: Доцент кафедры ПИиВТ

Ерофеев Сергей Анатольевич

Подпись

«_____»________ 2024

г. Санкт-Петербург

2025 г.

  1. Постановка задачи

Разработать программу решения кубического уравнения вида ax3+bx2+cx+d = 0. Если а = 0, b = 0, с ≠ 0, то решение линейного уравнения вида cx + d = 0 с помощью теоремы Виета. Если a = 0, b ≠ 0, то решение квадратного уравнения вида bx2 + cx + d = 0 методом Дискриминанта. Если a ≠ 0, то решение исходного кубического уравнения методом Хорд.

  1. Техническое задание

1. Маршруты выполнения программы

  1. Старт программы: запрос ввода коэффициентов уравнения: a, b, c, d.

  2. Если а = 0, b = 0, с = 0, d = 0, то уравнение вида 0 = 0. Вывод: «Бесконечное количество решений.»

  3. Если а = 0, b = 0, с = 0, d ≠ 0, то уравнение вида d = 0. Вывод: «Нет решений.»

  4. Если а = 0, b = 0, с ≠ 0, то уравнение вида cx + d = 0 решается с помощью теоремы Виета: . Вывод x.

  5. Если a = 0, b ≠ 0, то вызывается функция, которая решает уравнение вида ax2 + bx + c = 0 методом Дискриминанта:

  1. Вычисляем значение дискриминанта .

  2. Если Discr > 0, то , . Вывод корней.

  3. Если Discr = 0, то . Вывод корня.

  4. Если Discr < 0, то в уравнении нет действительных корней.

  1. Если a ≠ 0, то решение методом Хорд:

    1. Ввод начальных параметров (xprev, xcur, e, maxit).

    2. Вводим счётчик “counter” для подсчёта количества итераций.

    3. Проверка на деление на ноль: если , то продолжаем решение, в противном случае решение методом хорд невозможно.

    4. Сохраняем текущее значение Икс:

    5. Вычисляем новое приближение: .

    6. Обновляем предыдущее значение Икс:

    7. Добавляем к счётчику counter единицу: counter = counter + 1.

    8. Проверяем, не превышено ли максимальное количество итераций: . Если превышено, то завершаем программу, иначе продолжаем.

    9. Проверка не превышает ли значение заданной пользователем точности. Пока не превышает повторяем цикл с п. 3. Если превышает, то выход из цикла.

    10. Если вышли из цикла, то xcur является корнем уравнения. Выводим xcur.

    11. Вызов функции, которая понижает степень кубического уравнения по схеме Горнера.

    12. Вызов функции, которая решает полученное квадратное уравнение через дискриминант (см. п. 5).

  1. Конец программы.

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. Блок-схемы

Основная программаРисунок 1196811758

Метод Дискриминанта

Функция

Метод Хорнера

  1. Код программы

  1. Вывод программы

1. Бесконечное количество решений

Уравнение:

Вывод:

2. Нет решений

Уравнение:

Вывод:

3. Линейное уравнение

Уравнение: 

Вывод:

4. Квадратное уравнение (2 корня)

Уравнение: 

Вывод:

5. Квадратное уравнение (1 корень)

Уравнение:

Вывод:

6. Квадратное уравнение (нет действительных корней при дискриминанте меньше 0)

Уравнение:

Вывод:

7. Кубическое уравнение (метод хорд + схема Горнера)

Уравнение:

Вывод:

8. Ошибка деления на ноль в методе хорд

Уравнение: 

Вывод:

9. Превышение числа итераций

Уравнение:

Вывод:

10. Кубическое уравнение с комплексными корнями

Уравнение:

Вывод:

  1. Выводы

Поставленная задача по разработке программы для решения кубического уравнения вида ax3+bx2+cx+d = 0 была успешно выполнена. Программа была реализована на языке Си в среде разработки Visual Studio.

В ходе работы были проведены тесты для различных случаев:

  • Уравнения с бесконечным количеством решений и отсутствием решений.

  • Линейные уравнения, решаемые с помощью теоремы Виета.

  • Квадратные уравнения, решаемые методом дискриминанта (включая случаи с одним, двумя и отсутствием действительных корней).

  • Кубические уравнения, решаемые методом Хорд с последующим понижением степени через схему Горнера.

Результаты тестирования подтвердили корректность работы программы: все ожидаемые выводы совпали с фактическими результатами. Программа корректно обрабатывает особые случаи, такие как деление на ноль и превышение максимального числа итераций, а также выводит сообщения об ошибках в соответствующих ситуациях.

Таким образом, программа соответствует техническому заданию, демонстрирует высокую надёжность и точность вычислений, а также удобство использования для решения уравнений различной степени сложности.

5

Соседние файлы в папке Лабы