Профільна інформатика, 10. Тема 5

Перейти до теми 6 (кликніть тут)

Перейти до теми 5 (кликніть тут)

Опрацювати теоретичний матеріал навчальних презентацій, виконати опорні задачі та практичні завдання.

Тема 5. Функції користувача і модулі мови Python

п. 5.1. Функції

 

Приклад 1.

Розглянемо програмний код, у якому оголошено дві функції: функція без параметрів – funct_1 і функція з двома параметрами x i y — funct_2.

Звернення до функції funct_1 здійснюється один раз, а до функції funct_2 — двічі. Після звернення до функції funct_1 виконується множення числа 2.3 на число 3.5 і виведення отриманою результату на екран.

Далі управління передаватиме в основну програму інструкції а, b = 2, 3, y результаті чого змінна а набуде значення 2, змінна b – значення 3.

def funct_1():
    y=2.3*3.5
    print(y)
def funct_2(x,y):
    z=x*x+y*y
    return z
funct_1()
a,b=2,3
print (funct_2(a,b))
a,b=3,4
print(funct_2(a,b))

Результат виконання: 

8.049999999999999
13
25

Приклад 2. Приклад програми з передаванням функції значень кортежів і списків

def funct_05(a,b,c):      #функція має три параметири
    return (a+b+c)/y       #обчислення і повернення результату
x1=(2,3,4)                     #кортеж
x2=[5,6,7]                     #список
y=len(x1)                      #довжина кортежу         
print(funct_05(*x1))    #перше звернення до функції
y=len(x2)                     #довжина списку
print(funct_05(*x2))    #друге звернення до функції

Якщо параметрам функції передаються значення словника, то в інструкції звернення до функції перед її іменем ставлять два символи зірочка (**). А якщо списку або кортежу, то одну зірочку.

Приклад 3.

Програма, у якій під час першого звернення до функції параметрам передаються значення словника, а під час другого звернення – значення кортежу та словника.

import math                  #імпортування модуля math

def funct_06(a,b,c):      #функція з 3 параметирами

    s=a+b+c                   #обчислення суми чисел

    return math.sqrt(s)   #обчислення кореня квадратного і повернення результату

d1={“a”:1,”b”:2,”c”:3} #словник

# параметри функції набувають значень словника   

print(funct_06(**d1))  #перше звернення до функції

#параметри функції набудуть значень кортежу і словника

t, d2=(5,6),{“c”:7}       #кортеж і словник

print(funct_06(*t,**d2))  #друге звернення до функції

Результат виконання програми

2.449489742783178

4.242640687119285

Приклад 4. Програма з посиланням на функцію з допомогою змінної

Інструкція def y процесі оголошення функції створює об’єкт, який має тип function, i зберігає посилання на цей об’єкт в ідентифікаторі, яким є ім’я функції. Це посилання на функцію можна зберегти в іншій змінній.

import math                  #імпортування модуля math

import random             #імпортування модуля random

def funct_07(a):           #функція з 1 параметром

    return math.factorial(a)   #обчислення факторіалу і повернення результату

z=funct_07                   #почилання на об’єкт у змінній z

x=random.randint(3,9) #x – випадкове число від 3 до 9   

print(x)                        #виведення випадкового числа

print (z(x))                  #перше звернення до функції

x=random.randint(2,7) #х – випадкове число від 2 до 7

print(x)                       #виведення випадкового числа

print(z(x))                  #друге звернення до функції

Структура виведення та можливі значення виконання програми:

7

5040

5

120

Завдання для практичного опрацювання

  1. Складіть програму з використанням функції без параметрів для обчислення об’єму конуса.
  2. Складіть програму з використанням функцій із параметрами для обчислення двох різних за розміром прямокутних трикутників із відомими значеннями їх катетів і обчисліть площі кола з відомим радіусом.
  3. Кубик із цифрами від 1 до 6 підкидають п’ять разів. Складіть програму обчислення середнього значення цих чисел із використанням функції з параметрами.
  4. Складіть програму обчислення значення виразу a*b—c/d із використанням функції з параметрами для значень списку [3, 5, 2, 7] і кортежу (4. 1, 5, 6).
  5. Генеруються три цілі випадкові числа в діапазоні від 3 до 7. Складіть програму з використанням функції з параметрами для обчислення суми квадратів цих чисел.
  6. З’ясуйте в Інтернеті, через які області України протікає Дніпро, та знайдіть їх площі. Складіть програму визначення областей із максимальною та мінімальною площами. Обчисліть середню площу. Використайте функції з параметрами.

