Добавил:
t.me Установите расширение 'SyncShare' для решения тестов в LMS (Moodle): https://syncshare.naloaty.me/ . На всякий лучше отключить блокировщик рекламы с ним. || Как пользоваться ChatGPT в России: https://habr.com/ru/articles/704600/ || Также можно с VPNом заходить в bing.com через Edge браузер и общаться с Microsoft Bing Chat, но в последнее время они форсят Copilot и он мне меньше нравится. || Студент-заочник ГУАП, группа Z9411. Ещё учусь на 5-ом курсе 'Прикладной информатики' (09.03.03). || Если мой материал вам помог - можете написать мне 'Спасибо', мне будет очень приятно :) Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3 курс 1 семестр / Z9411_TP_LR2_Kafka.docx
Скачиваний:
3
Добавлен:
18.05.2022
Размер:
281.27 Кб
Скачать

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

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

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

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

КАФЕДРА 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")

Соседние файлы в папке 3 курс 1 семестр