ГУАП
КАФЕДРА № 41
ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
доц., канд. техн. наук |
|
|
|
А. В. Аграновский |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №1 |
ЛИНЕЙНЫЕ АЛГОРИТМЫ |
по курсу: ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ |
|
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. № |
4016 |
|
|
|
Жовтяк М.О. |
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург 2022
Вариант 15
Постановка задачи
Вычислите 𝑓(𝑥, 𝜆) = 𝜆𝑒 −𝜆𝑥 .
Конечная цель программы – умножение числа 𝜆 на экспоненту в степени минус 𝜆 * x.
Ограничением на входные и выходные данные является соответствие полученного значения условию: целое число или число с плавающей точкой.
Дополнительные требования к программе не были выявлены.
Математическая модель
После ввода x и 𝜆 и проверки введенных значений производятся вычисления по заданной формуле 𝑓(𝑥, 𝜆) = 𝜆𝑒 –𝜆𝑥, где x – первый передаваемый параметр, а 𝜆 – второй параметр.
Полученное значение выводится на экран.
Описание разработанной программы
Основная часть программы оформлена в отдельной функции LAB1_VAR15. В данной функции происходят вычисления по формуле 𝑓(𝑥, 𝜆) = 𝜆𝑒 –𝜆𝑥 и процесс определения, являются ли полученные значения корректными. Если нет, то соответственно будет выведено сообщение об ошибки. Это было реализовано с помощью конструкции try-except, где в блоке try происходит перевод введенных переменных в тип float, но если этот перевод будет невозможен, то в блоке except будет прописано сообщение об ошибке, которое гласит о неправильно введенных данных. Формула не сложная, так что дополнительные функции излишни.
Таблица 1
Описание переменных
Имя переменной |
Тип переменной |
Назначение переменной |
h |
Float |
Первый параметр формулы |
x |
Float |
Второй параметр формулы |
f |
Float |
Вычисление значения формулы, данной по заданию |
Описание алгоритма работы программы представлено в виде блок схемы на рисунке 1.
Рисунок 1 – Блок-схема алгоритма
Вычислительная сложность реализованного алгоритма в нотации O() является константной (O(1)). Это значит, что вычислительная сложность алгоритма не зависит от входных данных и независимо от полученного на входе корректного значения время работы программы не изменится.
Код программы:
def LAB1_VAR15(h, x):
# try - обработка возможного исключения
try:
# Основная формула программы
h, x = float(h), float(x)
f = h * exp(-h*x)
return f
# Действие при неверном вводе данных
except:
print("Было введено не число. Программа принимает только "
"целочисленные числа или числа с плавающей точкой")
return "error"
TEST_LAB1_VAR15()
print('Введите значение h ')
h = input()
print('Введите значение x ')
x = input()
print(LAB1_VAR15(h, x)) print(LAB1_VAR15(h, x))
Описание тестового набора
Для читаемости ожидаемых результатов, они были округлены до трех знаков после запятой.
Таблица 2
Описание тестовых наборов
Описание тестового случая |
Входные данные |
Ожидаемые результаты |
Результат теста |
Оба значения целочисленные |
X = 1, 𝜆 = 5 |
0.007 |
Пройден |
Оба значения – числа с плавающей точкой |
X = 0.1, 𝜆 = 0.7 |
0.093 |
Пройден |
Одно из значений - строка |
X = ‘s’, 𝜆 = 8 |
Сообщение об ошибке |
Пройден |
Одно из значений равно нулю |
X = 7.1 𝜆 = 0 |
7.1 |
Пройден |
Одно из значений – пустая строка |
X = “”, 𝜆 = 9 |
Сообщение об ошибке |
Пройден |
Листинг тестовых сценариев:
def TEST_LAB1_VAR15():
if round(LAB1_VAR15(1, 5), 3) == 0.007:
print("Тест, где оба значения целочисленные, пройден")
else:
print("Тест, где оба значения целочисленные, не пройден")
if round(LAB1_VAR15(0.1, 0.7), 3) == 0.093:
print("Тест, где оба значения - числа с плавающей точкой, пройден")
else:
print("Тест, где оба значения - числа с плавающей точкой, не пройден")
if LAB1_VAR15("s", 8) == 'error':
print("Тест, где одно из значений - строка, пройден")
else:
print("Тест, где одно из значений - строка, не пройден")
if round(LAB1_VAR15(7.1, 0), 3) == 7.1:
print("Тест, где одно из значений равно 0, пройден")
else:
print("Тест, где одно из значений равно 0, не пройден")
if LAB1_VAR15("", 5) == 'error':
print("Тест, где одно из значений - пустая строка, пройден")
else:
print("Тест, где одно из значений - пустая строка, не пройден")
Результат работы тестов до написания основной программы представлен на рисунке 2. После написания работы программы на рисунке 3.
Рисунок 2 – Работа тестов, до написания основного кода
Рисунок 3 – Работа тестов, после написания основного кода
Примеры работы программы:
Рисунок 4 – Работа программы, если оба значение – целочисленные
Рисунок 5 – Работа программы, где оба значения с целочисленной точкой
Рисунок 6 – Работа программы, где одно из значений – ноль
Рисунок 7 – Работа программы, где одно из значений – строка
Рисунок 8 – Работа программы, где одно из значений – пустая строка
Выводы:
В ходе выполнения лабораторной работы мной были сделаны такие выводы:
Test-Driven-Development(TDD) – техника разработки ПО, которая предполагает изначально создание тестов перед написанием основной программы. Думаю, что в данном случае этот метод не особо актуален, так как программа сама по себе не такая сложная, но если ведется работа над большим проектом, то думаю, что это могло бы быть полезным. Лично меня эта техника показалась неудобной.
Закрепил навыки Python, используя стандартные команды языка. Узнал про конструкцию try-except для проработки исключения. Лично мне очень приятно работать с этим языком, так как в нем присутствует динамическая типизация в отличие от С++, который изучался в предыдущих семестрах.
Подводя итог, мной была проведена работа, которая включает в себя: определение ключевых задач и целей, создание математической модели, описал и решил поставленные передо мной задачи, создал тестовый набор к поставленной задачей.