Зразок виконаня вправ

1. Програма обчислення об’єму конуса для демонстрації звернення до функцій користувача з параметрами

import math
def func_1(x,y):
    v=math.pi*x**2*y
    print(“V=”,v)
r=int(input(“радіус конуса r=”))
h=int(input(“висота конуса h=”))
func_1(r,h)

 Без параметрів:

import math
def func_1():
    r=int(input(“радіус конуса r=”))
    h=int(input(“висота конуса h=”))
    v=math.pi*r**2*h
    print(“V=”,v)
func_1()

Зразок виконання завдання 2:

import math
def func_1(x,y):
    return(x*y)
def func_2(z):
    sk=math.pi*z**2
    return(sk)
a=int(input(“Довжина 1 прямокутника a=”))
b=int(input(“Ширина 1 прямокутника b=”))
print(“Площа 1 прямокутника S=”,func_1(a,b))
a=int(input(“Довжина 2 прямокутника a=”))
b=int(input(“Ширина 2 прямокутника b=”))
print(“Площа 2 прямокутника S=”,func_1(a,b))
r=int(input(“радіус круга r=”))
print(“Площа круга S=”,func_2(r))   

3. Приклад виконання завдання 3 (без параметрів):

def func_1():
   s=0
   import random
   for i in range(6):
       x=random.randint(1,7)
       print(i,” раз випало число: “,x)
       s=s+x
   return(s)
print(“Середнє арифметичне:  “,func_1())

З параметрами:

import random
def func(s):
    x=random.randint(1,7)
    print(i+1,” раз випало число: “,x)
    s=s+x
    return (s)
s=0
for i in range(6):
    s=func(s) 
print(“Сума очок, які випадали на кубику:  “,s)
print(“Середнє арифметичне:  “,s/6)

Зразок виконання завдання 5:

import random
def func(a,b,c):
    return (a*a+b*b+c*c)
x=random.randint(3,8)
y=random.randint(3,8)
z=random.randint(3,8)
print (“Згенеровано числа: “,x,y,z)
print(“Сума квадратів даних чисел: “,func(x,y,z))

п.5-1.2. РОЗШИРЕНІ МОЖЛИВОСТІ ФУНКЦІЇ  

 

Приклад 8. Програма з функцією, параметр якої може набувати довільної кількості аргументів

Розглянемо функції, у яких параметрам можна передавати довільну кількість значень аргументів. Для того щоб параметри могли набувати довільної кількості аргументів, їх y оголошенні функції необхідно вказувати з символом зірочка (*).

def func_09(*x):             #параметр зі змінною кількістю аргументів

    s=5                              #початкове значення змінної

    for i in x:                     #цикл

        s=s+i                      #обчислення суми

        return s                   #повернення результату   

print(func_09(9,6))        #параметру передається 2 аргументи

print (func_09(3,4,7,10))  #параметру передається 4 аргументи

У цій програмі в процесі першого звернення до функції параметр х набуває двох значень: 9 і 6, а в процесі другого звернення – чотирьох значень: 3, 4, 7, 10. У результаті виконання програми після першого звернення до функції отримаємо значення 20, а після другого – 29.

Приклад 9. Програма, функція якої має комбінацію параметрів

def func_10(x, y=4, *z):       #комбінація різних параметрів

    s=2*y+x                           #обчислення виразу для значень х і у

    for i in z:                          #цикл

#вираз s=s+i не виконується під час першого звернення до функції

#вираз s=s+i не виконується двічі під час другого звернення до функції

        s=s+i                          #обчислення суми для значень z

        return s                      #повернення результату   

print(func_10(7))              #перше звернення до функції

print (func_10(5,8,9,12))  #друге звернення до функції

У процесі першого звернення до функції параметр при х набуває значення 7, параметр при у за замовчуванням має значення 4, а параметр при z — значення 0. Тому інструкція s=s+i в операторі циклу не виконується.

У процесі другого звернення до функції параметр при х набуває значення 5, параметр при у – значення 8, а параметр при z – двох значень: 9 і 12. Таким чином, вираз s=s+i виконується двічі: для значення змінної при і, яка дорівнює 9 і 12. У результаті виконання програми отримаємо значення 15 і 42.

