Uploaded by Dima Dima

ЛР5-python-БаленкоДС-ІПЗ-22-2

advertisement
Міністерство освіти і науки України
Державний університет ,,Житомирська політехніка”
Кафедра ІПЗ
Група: ІПЗ-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
Download