Материал: Z9411_TP_LR2_Kafka

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

федеральное государственное автономное образовательное учреждение высшего образования

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ

КАФЕДРА 41

ОЦЕНКА

ПРЕПОДАВАТЕЛЬ

канд. тех. наук, доцент

Аграновский А. В.

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ЛАБОРАТОРНАЯ РАБОТА №4

Использование условных конструкций

по дисциплине: Технологии программирования

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ ГР. №

Z9411

Кафка Р. С.

номер группы

подпись, дата

инициалы, фамилия

Студенческий билет №

2019/3603

Шифр ИНДО

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

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

Вариант №7. Заданы четыре отрезка. Определите, возможно ли из них построить параллелограмм.

Результатом работы программы будет являться значение Ture (возможно) или False (невозможно).

Ограничений на входные данные нет.

  1. Математическая модель

Параллелограмм — это четырёхугольник, у которого противолежащие стороны попарно параллельны, то есть лежат на параллельных прямых.

Одно из свойств параллелограмма - его противоположные стороны равны (рис. 1).

Рисунок 1 – Свойства параллелограмма

Соответственно, если одна пара отрезков будет равна друг другу, и вторая оставшиеся пара тоже будет равна друг другу, то из этих отрезков можно будет построить параллелограмм.

Сравнивать будем 4 отрезка, для удобства назовём их a, b, c, d.

  1. Описание разработанной программы

Список входных данных представлен в таблице №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")

  1. Описание тестового набора

Тестирование будет производится на следующих данных, представленных в таблице №3.

Таблица №3 – тестовый набор

Описание тестового случая

Входные данные

Ожидаемый результат

Результат теста

Все отрезки равны и даны в типе данных int

a=1; b=1; c=1; d=1;

True

Пройден

a=b, c=d

a=5; b=5; c=9; d=9;

True

Пройден

a=c, b=d

a=6; b=10; c=6; d=10;

True

Пройден

a=d, b=c

a=15; b=1; c=1; d=15;

True

Пройден

Все отрезки даны в типе данных float

a=5.0; b=5.0; c=6.3; d=6.3;

True

Пройден

Отрезки даны в типе данных float и int

a=1.0; b=1; c=8.0; d=8;

True

Пройден

Один и более отрезков равен нулю

a=5; b=0; c=5; d=0;

False

Пройден

Один и более отрезков меньше нуля

a=-1.0; b=-1; c=8.0; d=8;

False

Пройден

Ввод некорректных данных

a=”1.0”; b=”1”; c=”Петя”; d=6;

Сообщение об ошибке – потом True при отрезках > 0

Пройден

Ввод некорректных данных + проверка некорректных данных во время ручного ввода

a=”1.0”; b=1; c=1; d=1;

Сообщение об ошибке – потом True при отрезках > 0

Пройден

  1. Примеры работы программы

На рисунке 3 представлен пример работы программы.

Рисунок 4 – Пример работы программы

  1. Выводы

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

В ходе выполнения лабораторной работы была реализована программа, которая определяет возможность построения параллелограмма из заданных отрезков. Были получены практические навыки написание расчетных программ на языке программирования Python.

Источник: https://studfile.net/preview/16575313/