МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ
КАФЕДРА 41
|
ОЦЕНКА
ПРЕПОДАВАТЕЛЬ
канд. тех. наук, доцент |
|
|
|
Аграновский А. В. |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ЛАБОРАТОРНАЯ РАБОТА №4
|
Использование условных конструкций
|
по дисциплине: Технологии программирования |
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. № |
Z9411 |
|
|
|
Кафка Р. С. |
|
номер группы |
|
подпись, дата |
|
инициалы, фамилия |
Студенческий билет № |
2019/3603 |
|
|
|
Шифр ИНДО |
|
Санкт-Петербург 2022
Постановка задачи
Вариант №7. Заданы четыре отрезка. Определите, возможно ли из них построить параллелограмм.
Результатом работы программы будет являться значение Ture (возможно) или False (невозможно).
Ограничений на входные данные нет.
Математическая модель
Параллелограмм — это четырёхугольник, у которого противолежащие стороны попарно параллельны, то есть лежат на параллельных прямых.
Одно из свойств параллелограмма - его противоположные стороны равны (рис. 1).
Рисунок 1 – Свойства параллелограмма
Соответственно, если одна пара отрезков будет равна друг другу, и вторая оставшиеся пара тоже будет равна друг другу, то из этих отрезков можно будет построить параллелограмм.
Сравнивать будем 4 отрезка, для удобства назовём их a, b, c, d.
Описание разработанной программы
Список входных данных представлен в таблице №1.
Таблица №1 - список входных данных
Имя переменной |
Тип переменной |
Назначение |
a |
Float |
Хранит длину заданного отрезка a |
b |
Float |
Хранит длину заданного отрезка b |
c |
Float |
Хранит длину заданного отрезка c |
d |
Float |
Хранит длину заданного отрезка d |
Список выходных данных представлен в таблице №2.
Таблица №2 - список выходных данных
Тип |
Назначение |
Boolean (True/False) |
Вывод значения. True – если можно построить параллелограмм. False – если нельзя построить параллелограмм. |
Программа проверяет сначала если значения отрезков равны или меньше нуля – поскольку длина отрезков должна быть натуральным числом. Если есть хоть одно число меньше или равно нулю – программа выведет значение False – это значит, что будет невозможно построить параллелограмм.
Если первую проверку числа прошли, то тогда программа будет проверять отрезки по комбинациям пар: сначала a и b. Если они совпадают, тогда проверяет вторую пару c и d. При совпадении двух пар отрезков считается, что условие для постройки параллелограмма выполнены и выводится значение True.
Если первое сравнение пар неверное, тогда программа проверяет вторую комбинацию пар: a и c, b и d. Если и это сравнение неверное, тогда проверяет a и d, b и c.
Если отрезки не совпали ни с одним из трёх случаев – тогда по свойству параллелограмма его нельзя будет построить. Результат у нас может быть только False – построить параллелограмм невозможно.
Блок-схема разработанной программы представлена на рисунке 2.
Рисунок 2 – Блок-схема основной функции
На рисунке 3 представлена блок-схема дополнительной программы, которая используется для ручного ввода значений длины отрезков.
Рисунок 3 - Блок-схема дополнительной функции
Листинг основного программного кода:
def LAB2_VAR_7(a, b, c, d): "Основная функция. Определяет можно ли построить параллелограмм. Выводит True - если да, False - нет." try: if a <= 0 or b <= 0 or c <= 0 or d <= 0: #Проверка наличия длины отрезков меньше или равных нулю return False if (a == b and c == d) or (a == c and b == d) or (a == d and b == c): #Проверка комбинаций пар отрезков return True return False
except TypeError: print("ОШИБКА значения. Длина отрезков должна быть числом. Введите значения отрезков вручную.") a = Manual_input("a") b = Manual_input("b") c = Manual_input("c") d = Manual_input("d") return LAB2_VAR_7(a, b, c, d) #Возвращает True или False
def Manual_input(letter): "Функция, которая вызывается в случае ошибки некорректных данных в основной функции. Используется для ввода длины отрезка" try: x = float(input(f"Введите длину отрезка {letter}: ")) return x except ValueError: print("ОШИБКА значения. Длина отрезков должна быть числом. Попробуйте снова.") return Manual_input(letter) |
Листинг кода тестов:
def TEST1_LAB2_VAR_7(): #Функция для теста if(LAB2_VAR_7(1, 1, 1, 1)): #Все отрезки равны print("Тест 1 - OK") else: print("Тест 1 - FAIL")
def TEST2_LAB2_VAR_7(): if(LAB2_VAR_7(5, 5, 9, 9)): #a=b, c=d print("Тест 2 - OK") else: print("Тест 2 - FAIL")
def TEST3_LAB2_VAR_7(): if(LAB2_VAR_7(6, 10, 6, 10)): #a=c, b=d print("Тест 3 - OK") else: print("Тест 3 - FAIL")
def TEST4_LAB2_VAR_7(): if(LAB2_VAR_7(15, 1, 1, 15)): #a=d, b=c print("Тест 4 - OK") else: print("Тест 4 - FAIL")
def TEST5_LAB2_VAR_7(): if(LAB2_VAR_7(5.0, 5.0, 6.3, 6.3)): #Все отрезки даны в типе данных float print("Тест 5 - OK") else: print("Тест 5 - FAIL")
def TEST6_LAB2_VAR_7(): if(LAB2_VAR_7(1.0, 1, 8.0, 8)): #Отрезки даны в типе данных float и int print("Тест 6 - OK") else: print("Тест 6 - FAIL")
def TEST7_LAB2_VAR_7(): if(LAB2_VAR_7(5, 0, 5, 0) == False): #Один и более отрезков равен нулю print("Тест 7 - OK") else: print("Тест 7 - FAIL")
def TEST8_LAB2_VAR_7(): if(LAB2_VAR_7(-1.0, -1, 8.0, 8) == False): #Один и более отрезков меньше нуля print("Тест 8 - OK") else: print("Тест 8 - FAIL")
def TEST9_LAB2_VAR_7(): if(LAB2_VAR_7("1.0", "1", "Петя", 6)): #Ввод некорректных данных print("Тест 9 - OK") else: print("Тест 9 - FAIL")
def TEST10_LAB2_VAR_7(): if(LAB2_VAR_7("1.0", 1, 1, 1)): #Ввод некорректных данных + проверка некорректных данных во время ручного ввода print("Тест 10 - OK") else: print("Тест 10 - FAIL") |