59–60-darslar. FUNKSIYALAR VA O‘ZGARUVCHILAR
6
Har bir o‘zgaruvchi e’lon qilinganda, u dasturda qandaydir muhim vazifani bajaradi va dasturning qaysidir elementlari bilan bog‘lanadi. Funksiya ichida e’lon qilingan o‘zgaruvchilar (lokal o‘zgaruvchilar) va funksiya tashqarisida e’lon qilingan o‘zgaruvchilar (global o‘zgaruvchilar)ning ahamiyatlari ham turlicha.
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?
Lokal o‘zgaruvchilar
Lokal o‘zgaruvchilar faqatgina funksiya ichida ahamiyatga ega bo‘lib, asosiy dastur va boshqa funksiyalar ichida ishlamaydi. Shuning uchun funksiya tashqarisida lokal o‘zgaruvchiga murojaat etilganda, xatolik ro‘y bergani haqida xabar chiqariladi.
Tayanch tushunchalar
Lokal o‘zgaruvchilar – faqat o‘zlari eʼlon qilingan qism dasturda faol bo‘ladigan o‘zgaruvchilar.
Global o‘zgaruvchilar – butun dastur davomida faol bo‘ladigan o‘zgaruvchilar.
96
IV BOB. DASTURLASH ASOSLARI
BUNI BILASIZMI?
Lokal o‘zgaruvchilar – bu o‘zlari eʼlon qilingan qism dasturda faol bo‘ladigan o‘zgaruvchilar. Ularni muayyan funksiya doirasida qo‘llash mumkin, shu sababli faqat shu funksiya doirasidagina amal qiladi. Lokal o‘zgaruvchilardan foydalanish o‘zgaruvchining qiymati dasturning boshqa qismlarida tasodifan o‘zgarib qolishi xavfini kamaytiradi.
>>> def val(): a=10
print(a) >>> val()
val nomli funksiya e’lon qilindi. Funksiya ichida a lokal o‘zgaruvchi e’lon qilindi va unga qiymat berildi hamda a ning qiymatini ekranga chiqarish buyrug‘i berildi.
Asosiy dasturda val nomli funksiya chaqirilganda, ekranga a ning qiymatini chiqaradi.
10
>>> print(a)
Asosiy dasturda a ning qiymati ekranga chiqarish buyrug‘i berilsa, xatolik haqidagi xabar chiqadi. Sababi a o‘zgaruvchi – funksiya ichida e’lon qilingan lokal o‘zgaruvchi, asosiy dasturda ahamiyatga ega emas.
Traceback (most recent call last): File «<pyshell#15>», line 1, in <module>
print(a) NameError: name ‘a’ is not defined
Global o‘zgaruvchilar
Global o‘zgaruvchilar butun dastur davomida faol bo‘ladigan o‘zgaruvchilardir. Ular qism dasturdan tashqarida, ya’ni asosiy dasturda e’lon qilinadi. Odatda, ularni modullarni import qilgandan keyin, kodning boshlanishida eʼlon qilish kerak. Ularni odatiy o‘zgaruvchilar kabi chaqirish mumkin.
>>> b=5
>>> def val2():
print(b) >>> val2()
b global o‘zgaruvchi e’lon qilindi va 5 qiymat berildi.
val2 nomli funksiya e’lon qilindi.
Funksiya ichida b ning qiymatini ekranga chiqarish buyrug‘i berildi.
Asosiy dasturda val2 nomli funksiya chaqirilganda, ekranga b ning qiymatini chiqaradi.
5
>>> print(b)
b global o‘zgaruvchiga dasturning ixtiyoriy qismida: asosiy dasturda ham, qism dasturda ham murojaat qilish mumkin va u natijani chiqaradi.
5
Global o‘zgaruvchining qiymatini o‘zgartirish
Agar funksiyadа global o‘zgaruvchining qiymatini o‘zgartirishgа to‘g‘ri kelsa, u holda funksiyada “global” kalit so‘zi yordamida o‘zgaruvchini yana qayta eʼlon qilish zarur.
>>> b=5
>>> def val3():
global b b=b+1
print(b) >>> val3()
b global o‘zgaruvchi e’lon qilindi va 5 qiymat berildi. val3 nomli funksiya e’lon qilindi.
b o‘zgaruvchining qiymatini o‘zgartirish va uni butun dasturda ahamiyatli qilish uchun u funksiya ichida global sifatida qayta e’lon qilinadi.
Funksiya ichida b ning qiymatini ekranga chiqarish buyrug‘i berildi.
Asosiy dasturda val3 nomli funksiya chaqirilganda, ekranga b ning qiymatini chiqaradi.
6
59–60-darslar. FUNKSIYALAR VA O‘ZGARUVCHILAR
97
>>> print(b)
b global o‘zgaruvchiga asosiy dasturda murojaat qilinganda ham natija sifatida 5 ni emas 6 ni chiqaradi, sababi u funksiya ichida global sifatida e’lon qilingan.
6
O‘zgaruvchi funksiya parametr sifatida
Agar o‘zgaruvchi funksiya parametr sifatida ishlatilsa, uning qiymati lokal o‘zgaruvchining yangi qiymati sifatida qabul qilinadi.
?
2. a va b natural sonlari berilgan. a va b sonlaridan kattasini topish funksiyasini tuzing. Funksiyadan foydalanib, a, b va c sonlari ichidan kattasini topish dasturini tuzing.
61-dars. AMALIY MASHG‘ULOT
Misol. Berilgan ikkita sonning eng katta umumiy bo‘luvchisi (EKUB)ni topish dasturini tuzing. Funksiyadan foydalaning.
Berilgan ikkita sonning eng katta umumiy bo‘luvchisi (EKUB)ni topishning eng oddiy usuli maktab darsliklarida ko‘rsatib o‘tilgan bo‘lib, bunda ikkala son tub bo‘luvchilarga ajratiladi va ulardan umumiylari ko‘paytirib chiqiladi.
98
IV BOB. DASTURLASH ASOSLARI
1. Funksiyaning parametrlari nima?
2. Funksiyaning tanasida qaysi kodlar yoziladi?
3. Lokal o‘zgaruvchi deb nimaga aytiladi?
4. Global o‘zgaruvchi deb nimaga aytiladi?
5. Lokal va global o‘zgaruvchilarning farqi nimada?
1. n natural soni berilgan. S=1*5+2*6+3*7+…+n*(n+4) ifodani hisoblash dasturini protsedura yordamida tuzing.
60=2*2*3*5 21=3*7 EKUB(60,21)=3
Bu usul matematikada qulay, lekin dasturlashda undan foydalanish noqulay va sekin kechadi. Shu sababli, Yevklid algoritmidan foydalaniladi.
>>> def val4(d): print(d)
d=100
print(d) >>> c=200
>>> val4(c)
d ning qiymati val4 nomli funksiya qaysi qiymat bilan chaqirilsa, shu qiymatga teng, yaʼni c ga teng.
Funksiya ichida parametr sifatida kelgan d ning qiymatini ekranga chiqarish buyrug‘i berildi.
Lokal o‘zgaruvchi d ga yangi qiymat berildi.
d lokal o‘zgaruvchining qiymati ekranga chiqarildi.
Global o‘zgaruvchi c e’lon qilindi.
Asosiy dasturda val4 nomli funksiya c parametr bilan chaqirilganda, birinchi parametr sifatida kelgan 200 ni, keyin esa lokal o‘zgaruvchiga yangi berilgan qiymat 100 ni chiqaradi.
200 100
UY VAZIFASI
SAVOL VA TOPSHIRIQLAR
Yevklid algoritmida 2 ta usuldan foydalaniladi.
1-usul. Ikkita sonning kattasidan kichigi ayirib boriladi va ayirma kichik sondan kichik bo‘lib qolsa, ularning o‘rni almashtiriladi.
1) 60–21=39; 2) 39–21=18; 3) 21–18=3.
EKUB(60,21)= 3
2-usul. Qadamlar sonini kamaytirish uchun ayirish o‘rniga qoldiqli bo‘lishdan
foydalanish mumkin.
1. Ikkita sonning kattasini kichigiga bo‘lib, qoldiq topiladi.
2. Ularning o‘rni almashtiriladi.
3. 1- va 2-qadamlar sonlardan biri nol bo‘lguncha davom ettiriladi. 4. Oxirida qolgan son shu ikki son uchun EKUB bo‘ladi. 60/21=2*21+ 18 qoldiq
21/18=1*18+3 qoldiq
18/3=6*3+0 qoldiq
EKUB(60,21)= 3
1. Berilgan to‘rtta sonning eng kichigini topuvchi dastur tuzing. Buning uchun min4 (a, b, c, d) funksiyasini yarating.
2. Berilgan a (haqiqiy) sonining k (butun) darajasini topuvchi dastur tuzing. Buning uchun daraja (a, k) funksiyasini yarating.
3. Inglizcha harf va raqamlardan iborat satr berilgan. Ushbu satr qancha raqamdan iboratligini hisoblovchi dastur tuzing.
61-dars. AMALIY MASHG‘ULOT
99
def ekub(a, b): whilea!=0andb!=0:
a, b parametrlarni qabul qiluvchi ekub nomli funksiya e’lon qilindi.
Sikl tanasi buyruqlari a va b 0 ga teng bo‘lguncha takrorlanadi: 1-sikl. a = 60; b =21
2-sikl. a = 18; b =21
3-sikl. a = 18; b =3
4-sikl a = 0; b = 3 sikldan chiqadi.
ifa>b: a%=b
Agar a soni b dan katta bo‘lsa, a/b qoldig‘ini a ga o‘zlashtiradi: 1-sikl. 60>21 -> a=60%21=18
3-sikl. 18>3 -> a=18%3=0
else:b%=a
Aks holda, b/a qoldig‘ini b ga o‘zlashtiradi: 2-sikl. 18<21 b=21%18=3
ekub_q=a+b
return ekub_q a = int(input())
b = int(input()) print(ekub(a,b))
ekub_q=0+3=3 EKUB ni hisoblaydi.
ekub_q qiymatni qaytaradi.
a, b ga qiymat beriladi.
2 ta son EKUBining funksiyasi chaqirilib, ekranga natija chiqariladi.
60 21 3
AMALIY
TOPSHIRIQLAR
Kiruvchi ma’lumot Chiquvchi ma’lumot jdf423h4545b5213b8u58hkj2k32 17
4. Berilgan sonni akslantiruvchi dastur tuzing. Masalan, 123 dan 321 ni hosil qiling. Funksiyadan foydalaning.
5. 0 bilan tugaydigan sonlar ketma-ketligi berilgan. Uning raqamlari yig‘indisini sikl ishlatmagan holda hisoblash dasturini tuzing.
Masalan, 1 7 9 0 = 17
6. Tonna, kilogramm va grammlarda berilgan birlikni grammga aylantirish funksiyasini yozing.
Kiruvchi ma’lumot Chiquvchi ma’lumot
tonna=14
kg=32 14032125 g g=125