Міністерство освіти і науки України Державний університет ,,Житомирська політехніка” Кафедра ІПЗ Група: ІПЗ-22-2 Програмування мовою Python Лабораторна робота № 5 «Функції» Виконав: Баленко Д. С. Прийняв: Дацюк Д. В. ЖИТОМИРСЬКА ПОЛІТЕХНІКА.23.121.01.000 – Лр.5 Змн. Арк. № докум. Баленко Д. С. Розроб. Перевір. Дацюк Д. В. Керівник Н. контр. Затверд. Підпис Дата Літ. Звіт з лабораторної роботи №5 Арк. Аркушів 1 12 ФІКТ, гр. ІПЗ-22-2 Мета роботи: ознайомитися з методами роботи зі списками в мові Python. Виконання роботи: Завдання 1. Користувач вводить дві сторони трьох прямокутників. Вивести їх площі. Лістинг програми: #завдання1 print("\nзавдання 1") trk1_side1 = perevirka("Введіть довжину першої сторони першого прямокутника: ") trk1_side2 = perevirka("Введіть довжину другої сторони першого прямокутника: ") trk2_side1 = perevirka("Введіть довжину першої сторони другого прямокутника: ") trk2_side2 = perevirka("Введіть довжину другої сторони другого прямокутника: ") trk3_side1 = perevirka("Введіть довжину першої сторони третього прямокутника: ") trk3_side2 = perevirka("Введіть довжину другої сторони третього прямокутника: ") area1 = trk1_side1 * trk1_side2 area2 = trk2_side1 * trk2_side2 area3 = trk3_side1 * trk3_side2 print("Площа першого прямокутника:", area1) print("Площа другого прямокутника:", area2) print("Площа третього прямокутника:", area3) Результат виконання: рис.1: результат виконання Завдання 2. Дано катети двох прямокутних трикутників. Написати функцію обчислення довжини гіпотенузи цих трикутників. Порівняти і вивести яка з гіпотенуз більше, а яка менше. Арк. Баленко Д. С. ЖИТОМИРСЬКА ПОЛІТЕХНІКА.23.121.01.000 – Лр.5 Дацюк Д. В. Змн. Арк. № докум. Підпис Дата 2 Лістинг програми: #завдання2 print("\nзавдання 2") def hypotenuse(cathet1, cathet2): return math.sqrt(cathet1 ** 2 + cathet2 ** 2) trk1_cathet1 = perevirka("Введіть довжину першого катету першого трикутника: ") trk1_cathet2 = perevirka("Введіть довжину другого катету першого трикутника: ") trk2_cathet1 = perevirka("Введіть довжину першого катету другого трикутника: ") trk2_cathet2 = perevirka("Введіть довжину другого катету другого трикутника: ") hypotenuse1 = hypotenuse(trk1_cathet1, trk1_cathet2) hypotenuse2 = hypotenuse(trk2_cathet1, trk2_cathet2) if hypotenuse1 > hypotenuse2: print("Довжина гіпотенузи першого трикутника більше за другий.") elif hypotenuse1 < hypotenuse2: print("Довжина гіпотенузи другого трикутника більше за перший.") else: print("Довжини гіпотенуз обох трикутників рівні.") Результат виконання: рис.2: результат виконання Завдання 3. Задано коло (x-a)2 + (y-b)2 = R2 і точки Р (р1, р2), F (f1, f1), L (l1, l2). З'ясувати і вивести на екран, скільки точок лежить всередині кола. Перевірку, чи лежить точка всередині кола, оформити у вигляді функції. Лістинг програми: #завдання3 print("\nзавдання 3") def point_inside_circle(x, y, a, b, R): distance = math.sqrt((x - a) ** 2 + (y - b) ** 2) Арк. Баленко Д. С. ЖИТОМИРСЬКА ПОЛІТЕХНІКА.23.121.01.000 – Лр.5 Дацюк Д. В. Змн. Арк. № докум. Підпис Дата 3 return distance <= R a = perevirka("Введіть координату a центра кола: ") b = perevirka("Введіть координату b центра кола: ") R = perevirka("Введіть радіус кола: ") p1 = perevirka("Введіть координату x точки P: ") p2 = perevirka("Введіть координату y точки P: ") f1 = perevirka("Введіть координату x точки F: ") f2 = perevirka("Введіть координату y точки F: ") l1 = perevirka("Введіть координату x точки L: ") l2 = perevirka("Введіть координату y точки L: ") points_inside = 0 if point_inside_circle(p1, p2, a, b, R): points_inside += 1 if point_inside_circle(f1, f2, a, b, R): points_inside += 1 if point_inside_circle(l1, l2, a, b, R): points_inside += 1 print(f"Кількість точок, які лежать всередині кола: {points_inside}") Результат виконання: рис.3: результат виконання Завдання 4. Дано числа X, Y, Z, Т - довжини сторін чотирикутника. Обчислити його площу, якщо кут між сторонами довжиною X і Y - прямий. Лістинг програми: #завдання4 print("\nзавдання 4") Арк. Баленко Д. С. ЖИТОМИРСЬКА ПОЛІТЕХНІКА.23.121.01.000 – Лр.5 Дацюк Д. В. Змн. Арк. № докум. Підпис Дата 4 def is_positive(value): return value > 0 #обчислення площі чотирикутника def AREA(X, Y, Z, T): if not is_positive(X) or not is_positive(Y) or not is_positive(Z) or not is_positive(T): return "Введіть додатні числа для довжин сторін." #перевірка, чи кут між сторонами X і Y є прямим if X**2 + Y**2 == Z**2 + T**2: area = X * Y return f"Площа чотирикутника: {area}" else: return "Введені сторони не утворюють чотирикутник з прямим кутом між X і Y." X = perevirka("Введіть довжину сторони X: ") Y = perevirka("Введіть довжину сторони Y: ") Z = perevirka("Введіть довжину сторони Z: ") T = perevirka("Введіть довжину сторони T: ") result = AREA(X, Y, Z, T) print(result) Результат виконання: рис.4: результат виконання Завдання 5. Знайти всі натуральні числа, що не перевищують заданого n, які діляться на кожне із заданих користувачем чисел. Лістинг програми: #завдання5 print("\nзавдання 5") def perevirka(prompt): while True: try: value = int(input(prompt)) Арк. Баленко Д. С. ЖИТОМИРСЬКА ПОЛІТЕХНІКА.23.121.01.000 – Лр.5 Дацюк Д. В. Змн. Арк. № докум. Підпис Дата 5 if value > 0: return value else: print("Введіть натуральне число.") except ValueError: print("Введіть коректне число.") n = perevirka("Введіть максимальне число n: ") count = perevirka("Скільки чисел ви хочете ввести для перевірки: ") numbers = [] for i in range(count): number = perevirka(f"Введіть {i+1}-е число для перевірки: ") numbers.append(number) result = [] for x in range(1, n+1): divisible = True for number in numbers: if x % number != 0: divisible = False break if divisible: result.append(x) print(f"Натуральні числа, які діляться на {', '.join(map(str, numbers))} та не перевищують {n}:") print(result) Результат виконання: рис.5: результат виконання Завдання 6. Скласти програму для знаходження чисел з інтервалу [М, N], що мають найбільшу кількість дільників. Лістинг програми: Арк. Баленко Д. С. ЖИТОМИРСЬКА ПОЛІТЕХНІКА.23.121.01.000 – Лр.5 Дацюк Д. В. Змн. Арк. № докум. Підпис Дата 6 #завдання6 print("\nзавдання 6") def count_divisors(num): dilnik = 0 for i in range(1, num + 1): if num % i == 0: dilnik += 1 return dilnik @measure_time def find_numbers_with_max_divisors(M, N): max_dilnik = 0 numbers_with_max_dilnik = [] for num in range(M, N + 1): dilnik = count_divisors(num) if dilnik > max_dilnik: max_dilnik = dilnik numbers_with_max_dilnik = [num] elif dilnik == max_dilnik: numbers_with_max_dilnik.append(num) print(f"Числа з інтервалу [{M}, {N}] з найбільшою кількістю дільників ({max_dilnik}):") print(numbers_with_max_dilnik) #виконати перевірку часу виконання для 10**n елементів при n <= 6 for n in range(1, 7): num_elements = 10**n M=1 N = num_elements print(f"Перевірка для n = {n}, num_elements = {num_elements}") find_numbers_with_max_divisors(M, N) Результат виконання: Арк. Баленко Д. С. ЖИТОМИРСЬКА ПОЛІТЕХНІКА.23.121.01.000 – Лр.5 Дацюк Д. В. Змн. Арк. № докум. Підпис Дата 7 рис.6: результат виконання Завдання 7. Написати функцію для пошуку всіх простих чисел від 0 до N з можливістю вибору формату представлення результату (списком; рядками в стовпчик; просто вивести кількість простих чисел. Лістинг програми: #завдання7 print("\nзавдання 7") def count_divisors(num): dilnik = 0 for i in range(1, num + 1): if num % i == 0: dilnik += 1 return dilnik @measure_time def find_numbers_with_max_divisors(M, N): max_dilnik = 0 numbers_with_max_dilnik = [] for num in range(M, N + 1): dilnik = count_divisors(num) if dilnik > max_dilnik: max_dilnik = dilnik numbers_with_max_dilnik = [num] elif dilnik == max_dilnik: numbers_with_max_dilnik.append(num) print(f"Числа з інтервалу [{M}, {N}] з найбільшою кількістю дільників ({max_dilnik}):") print(numbers_with_max_dilnik) #виконати перевірку часу виконання для 10**n елементів при n <= 6 for n in range(1, 7): num_elements = 10**n M=1 N = num_elements print(f"Перевірка для n = {n}, num_elements = {num_elements}") find_numbers_with_max_divisors(M, N) Результат виконання: Арк. Баленко Д. С. ЖИТОМИРСЬКА ПОЛІТЕХНІКА.23.121.01.000 – Лр.5 Дацюк Д. В. Змн. Арк. № докум. Підпис Дата 8 рис.7: результат виконання Завдання 8. Дано список з випадкових натуральних чисел довільної довжини. Написати програму, що формуватиме з заданого другий список, що міститиме тільки значення від MIN+bottom до MAX-upper. Де MIN і MAX – відповідно найменше і найбільше число в списку, а botton і upper – нижня і верхня межа значень вибірки нового списку. Програма має містити обробку винятків на випадок введення символів невірного типу, дробових чисел, вихід за межі мінімального і максимального значення. Лістинг програми: #завдання8 print("\nзавдання 8") def generate_random_list(num_elements): random_list = [random.randint(1, 100) for _ in range(num_elements)] return random_list @measure_time def filter_values(input_list, bottom, upper): try: if not isinstance(bottom, int) or not isinstance(upper, int): raise ValueError("Нижня та верхня межі повинні бути цілими числами") if not input_list: raise ValueError("Список пустий") min_value = min(input_list) Арк. Баленко Д. С. ЖИТОМИРСЬКА ПОЛІТЕХНІКА.23.121.01.000 – Лр.5 Дацюк Д. В. Змн. Арк. № докум. Підпис Дата 9 max_value = max(input_list) if bottom < min_value or upper > max_value: raise ValueError("Нижня або верхня межа виходить за межі мінімального або максимального значення") result_list = [x for x in input_list if min_value + bottom <= x <= max_value - upper] return result_list except ValueError as e: return str(e) #перевірка часу виконання для різних значень num_elements, bottom та upper for n in range(1, 7): num_elements = 10**n bottom = 1 upper = 1 print(f"Перевірка для num_elements={num_elements}, bottom={bottom}, upper={upper}") input_list = generate_random_list(num_elements) filtered_list = filter_values(input_list, bottom, upper) print(f"Вихідний список: {len(input_list)} елементів") print(f"Результат фільтрації: {len(filtered_list)} елементів") Результат виконання: рис.8: результат виконання Арк. Баленко Д. С. ЖИТОМИРСЬКА ПОЛІТЕХНІКА.23.121.01.000 – Лр.5 Дацюк Д. В. Змн. Арк. № докум. Підпис Дата 10 Завдання 9. Для завдань 6 – 8 написати декоратор, що дозволить визначати час виконання програми. Виконати перевірку часу виконання написаних функцій для 10**n елементів при n <=6 з кроком в n. Тобто визначити час виконання функцій для десятків, сотень, тисяч і так до мільйону елементів. Лістинг програми: #завдання9 print("\nзавдання 9") import random import time def measure_time(func): def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() elapsed_time = end_time - start_time print(f"Час виконання функції {func.__name__}: {elapsed_time:.6f} секунд") return result return wrapper Висновок: було ознайомленно з методами роботи зі списками в мові Python. Посилання на git: https://gitlab.com/2022-2026/ipz-22-2/balenko- dmytro/python/lab5_python.git Арк. Баленко Д. С. ЖИТОМИРСЬКА ПОЛІТЕХНІКА.23.121.01.000 – Лр.5 Дацюк Д. В. Змн. Арк. № докум. Підпис Дата 11