Завдання для практичної роботи

  1. Складіть програму обчислення значення виразу а*b2-2*а, якщо а >b і виразу а/b, якщо а <= b із використанням функції з одним обов’язковим та одним необов’язковим параметрами. 
  2. Складіть програму з використанням однієї функції зі змінною кількістю аргументів для обчислення сум чисел 1, 3, 5. 7, 9 і 6, 8. 10. 
  3. Складіть програму з використанням анонімних функцій без параметрів і з параметрами для обчислення значень виразів 3 / 7 + 5* 8 / З , 2*х+х/у і (3*х+5)/(у-2) для відомих значень х i y. 
  4. Функція має три параметри: обов’язковий, необов’язковий, зі змінною кількістю аргументів. Складіть програму обчислення добутку чисел 3 на 7 і добутку чисел 4, 6, 7, 9, 10. 
  5. У змаганнях із підняття гирі від 10-А класу беруть участь 5 учнів, а від 10-Б класу – 4 учні. Відомо скільки разів підняв гирю кожен учень. Розробіть програму визначення різниці підняття гирі учнями обох класів. 
  6. Прибуток від двох фірм Кагарлицького району Київської області постійний і складає, відповідно, 10 і 15 млн грн на рік. Ще від двох фірм цього району прибуток визначається наприкінці року. Постійний прибуток також мають дві фірми Обухівського району Київської області й становить, відповідно, 9 і17 млн грн на рік, а від однієї фірми прибуток визначається наприкінці року. Розробіть програму обчислення загального прибутку фірмами з кожного району. Виберіть і обґрунтуйте раціональний варіант програмного коду

Підсумкове оцінювання

1. Дати відповіді на запитання (4 бали)

  1. Що називають  функцією користувача?
  2. Як оголошується функція користувача?
  3. Яке призначення функції return?
  4. Які існують функції користувача?
  5. Що таке імя функції
  6. Що є тілом функції?
  7. Дати поняття параметра функції

2. Написати програмний код до завдань практичної роботи (по 4 бали):

  1. Складіть програму обчислення значення виразу a*b—c/d із використанням функції з параметрами для значень списку [3, 5, 2, 7] і кортежу (4. 1, 5, 6).
  2. Знайти сумарну площу 3 полів прямокутної форми, використовуючи функцію з параметрами.

п.5.2. РЕКУРСИВНІ ФУНКЦІЇ

 

Приклад 3.
Розглянемо сутність рекурсії на прикладі обчислення значення виразу x^n.

#рекурсивне обчислення числа x у степені n

def st(x,n):    #заголовок функції

if n==0:        #чи дорівнює число нулю

return 1        #повернення одиниці

else:              #початок обчислення числа в степені

return st(x, n-1)*x    #обчислення і повернення результату

рrint(“уведіть число x”) #повідомлення про уведення числа х

х = int(input())    #уведення числа x

рrint(“уведіть число n”) #повідомлення про введення числа n

n = int(input())    #уведення числа n

print(“peзультат =”, st(x, n)) #звернення до рекурсивної функції

 

Програма обчислення факторіалу

#програма обчислення факторіалу уведеного числа

def tact (n) :   #заголовок функції

if n==0: #пошук опорного значення

return 1 #повернення опорного значення

else: #починається обчислення факторіалу

return n*fact(n-1) #обчислення і повернення факторіалу

print(“уведіть число ”) #повідомлення про уведення числа

n=int(input)) #уведення числа

print(fact(n)) #звернення до рекурсивної функції

Програма обчислення найбільшого спільного дільника

# рекурсивне обчислення найбільшого спільного дільника

def nod(a,b): #заголовок функції

if b==0: #перевірка чисел на рівність

return a #повернення числа а

else: #починається обчислення nod

return nod(b,a%b) #обчислення і повернення числа nod

print(“уведіть число a”) #повідомлення про уведення числа а

a=int(input()) #уведення числа а

print(“уведіть число b”) #повідомлення про уведення числа b

b=int(input()) #уведення числа b

print(“nod=”,nod(a,b)) #звернення до рекурсивної функції

Завдання для практичної роботи

  1. Розробіть програму з рекурсивною функцією обчислення n перших членів геометричної прогресії, перший член якої дорівнює а і знаменник q.
  2. Розробіть програму з використанням рекурсивної функції обчислення кількості цифр у десятковому натуральному числі а.
  3. Для одновимірного числового масиву довжиною n розробіть програму з використанням рекурсивної функції обчислення добутку значень його елементів.

п.5.3. МОДУЛІ