Академический Документы
Профессиональный Документы
Культура Документы
Кафедра БІТ
Звіт
з практичного заняття № 2
з дисципліни «Об'єктно-орієнтоване програмування»
Виконав: Перевірив:
ст. гр. КБІКС-21-1 старший викладач
Томченко О. Ю. Данилов А. Д.
Харків
2023
2 РОЗРОБКА ПРОГРАМ З ВИКОРИСТАННЯМ ПРОЦЕДУР ТА
ФУНКЦІЙ
1.2 Приклади
1.2.1 Приклад №1.
Визначити символ, що входить до рядка найбільшу кількість разів.
Лістинг коду:
def construct_dict(S): # S - формальний параметр (рядок)
char_dict = {} # char_dict - словник символів
for c in S:
if c not in char_dict:
char_dict[c] = S.count(c)
return char_dict
D = construct_dict("молоко")
print(D)
def find_most_popular_char(D):
max_char = '' # найпопулярніший символ
max_num = 0 # кількість його входжень
for c, num in D.items():
if num > max_num:
max_char = c
max_num = num
return max_char, max_num # функція повертає пару значень max_char,
max_num
D = construct_dict("молоко")
C, N = find_most_popular_char(D)
print(C, N)
Лістинг коду:
# Описуємо функцію exp
def exp(x, eps=0.0001):
S=a=1
n=0
while abs(a) >= eps:
n += 1
a *= x / float(n)
S += a
return S
# головна програма
x = float(input("x = "))
y = exp(x) # використовуємо типове значення параметра eps
print("exp(%f) = %f" % (x, y))
Результат виконання програми:
Лістинг коду:
def suma(*elements):
res = 0
# Оскільки elements – кортеж скористаємося циклом for
for el in elements:
res += el
return res
Лістинг коду:
import math
Лістинг коду:
def pow_nat(n):
def tmp_pow(x):
res = 1
for i in range(n):
res *= x
return res
return tmp_pow
n = int(input("n= "))
x = float(input("x= "))
res = 0
for k in range(n + 1):
res += pow_nat(k)(x)
print(res)
Лістинг коду:
def Fact(n):
if n == 0: # Термінальна гілка
return 1 # Тривіальне значення
else: # Рекурсивна гілка
return n * Fact(n - 1) # Рекурсивний виклик
# Виклик рекурсивної функції
n = int(input("n = "))
print("%d! = %d" % (n, Fact(n)))
Лістинг коду:
def is_symetric(s):
if len(s) <= 1: # якщо рядок s порожній або
# складається з одного символа
return True # то він симетричний
else:
# cond1 - умова, що 1-й і останній символи однакові
cond1 = s[0] == s[len(s) - 1]
# cond2 - умова, що рядок без першого і останнього
# символа є симетричним – рекурсивний виклик
cond2 = is_symetric(s[1: len(s) - 1])
# рядок симетричний, якщо обидві умови істині
Лістинг коду:
def Fib(n):
F1 = F2 = 1
yield F2
yield F1
for i in range(3, n+1):
F2, F1 = F1, F1 + F2
yield F1
N = int(input("N = "))
# Створюємо об'єкт генератор-функцію
generator = Fib(N)
for a in generator:
print(a, end=" ")
Лістинг коду:
from time import perf_counter
def benchmark(f):
def _benchmark(*args, **kw):
current_time = perf_counter()
rez = f(*args, **kw)
dt = perf_counter() - current_time
print('Час виконання функції %1.5f cек' % dt)
return rez
return _benchmark
@benchmark
def Fib1(n):
F1 = F2 = 1
for i in range(2, n + 1):
F2, F1 = F1, F1 + F2
return F1
def FibRecursive(n):
if n == 0 or n == 1:
return 1
else:
return FibRecursive(n - 1) + FibRecursive(n - 2)
@benchmark
def Fib2(n):
return FibRecursive(n)
N = 30
print(Fib1(N))
print(Fib2(N))
Побудова блок-схеми:
Рисунок 2.10 – Блок-схема створеного додатку до завдання №1
Лістинг коду:
import math
def fx1_func(x):
return 1 / (1 + math.exp(1 + x))
def fx2_func(x):
i=1
result = ((-1) ** i) * ((math.exp(1 + x)) ** (i + 1)) / (i + 1)
term = result
while abs(term) > epsilon:
i += 1
term *= -x * (m - 1) / m
result += term
return result
1.4 Завдання № 2
Визначити рекурсивні підпрограми зображення натурального числа:
a) у двійковій системі числення;
b) у вісімковій системі числення:
c) у системі числення з основою 𝑏 ≥ 2.
Лістинг коду:
def decimal_to_binary(n):
if n == 0:
return ""
else:
return decimal_to_binary(n // 2) + str(n % 2)
def decimal_to_octal(n):
if n == 0:
return ""
else:
return decimal_to_octal(n // 8) + str(n % 8)
1.5 Висновок: