4
77
• IV fəsil •
Proqramlaşdırma
•
F
UNKSİYA
Aşağıdakı proqram kodunu gözdən keçirin və onun hansı məsələni həll etdiyini
müəyyənləşdirin.
n =
abs
(
int
(
input
()))
a = (n // 100) % 10
b = (n // 10) % 10
c = n % 10
print
(a, b, c)
Nəticəni müzakirə edək:
– Birinci sətirdəki komandalar ardıcıllığını sözlərlə necə ifadə etmək olar?
Proqramçılar bir neçə yüz sətir olan proqram kodundan “baş çıxara” bilirlər.
Proqram sətirlərinin sayı artdıqca ümumi məntiqi tutmaq çox çətinləşir. Hər bir
operatorun nə etdiyi aydın olsa da, belə proqramlarda hansısa operatorun konkret
yerdə hansı məqsədlə istifadə edildiyini anlamaq çox çətin olur.
Belə proqramı
dəyişdirmək, yaxud düzəltmək də asan olmur.
Bu problemi həll etmək üçün proqram sadə əməliyyatları yerinə yetirən ayrıca
altproqramlara bölünür.
Beləliklə, yekun proqram ayrı-ayrı operatorlardan deyil, hər
birinin öz adı olan bitkin kod bloklarından ibarət olur. Altproqramlardan istifadə
olunması həm proqramın yazılması vaxtını qısaldır, həm proqram kodunun həcmini
azaldır, həm də proqramın strukturunu daha anlaşıqlı edir. Eyni zamanda bu yanaşma
proqramın yazılışında səhvlərin sayının azalmasına təsir göstərir.
Altproqramları, adətən, iki kateqoriyaya bölürlər:
prosedurlar və
funksiyalar.
Prosedur, sadəcə, hər hansı operatorlar ardıcıllığını yerinə yetirir. ALPLogo proq-
ramlaşdırma mühitində tanış olduğunuz altproqramlar əslində prosedurlar idi.
Funksiya isə müəyyən qiyməti hesablayır və həmin
qiyməti onu çağıran proqrama (altproqrama) qaytarır.
Bəzi proqramlaşdırma dillərində, o cümlədən, Python
dilində altproqramlar prosedur və funksiyalara bölün-
mür, onların hamısına funksiya kimi baxılır. Belə dillər-
də prosedur heç bir qiymət qaytarmayan funksiyadır.
F ə a l i y y ə t
1
17
Altproqramlar nədir və onlar proqramçıya hansı üstünlüklər verir?
input()
komandası nə edir?
•
Altproqram
•
Funksiya
•
Funksiyanı çağırmaq
•
Formal parametr
•
Faktik parametr
S ö z l ü k
78
Qeyd olunduğu kimi, hər bir funksiyanın
adı olur. Hər hansı funksiyanın yerinə
yetirilməsi üçün onun adına müraciət olunmalı, başqa sözlə,
funksiya çağırılma-
lıdır. Funksiyanı proqramın istənilən yerindən çağırmaq olar.
Python dilində müxtəlif hallar üçün çoxlu sayda funksiyalar vardır. Məsələn,
"Fəaliyyət" bölümündə verilmiş proqramda dörd funksiyadan istifadə olunub:
abs
(),
int
(),
input
() və
print
(). Bunlar Python dilinə daxil olan standart
funksiyalardir. Hər bir proqramlaşdırma dilində çoxlu sayda standart funksiyalar
olsa da, müəyyən məsələlərin həllində yeni funksiyalara ehtiyac olur. Təbii ki,
Python dilində yeni funksiyalar yaratmaq imkanı da vardır.
Python dilində yeni funksiyanın təyini def açar sözü ilə başlayır və ondan sonra
funksiyanın adı göstərilir. Addan sonra gələn açılan və bağlanan mötərizələr funksi-
yanı adi dəyişəndən fərqləndirir. İki nöqtə isə funksiyaya daxil olan komandaların
başlanğıcını qeyd edir. Məsələn, greeting() adlı sadə bir funksiya təyin edək:
def
greeting
():
print
(
'Xoş gəlmisiniz!'
)
Bu funksiyanı proqramın hər hansı yerindən çağırmaq üçün standart funksi-
yalarda olduğu kimi onun adını ayrıca operator kimi göstərmək lazımdır.
greeting()
Bu funksiyanın işinin nəticəsi həmişə eyni olur, çünki, riyazi dillə desək, bu
funksiyanın arqumenti yoxdur. Proqramlaşdırmada
belə funksiyalardan, demək olar
ki, istifadə olunmur. Adətən, funksiya onu çağıran proqramdan verilənlər alır.
Verilənlər funksiyaya
parametrlər şəklində ötürülür. Funksiya yaradılarkən onun
parametrlərinə ötürülən qiymətlər hələ məlum olmur. Yeni funksiya təyin olunarkən
onun adından sonra
formal parametrlər
göstərilir. Formal parametrlər ötürülən
verilənləri müəyyən edən ixtiyari dəyi-
şənlərdir. Onlar yalnız funksiyanın yerinə
yetirdiyi əməliyyatları təsvir etmək üçün
lazımdır.
Funksiya çağırılarkən onun adından
sonra mötərizədə ona ötürülən
faktik
parametrlər göstərilir. Funksiyanın operatorlarının yerinə yetirilməsi zamanı for-
mal parametrlər faktik qiymətlərlə əvəz olunur.
Bu deyilənləri bir nümunə üzərində izləyək. Bu nümunədə proqram daxil edilmiş
hicri ilini miladiyə, miladi ilini isə hicriyə çevirəcək və nəticəni ekranda göstərəcək.
def
salam
(s):
print
(s)
salam(
'Sabahınız xeyir!'
)
salam(
'Axşamınız xeyir!'
)
Formal
parametr
Faktik parametr
4
79
• IV fəsil •
Proqramlaşdırma
•
Bu zaman M = H – H / 33 + 622 və H = M – 622 + (M – 622) / 32 düsturlarından
istifadə ediləcək.
Burada M dəyişəni miladi ilini, H isə hicri ilini göstərir.
İki funksiya təyin edək: bunlardan biri – miladi_hicri() funksiyası para-
metr kimi qəbul etdiyi miladi ilini məlum düstur əsasında hicri ilinə, o biri –
hicri_miladi() funksiyası isə hicri ilini miladi ilinə çevirib ekrana çıxaracaq.
def
miladi_hicri
(S):
M =
int
(S)
H = M - 622 + (M - 622) // 32
print
(
'Hicri ili: '
, H)
def
hicri_miladi
(S):
H =
int
(S)
M = H - (H // 33) + 622
print
(
'Miladi ili: '
, M)
S =
input
(
'Miladi ili: '
)
miladi_hicri(S)
S =
input
(
'Hicri ili: '
)
hicri_miladi(S)
Bu nümunədə təyin olunan hər iki funksiya kənardan qəbul etdikləri qiymət
əsasında hesablama aparıb nəticəni ekrana çıxardır. Ancaq praktik məsələlərin
həllində çox zaman funksiyanın emal nəticəsində aldığı yeni qiyməti onu çağıran
proqrama qaytarması daha əlverişli olur. Bu məqsədlə Python dilində return
komandası nəzərdə tutulub. Bu komanda funksiyanın sonunda yazılır və ondan sonra
mötərizədə funksiyanın qaytarmalı olduğu qiymət göstərilir.
Bildiyiniz kimi, input() funksiyası klaviaturadan daxil edilən kəmiyyətin
tipindən asılı olmayaraq, həmişə sətir qaytarır. Aşağıda təyin olunan yeni
num_input
() funksiyasının qaytardığı qiymət isə ədəd olur.
def
num_input
(prompt):
typed =
input
(prompt)
# Daxil edilən sətir
# typed dəyişənində saxlanılır
num =
int
(typed)
#
Sətir ədədə çevrilir və
# num dəyişənində saxlanılır
return
num
# Dəyişənin qiyməti qaytarılır
a = num_input(
'a-nı daxil edin: '
)
b = num_input(
'b-ni daxil edin: '
)
print
(
'a * b ='
, a * b)