56–57-darslar. QISM DASTURLAR: FUNKSIYALAR VA PROTSEDURALAR
Dastur tuzish jarayonida ma’lum bir amallar majmuini dasturning turli qismlarida takrorlashga to‘g‘ri keladi. Dasturning mana shu amallar majmuini o‘z ichiga olgan qismi qism dastur deb ataladi. Qism dasturlar ma’lum bir vazifani bajaradi, lekin alohida tizimni tashkil etmaydi.
Qism dasturga murojaat etilganda, unga murojaat etgan asosiy dastur to‘xtaydi va boshqaruv qism dasturga o‘tadi. Qism dastur bajarilishi tugaganidan so‘ng, boshqaruv yana asosiy dasturga qaytadi.
1. Dasturlashda qism dasturlardan qanday foydalaniladi? 2. Qism dasturlar qanday ishlaydi?
3. Funksiya nima va u qanday ishlaydi?
4. Protsedura nima va u qanday ishlaydi?
Asosiy dasturda qism dasturlarni chaqirish quyidagi imkoniyatlarni beradi:
• Qism dastur zarurat tug‘ilganda chaqiriladi. U ayni bir kodni bir necha marta yozish zaruratini bartaraf qilib, butun dastur davomida ko‘p marta foydalanilishi mumkin. Bu kodning blokliligini oshiradi, tushunishni osonlashtiradi va xatolarni topishda
yordam beradi.
56–57-darslar. QISM DASTURLAR: FUNKSIYALAR VA PROTSEDURALAR
91
BUNI BILASIZMI? UY VAZIFASI
SAVOL VA TOPSHIRIQLAR
• Xato bor yoki yo‘qligini bitta kod blokining o‘zida tekshirsa bo‘ladi. Agar xato qism dasturda bo‘lsa, faqat qism dasturning o‘zini tuzatishga zarurat tug‘iladi. Agar qism dasturdan foydalanmasdan, kod bir necha joyda takror-takror yozilsa, u holda butun dastur bo‘ylab xatolarni qidirishga to‘gri keladi.
• Kodni faqat bitta joyda yangilash kerak bo‘ladi: Kiritilgan barcha tuzatishlar qism dastur chaqirilishi bilan amal qila boshlaydi.
Qism dasturning turlari
• Funksiya – ma’lum bir vazifani bajaruvchi, qandaydir nomga ega, bir yoki bir necha
qiymatni qabul qiluvchi, ishni tugatganidan keyin esa asosiy dasturga bir yoki bir
necha natija qiymatlarni qaytaruvchi qism dastur.
• Protsedura – funksiyaga o‘xshash ko‘p marta foydalanilishi mumkin bo‘lgan qism
dastur bo‘lib, yagona farqli jihati hech qanday qiymatni qaytarmaydi.
Python dasturlash tilining har xil masalalarni yechishga mo‘ljallangan bir necha foydali
standart funksiyalari mavjud.
Standart funksiyalar
print() – foydalanuvchi uchun ma’lumotlarni chiqaradi. Masalan, turli ma’lumotlar va hisoblash natijalarini.
input() – print() funksiyasining zidi, foydalanuvchilar kiritgan ma’lumotlarni dasturga uzatadi.
randint() – tasodifiy sonni chiqaradi. Masalan, dasturda tasodifiy son kerak bo‘lib qolganda ishlatiladi.
Keyinchalik standart funksiyalar bilan batafsilroq tanishib chiqamiz.
Funksiyani e’lon qilish va chaqirish
Har bir yaratilgan qism dasturga, xususan, funksiya hamda protseduraga albatta nom berish kerak va bu nom Pythonda define (ing. define – aniqlash) so‘zidan olingan def kalit so‘zi bilan boshlanadi.
Sintaksisi:
def funksiya_nomi ([parametrlar ro‘yxati]):
buyruqlar_bloki
def – funksiyani e’lon qiluvchi kalit so‘z.
funksiya_nomi – funksiya nomi.
parametrlar ro‘yxati – ushbu ro‘yxat bir necha parametrdan iborat bo‘lishi mumkin va
ular vergul bilan ajratib yoziladi.
buyruqlar_bloki – funksiya tanasi boshqa operatorlar kabi bitta xat boshi tashlab
yozilishi shart.
Funksiya nomi orqali chaqirilganda uning tarkibidagi buyruqlar ketma-ketligi bajariladi.
Shundan so‘ng dastur funksiya chaqirilgan satrga qaytadi va shu satrdan keyingi buyruqlarga o‘tadi.
92
IV BOB. DASTURLASH ASOSLARI
Misol. Xabarni chiqarish.
def welcome(): msg=’Xayrli kun! ‘ return msg
print(welcome())
Xayrli kun!
Protsedurani e’lon qilish
Funksiyaga qiymat uzatish
salomlashish nomli funksiya e’lon qilindi. xabar o‘zgaruvchisiga qiymat berish. Funksiyaning vazifasi – xabar o‘zgaruvchisi qiymatini qaytarish. Funksiyani chaqirib, ekranga chiqarish.
Pythonda protseduralar deyarli funksiyalardek yoziladi. Farqi shundaki, protseduralar hech qanday qiymatni qaytarmaydi. Quyida protseduraga misol keltirilgan:
def msg():
print(‘Bugun soat 14.00 da ota-
onalar majlisi!’)
>>> msg()
Bugun soat 14.00 da ota-onalar majlisi!
Funksiyaga qayta ishlashi uchun qiymatlar berish mumkin.
Misol. Aylananing radiusi kiritilganda, uning uzunligini topish dasturini tuzing.
aylana nomli funksiya e’lon qilindi, uning qabul qiluvchi qiymati – r. Aylananing uzunligi hisoblandi. Funksiya aylana uzunligini qaytaradi. Foydalanuvchi tomonidan kiritilgan radiusni butun qiymatga o‘zgartirish. Aylana nomli funksiya chaqirilmoqda. Aylana uzunligi chiqarilmoqda.
Misol. n faktorialini hisoblash dasturini tuzing. S=1*2*3*…*n=n!
factor nomli funksiya e’lon qilindi. Ko‘paytmaning birinchi qiymati kiritildi. Sikl 2 dan boshlab n+1 gacha,
ya’ni 1 marta takrorlanadi. res=1*2*…*n
res natijasini qaytaradi.
n ga qiymat beriladi.
n faktorialni hisoblovchi funksiya chaqirilib, ekranga natija chiqariladi.
def circle(r): PI=3.14
len=2*PI*r
return len
radius = int(input(‘Aylana radiusi: ‘)) uz= circle(radius)
print(‘Aylananing uzunligi: ‘, uz)
Aylananing radiusi: 4 Aylananing uzunligi: 25.136
def factor(n): res=1
for i in range(2,n+1): res*=i
return res
n=int(input(‘n sonini kiriting:’)) print(factor(n))
n sonini kiriting: 5 120
56–57-darslar. QISM DASTURLAR: FUNKSIYALAR VA PROTSEDURALAR
93
Rekursiya
Funksiyaning o‘zini o‘zi chaqirishiga rekursiya deyiladi va bunday funksiyalar rekursiv funksiyalar deb ataladi.
Rekursiv funksiyalar dasturlashning kuchli mexanizmi hisoblanadi, lekin ular har doim ham samarali emas. Chunki aksariyat hollarda xatolarga yo‘l qo‘yadi. Xatolar ichidan eng ko‘p tarqalgani – cheksiz rekursiya. Unda funksiyaning chaqiruv zanjiri cheksiz bo‘lib, kompyuter bo‘sh xotirasi tugamaguncha davom etaveradi. Cheksiz rekursiya ro‘y berishining sabablari:
– rekursiyada shartni noto‘g‘ri qo‘llash. Masalan, faktorialni hisoblashda if n==0 ni unutib qo‘ysak, factorial(0) funksiyasi factorial(–1)ni, factorial(–1) funksiyasi esa factorial(–2) va hokazolarni chaqiradi;
– rekursiv funksiyani noto‘g‘ri parametr bilan chaqirish. Masalan, factorial(n) funksiya factorial(n)ni chaqirsa, yana cheksiz zanjir yuzaga keladi.
Shu boisdan, rekursiv funksiyani yaratishda rekursiyani yakunlash sharti hamda rekursiyani qachon, qanday tugatish haqida o‘ylab ko‘rish lozim.
factor nomli rekursiv funksiya e’lon qilindi.
n==0 da funksiya 1 ni qaytaradi, aks
holda ishini davom ettiradi.
Funksiya o‘zi o‘zini chaqirib, res=n*(n-1)*…*3*2*1ni hisoblaydi, qachonki factor(0) bo‘lguncha.
res natijasini qaytaradi.
n ga qiymat beriladi.
n faktorialni hisoblovchi funksiya chaqirilib, ekranga natija chiqariladi.
?
2. n natural son berilgan. Kvadrati n dan kichik bo‘lgan barcha natural sonlarni chiqaruvchi dastur tuzing.
3. Bir birlik uzunlik ‘-’ ga teng. Berilgan n uzunlikdagi ‘-’ belgidan iborat chiziq chizuvchi dastur tuzing. Protseduradan foydalaning.
94
IV BOB. DASTURLASH ASOSLARI
1. Qism dastur nima?
2. Dasturda protsedura vа funksiyalar qanday maqsadda qo‘llaniladi? 3. Qism dasturning qanday turlari mavjud?
4. Qism dastur qanday afzalliklarga ega?
5. Protsedura vа funksiyaning farqi nimada?
6. Qachon funksiyaning o‘rniga protsedurani qo‘llash mumkin?
1. n va k butun musbat sonlar berilgan. n va k qatnashgan ushbu ifodani hisoblang.
Funksiyadan foydalaning.
def factor(n): if n==0:
return 1
else:res= n*factor(n-1) return res
n=int(input(‘n sonini kiriting: ‘)) print(factor(n))
n sonini kiriting: 5 120
UY VAZIFASI
SAVOL VA TOPSHIRIQLAR
Kiruvchi ma’lumot
Chiquvchi ma’lumot
n
n ta chiziq (‘-’)
5
——
58-dars. AMALIY MASHG‘ULOT
Misol. Berilgan uchta a, b va c sonlardan eng kattasini topish dasturini tuzing. Funksiyadan foydalaning.
1. ‘*’ belgisidan tomoni n ga teng kvadrat chizuvchi dastur tuzing. Protseduradan foydalaning.
2. Berilgan n sonining bo‘luvchilarini bitta qatorda probel orqali ajratib chiqaruvchi dastur tuzing. Protseduradan foydalaning.
3. Berilgan n sonini rim raqamlarida ifodalovchi dastur tuzing. Protseduradan foydalaning.
58-dars. AMALIY MASHG‘ULOT
95
def max(a, b):
a, b parametrlarni qabul qiluvchi max nomli funksiya e’lon qilindi.
ifa>b: return a
Agar a>b bo‘lsa, funksiya a ni qaytaradi.
else:return b
Aks holda, funksiya b ni qaytaradi.
def max3(a, b, c):
a, b va c parametrlarni qabul qiluvchi max3 nomli funksiya e’lon qilindi.
return max(max(a, b), c)
max3 nomli funksiya max funksiyasini max (a, b va c) parametrlar bilan qaytarmoqda.
a va b taqqoslanadi va eng kattasi topiladi, masalan, a, keyin bu eng katta a soni c bilan yana taqqoslanadi va funksiya ulardan kattasini qaytaradi.
a = int(input()) b = int(input()) c = int(input())
a, b va c ga qiymat beriladi.
print(max3(a,b,c))
3 ta sonning kattasini topuvchi funksiya chaqirilib, ekranga natija chiqariladi.
89 78 58 89
AMALIY
TOPSHIRIQLAR
Kiruvchi ma’lumot
Chiquvchi ma’lumot
n
n x n ta (‘*’) dan iborat kvadrat
3
*** *** ***
Kiruvchi ma’lumot
Chiquvchi ma’lumot
6
1236
Kiruvchi ma’lumot Chiquvchi ma’lumot 125 CXXV
4. Berilgan n soni xonalarining yig‘indisini hisoblash dasturini tuzing. Protseduradan foydalaning.
Kiruvchi ma’lumot Chiquvchi ma’lumot 125 8
5. Sport musobaqasida sportchilarning chiqishlari hakamlar tomonidan ballik tizimda baholandi. Yakuniy ballni olish uchun eng yuqori va eng past ball chiqarib tashlandi va qolgan uchta ballning o‘rtacha arifmetik qiymati hisoblandi. 5 nafar hakam tomonidan berilgan eng yuqori va eng past ballni hamda sportchi olgan ballni chiqaradigan dastur tuzing. Funksiyadan foydalaning.
Kiruvchi ma’lumot Chiquvchi ma’lumot
12345
15 3.00
6. Berilgan n soni xonalari raqamlarining sonini chiqaruvchi dastur tuzing. Kiruvchi ma’lumot Chiquvchi ma’lumot