Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

4сем / tp_lab4_Zhovtyak

.docx
Скачиваний:
1
Добавлен:
27.08.2024
Размер:
242.18 Кб
Скачать

ГУАП

КАФЕДРА № 41

ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ

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

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

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

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

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

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

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №4

СМЕШАННЫЕ АЛГОРИТМЫ

по курсу: ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ

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

СТУДЕНТ ГР. №

4016

Жовтяк М.О.

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

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

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

Вариант 15 (5 задание)

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

Даны две последовательности по N целых чисел в каждой.

Конечная цель программы – найти наименьшее среди тех чисел первой последовательности, которые не входят во вторую последовательность. При этом считается, что хотя бы одно такое число есть.

Входные данные представлены в виде целого числа N, которое является количеством элементов в каждой последовательности, а также два списка с разным наполнением.

Дополнительные требования к программе не были выявлены.

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

Задание не требует математических формул. Для решения задачи достаточно использовать лишь циклы, где список итерируется по заданному условию. Количество элементов в списке должно быть хотя бы равно 2 или больше.

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

Первым делом, программа с помощью функций filling_n и filling_l принимает входные данные для работы. Основная часть программы оформлена в отдельной функции LAB4_VAR15. Согласно заданию, нужно найти минимальное число из тех чисел первого списка, которые не входят в число второго списка. Для этого каждый элемент первого списка будет проверяться на то, есть ли он во втором списке. Если такого нет, то он будет добавляться в отдельно созданный список. После этого в этом третьем списке будет находиться минимальный элемент. Этот минимальный элемент является выходной информацией.

Таблица 1 демонстрирует список используемых переменных.

Таблица 1 - Описание переменных

Имя переменной

Тип переменной

Назначение переменной

n

int

Количество элементов в списке

L1

List

Первая последовательность чисел

L2

List

Вторая последовательность чисел

num

Int

Промежуточная переменная для записи n

a

Int

Промежуточная переменная для записи элементов последовательностей

spisok

List

Последовательность, хранящая элементы первой последовательности, которые не входят во вторую

k

Int

Количество элементов последовательности, исполняемое в основной функции

Описание алгоритма работы программы представлено в виде блок схемы на рисунке 1.

Рисунок 1 – Блок-схема алгоритма

Вычислительная сложность реализованного алгоритма в нотации O() является константной (O(n)).

Код программы:

# filling of sequence

def filling_l(l):

for i in range(n):

while True:

try:

a = int(input("Enter the integer for sequence: "))

except:

print("Error. You must enter the integer.")

continue

l.append(a)

break

# setting the number of elements in sequence

def filling_n():

while True:

try:

num = int(input("Enter the n integer: "))

except:

print("Error. You must enter the integer")

continue

return num

#main function

def LAB4_VAR15(list1, list2, k):

spisok =[]

try:

for i in range(k):

if list1 [i] not in list2:

spisok.append(list1[i])

spisok.sort()

print(spisok[0])

return spisok[0]

except:

return "error"

#TEST_LAB4_VAR15()

n = 1

l1 = []

l2 = []

n = filling_n()

while n < 2:

print('n must be 2 or higher')

n = filling_n()

print('Working with first sequence.')

filling_l(l1)

print('Working with second sequence.')

filling_l(l2)

LAB4_VAR15(l1, l2, n)

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

Таблица 2 представляет собой описание всех тестовых случаев. Входные данные представляют собой такой набор: первый список – первая последовательность чисел, второй список – вторая последовательность чисел, третья переменная – число n (количество элементов списков).

Таблица 2 - Описание тестового набора

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

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

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

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

Положительные целые числа

[1, 2, 3], [1, 5, 4], 3

2

"Positive integer test passed"

Отрицательные целые числа

[-1, -2, -3], [-1, -5, -4], 3

-3

"Negative integer test passed"

Количество элементов меньше 2

[1, 2, 3], [1, 5, 4], 0

“error”

"n >= 2 test passed"

Один элемент – строчное выражение

[1, "hello", 3], [1, "world", 4], 0

“error”

"String-element test passed"

Листинг тестовых сценариев:

# test function

def TEST_LAB4_VAR15():

if LAB4_VAR15([1, 2, 3], [1, 5, 4], 3) == 2:

print("Positive integer test passed")

else:

print("Positive integer test not passed")

if LAB4_VAR15([-1, -2, -3], [-1, -5, -4], 3) == -3:

print("Negative integer test passed")

else:

print("Negative integer test not passed")

if LAB4_VAR15([1, 2, 3], [1, 5, 4], 0) == "error":

print("n >= 2 test passed")

else:

print("n >= 2 test not passed")

if LAB4_VAR15([1, "hello", 3], [1, "world", 4], 0) == "error":

print("String-element test passed")

else:

print("String-element test not passed")

Результат работы тестов до написания основной программы представлен на рисунке 2. После написания работы программы на рисунке 3.

Рисунок 2 – Работа теста, до написания основного кода

Рисунок 3 – Работа теста, после написания основного кода

Пример работы программы, где пользователь вводит все данные правильно на рисунке 4.

Рисунок 4 – Пример работы с правильным вводом

На рисунке 5 представлены всевозможные ошибки пользователя: где он вводит n меньше 2 и иное от int значение, где он вводит в список в качестве элемента строковое и дробное значения. Наглядно показано, что программа заставляет пользователя вводить данные, подходящие под параметры задачи, указывает, как правильно ввести данные.

Рисунок 5 – Пример работы с неверными вводами

Выводы:

В процессе выполнения данной лабораторной работы были изучены и выполнены следующие этапы:

1) Постановка задачи. Разделил программы на чёткие этапы для более удобного просмотра кода и работы кода с помощью простых действий. Ввёл ограничения на ввод данных и рассчитал возможные завершения программы.

2) Математическая модель. Написал код с помощью математических действий, разделив задачу на простые математические действия в цикле.

3) Описание разработанной программы. По коду программы построил блочную модель программы. Выбрал наиболее подходящий способ написания кода с помощью циклов.

Благодаря данной работе закрепил свои навыки программирования, построения алгоритма решения задачи, разбив ее на несколько этапов, укрепил навыки работы с условными конструкциями. Также закрепил применение метода Test-Driven-Development.

Соседние файлы в папке 4сем