
4сем / tp_lab3_Zhovtyak
.docxГУАП
КАФЕДРА № 41
ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
доц., канд. техн. наук |
|
|
|
А. В. Аграновский |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №3 |
ЦИКЛИЧЕСКИЕ КОНСТРУКЦИИ |
по курсу: ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ |
|
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. № |
4016 |
|
|
|
Жовтяк М.О. |
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург 2022
Вариант 15 (14-ой вариант 2-ого задания)
Постановка задачи
Задана функция 𝑓(𝑥).
fрез(x)
=
+ (x2
+ 5x)
Конечная цель программы – вычисление fрез(x), где x – параметр, получаемый в промежутке от -4 до 7 с шагом 0.5. Все результаты вычисления функции должны быть записаны в массиве.
Входные данные отсутствуют. Массив на выходе может хранить целые числа, числа с плавающей точкой.
Дополнительные требования к программе не были выявлены.
Математическая модель
Согласно
заданию, в массив постепенно должны
быть записаны результаты значения
функции. Но необходимо предусмотреть
случаи, где вычисление функции может
быть невозможным. Единственным
препятствием может быть знаменатель
дроби
,
но так как он всегда положительный, то
никаких препятствий для вычисления не
будет создано.
Описание разработанной программы
Основная часть программы оформлена в отдельной функции LAB3_VAR15. В этой функции записан цикл с определенным диапазоном (-4; 7) и шагом переменной (0.5) x. Так же объявляется переменная типа list, которая будет хранить результаты вычислений функций. Внутри функции вычисляется значение функции с вложенной переменной x, которое для удобства округляется до 2 знаков после запятой. Затем значение добавляется в массив, после шаг x увеличивается и так до тех пор, пока x не станет равен максимальному значению. Таблица 1 демонстрирует список используемых переменных.
Таблица 1 - Описание переменных
Имя переменной |
Тип переменной |
Назначение переменной |
x |
Float |
Параметр заданной формулы |
f |
Float |
Вычисление значения формулы, данной по заданию |
mass |
List |
Массив, хранящий значения вычислений формулы |
Описание алгоритма работы программы представлено в виде блок схемы на рисунке 1.
Рисунок 1 – Блок-схема алгоритма
Вычислительная сложность реализованного алгоритма в нотации O() является константной (O(1)). Это значит, что вычислительная сложность алгоритма не зависит от входных данных и независимо от полученного на входе корректного значения время работы программы не изменится.
Код программы:
# тестовная функция def TEST_LAB3_VAR15(): pass #основная функция def LAB3_VAR15(): x = -4 mass = [] #основной цикл while x <= 7: #вычисление формулы f = round(((x - 4)/(3 * x**2 + 1) + x ** 2 + 5 * x), 2) mass.append(f) x += 0.5 print(mass) #TEST_LAB3_VAR15() LAB3_VAR15()
Описание тестового набора
Так как программа не принимает на вход никаких данных, то для программы достаточно одного тестового случая. Таблица 2 является описанием тестового случая.
Таблица 2 - Описание тестового набора
Описание тестового случая |
Входные данные |
Ожидаемые результаты |
Результат теста |
Вычисление функции |
- |
[-4.16, -5.45, -6.25, -6.58, -6.46, -5.96, -5.25, -4.82, -4.0, 0.75, 5.25, 9.43, 13.85, 18.67, 23.96, 29.74, 36.0, 42.76, 50.01, 57.77, 66.02, 74.77, 84.02] |
Пройден |
Листинг тестовых сценариев:
# тестовная функция def TEST_LAB3_VAR15(): if LAB3_VAR15() == [-4.16, -5.45, -6.25, -6.58, -6.46, -5.96, -5.25, -4.82, -4.0, 0.75, 5.25, 9.43, 13.85, 18.67, 23.96, 29.74, 36.0, 42.76, 50.01, 57.77, 66.02, 74.77, 84.02]: print("Тест пройден") else: print("Тест не пройден")
Результат работы тестов до написания основной программы представлен на рисунке 2. После написания работы программы на рисунке 3.
Рисунок 2 – Работа теста, до написания основного кода
Рисунок 3 – Работа теста, после написания основного кода
Пример работы программы на рисунке 4.
Рисунок 4 – Работа программы
Выводы:
В процессе выполнения данной лабораторной работы были изучены и выполнены следующие этапы:
1) Постановка задачи. Разделил программы на чёткие этапы для более удобного просмотра кода и работы кода с помощью простых действий. Ввёл ограничения на ввод данных и рассчитал возможные завершения программы.
2) Математическая модель. Написал код с помощью математических действий, разделив задачу на простые математические действия в цикле.
3) Описание разработанной программы. По коду программы построил блочную модель программы. Выбрал наиболее подходящий способ написания кода с помощью циклов.
Благодаря данной работе закрепил свои навыки программирования, построения алгоритма решения задачи, разбив ее на несколько этапов, укрепил навыки работы с условными конструкциями. Также закрепил применение метода Test-Driven-Development.