
4сем / tp_lab2_Zhovtyak
.docxГУАП
КАФЕДРА № 41
ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
доц., канд. техн. наук |
|
|
|
А. В. Аграновский |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №2 |
УСЛОВНЫЕ КОНСТРУКЦИИ |
по курсу: ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ |
|
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. № |
4016 |
|
|
|
Жовтяк М.О. |
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург 2022
Вариант 15 (7-ой вариант 9-ого задания)
Постановка задачи
Вычислить по значение fрез(x) по заданию:
,
где такие параметры:
№ варианта |
a1 |
f1(x) |
a2 |
f2(x) |
a3 |
f3(x) |
7 |
10 |
f =
|
5 |
f = |
2,5 |
f = |
Итоговая функция выглядит так:
fрез(x)
=
Конечная цель программы – вычисление fрез(x), где x – параметр, заданный пользователем.
Ограничением на входные и выходные данные является соответствие полученного значения условию: целое число или число с плавающей точкой.
Дополнительные требования к программе не были выявлены.
Математическая модель
После ввода x и проверки введенных значений производятся вычисления по заданной формуле:
fрез(x) =
, где x –передаваемый параметр. Делитель дроби не может быть равен 0. Так, в первом случае параметр x не может быть равен -1. Остальных ограничений не найдено.
Описание разработанной программы
Основная часть программы оформлена в отдельной функции LAB2_VAR15. В данной функции происходят вычисления по формуле, указанной в вычислительной модели, и процесс определения, являются ли полученные значения корректными. Если нет, то соответственно будет выведено сообщение об ошибки. Это было реализовано с помощью конструкции try-except, где в блоке try происходит перевод введенных переменных в тип float, но если этот перевод будет невозможен, то в блоке except будет прописано сообщение об ошибке, которое гласит о неправильно введенных данных. Формула имеет условие на проверку x в определенных значениях, поэтому в основной функции была реализована условная конструкция, в ходе которой избирается нужное значение x и вычисление по формуле из задания соответственно. Формулы не сложные, так что дополнительные функции излишни.
Таблица 1
Описание переменных
Имя переменной |
Тип переменной |
Назначение переменной |
x |
Float |
Параметр формулы |
f |
Float |
Вычисление значения формулы, данной по заданию |
Описание алгоритма работы программы представлено в виде блок схемы на рисунке 1.
Рисунок 1 – Блок-схема алгоритма
Вычислительная сложность реализованного алгоритма в нотации O() является константной (O(1)). Это значит, что вычислительная сложность алгоритма не зависит от входных данных и независимо от полученного на входе корректного значения время работы программы не изменится.
Код программы:
# основная функция def LAB2_VAR15(x): # try - обработка возможного исключения try: # Основная формула программы x = float(x) f = 0 if x < 1 and x != -1: f = 20/(x+1) return f elif 1 <= x <= 2: f = 10/x return f elif x > 2: f = 5/(x-1) return f else: print("Введено недопустимое число для функции: -1") return 'error' # Действие при неверном вводе данных except: print("Было введено не число. Программа принимает только " "целочисленные числа или числа с плавающей точкой") return "error" #TEST_LAB2_VAR15() print('Введите значение x ') x = input() print(LAB2_VAR15(x))
Описание тестового набора
Таблица 2
Описание тестовых наборов
Описание тестового случая |
Входные данные |
Ожидаемые результаты |
Результат теста |
Введено число меньше 1 |
X = 0 |
20 |
Пройден |
Введено число в пределах от 1 до 2 |
X = 2 |
5 |
Пройден |
Введено число больше 2 |
X = 3 |
2.5 |
Пройден |
Одно из значений равно -1 |
X = -1 |
Сообщение об ошибке |
Пройден |
Одно из значений –строка |
X = “love” |
Сообщение об ошибке |
Пройден |
Одно из значений – пустая строка |
X = “” |
Сообщение об ошибке |
Пройден |
Листинг тестовых сценариев:
# тестовная функция def TEST_LAB2_VAR15(): if LAB2_VAR15(0) == 20: print("Тест, введено число меньше 1, пройден") else: print("Тест, введено число меньше 1, не пройден") if LAB2_VAR15(2) == 5: print("Тест, введено число в пределах от 1 до 2, пройден") else: print("Тест, введено число в пределах от 1 до 2, не пройден") if LAB2_VAR15(3) == 2.5: print("Тест, введено число больше 2, пройден") else: print("Тест, введено число больше 2, не пройден") if LAB2_VAR15(-1) == 'error': print("Тест, где введено число -1, пройден") else: print("Тест, где введено число -1, не пройден") if LAB2_VAR15("love") == 'error': print("Тест, где одно из значений - строка, пройден") else: print("Тест, где одно из значений - строка, не пройден") if LAB2_VAR15("") == 'error': print("Тест, где одно из значений - пустая строка, пройден") else: print("Тест, где одно из значений - пустая строка, не пройден")
Результат работы тестов до написания основной программы представлен на рисунке 2. После написания работы программы на рисунке 3.
Рисунок 2 – Работа тестов, до написания основного кода
Рисунок 3 – Работа тестов, после написания основного кода
Примеры работы программы:
Рисунок 4 – Работа программы, где x меньше 1
Рисунок 5 – Работа программы, где x в пределах от 1 до 2
Рисунок 6 – Работа программы, где x больше 2
Рисунок 7 – Работа программы, где x = -1
Рисунок 8 – Работа программы, где одно из значений – строка
Рисунок 9 – Работа программы, где одно из значений – пустая строка
Выводы:
В процессе выполнения данной лабораторной работы были изучены и выполнены следующие этапы:
1) Постановка задача. Разделил программы на чёткие этапы для более удобного просмотра кода и работы кода с помощью простых действий. Ввёл ограничения на ввод данных и рассчитал возможные завершения программы.
2) Математическая модель. Написал код с помощью математических действий, разделив задачу на простые математические действия в цикле.
3) Описание разработанной программы. По коду программы построил блочную модель программы. Выбрал наиболее подходящий способ написания кода с помощью циклов.
4) Описание тестового набора. Были заданы различные входные данные на проверку работоспособности кода. Были данные, которые должны были как вызвать ошибку, так и довести работу программы до конца.
Благодаря данной работе закрепил свои навыки программирования, построения алгоритма решения задачи, разбив ее на несколько этапов, укрепил навыки работы с условными конструкциями. Также закрепил применение метода Test-Driven-Development.