Programma ta’minotini yaratish amalda murakkab jarayon hisoblanadi. Programma tuzuvchi programma kompleksini bir butunlikdagi va uning har bir bo‘lagining ichki mazmunini va ularning sezilmas farqlarini hisobga olishi kerak bo‘ladi.
Programmalashga tizimli yondoshuv shundan iboratki, programma
tuzuvchi oldiga qo‘yilgan masala oldindan ikkita, uchta va undan ortiq nisbatan kichik masala ostilarga bo‘linadi. O‘z navbatida bu masala ostilari ham yana kichik masala ostilariga bo‘linishi mumkin.
Bu jarayon toki mayda masalalarni oddiy standart amallar yordamida yechish
mumkin bo’lguncha davom etadi. Shu yo‘l bilan masalani dekompozitsiyalash
amalga oshiriladi.
Ikkinchi tomondan, programmalashda shunday holatlar kuzatiladiki, unda programmaning turli joylarida mazmunan bir xil algoritmlarni bajarishga to‘g‘ri keladi. Algoritmning bu bo‘laklari asosiy yechilayotgan masaladan ajratib olingan qandaydir masala ostini yechishga mo‘ljallangan bo‘lib, yetarlicha
5-mavzu.doc
Funksiyalar
Reja:
1. Funksiya parametrlari va argumentlari
2. Kelishuv bo’yicha argumentlar
3. Ko’rinish sohasi. Lokal va global o’zgaruvchilar
Tayanch iboralar: Funksiya parametrlari va argumentlari, kelishuv
bo‘yicha argumentlar, ko‘rinish sohasi. lokal va global o‘zgaruvchilar.
Programma ta’minotini yaratish amalda murakkab jarayon
hisoblanadi. Programma tuzuvchi programma kompleksini bir butunlikdagi va
uning har bir bo‘lagining ichki mazmunini va ularning sezilmas farqlarini hisobga
olishi kerak bo‘ladi.
Programmalashga tizimli yondoshuv shundan iboratki, programma
tuzuvchi oldiga qo‘yilgan masala oldindan ikkita, uchta va undan ortiq nisbatan
kichik masala ostilarga bo‘linadi. O‘z navbatida bu masala ostilari ham yana
kichik masala ostilariga bo‘linishi mumkin.
Bu jarayon toki mayda masalalarni oddiy standart amallar yordamida yechish
mumkin bo’lguncha davom etadi. Shu yo‘l bilan masalani dekompozitsiyalash
amalga oshiriladi.
Ikkinchi tomondan, programmalashda shunday holatlar kuzatiladiki, unda
programmaning turli joylarida mazmunan bir xil algoritmlarni bajarishga to‘g‘ri
keladi. Algoritmning bu bo‘laklari asosiy yechilayotgan masaladan ajratib
olingan qandaydir masala ostini yechishga mo‘ljallangan bo‘lib, yetarlicha
mustaqil qiymatga (natijaga) egadir. Misol uchun quyidagi masalani ko‘raylik:
Berilgan a 0 ,a 1 ,…,a 30 , b 0 ,b 1 ,…,b 30 c 0 ,c 1 ,…,c 30 va x,y,z haqiqiy
sonlar
yechish
30
xa+ x (a
1
0
29
2
(b ) a+…+
30
xc
(
1
z
30
)
29
30
) b+…+ y b+ y
29
)
1
...
c
30
30
0
z
(
xc
0
ifodaning qiymati hisoblansin.
Bu misolni yechishda kasrning surat va maxrajidagi ifodalar bir xil algoritm
bilan hisoblanadi va programmada har bir ifodani (masala osti) hisoblash uchun bu
algoritmni 3 marta yozishga to‘g‘ri keladi. Masaladagi 30darajali ko‘phadni
hisoblash algoritmini, masalan, Gorner algoritmini alohida, bitta nusxada yozib,
unga turli parametrlar bir safar a vektor va x qiymatini, ikkinchi safar b vektor va
y qiymatini hamda c vektor va (x+z) qiymatlari bilan murojaat qilish asosiy
masalani yechish mumkin bo‘ladi. Funksiyalar qo‘llanishining yana bir sababini
quyidagi masalada ko‘rishimiz mumkin – berilgan chiziqli tenglamalar sistemasini
Gauss, Kramer, Zeydel usullarining birortasi bilan yechish talab qilinsin. U holda asosiy programmani quyidagi bo‘laklarga bo‘lish maqsadga muvofiq bo‘lar edi:
tenglama koiffitsentlarini kiritish bo‘lagi, yechish usulini tanlash bo‘lagi, Gauss,
Kramer, Zeydel usullarini amalga oshirish uchun alohida bo’laklar, natijani chop
qilish bo‘lagi. Har bir bo‘lak uchun o‘z funksiyadir majmuasi yaratib, zarur
bo‘lganda ularga bosh funksiya tanasidan murojaatni amalga oshirish orqali bosh
masala yechish samarali hisoblanadi.
Bunday hollarda programmani ixcham va samarali qilish uchun C++ tilida
programma bo‘lagini alohida ajratib olib, uni funksiya ko‘rinishida aniqlash
imkoni mavjud.
Funksiya bu – C++ tilida masala yechishdagi kalit elementlaridan biridir.
Funksiya parametrlari va argumentlari:[1(177187), 3(5156), 4(6772)]
Programmada ishlatiladigan har qanday funksiya e’lon qilinishi kerak. Odatda
funksiyalar e’loni sarlavha fayllarda e’lon qilinadi va #include direktivasi
yordamida programma matniga qo‘shiladi. Funksiya e’lonini funksiya prototipi
tavsiflaydi (ayrim hollarda signatura deyiladi). Funksiya prototipi quyidagi
ko‘rinishda bo‘ladi:
();
Bu yerda funksiya ishlashi natijasida y tomonidan
qaytaradigan qiymatning turi. Agar qaytariladigan qiymat turi ko‘rsatilmagan
bo‘lsa, kelishuv bo‘yicha funksiya qaytaradigan qiymat turi int deb hisoblanadi,
vergul bilan ajratilgan funksiya parametrlarining turi va
nomlari ro‘yxati. Parametr nomini yozmasa ham bo‘ladi. Ro‘yxat bo‘sh bo‘lishi
ham mumkin. Funksiya prototiplariga misollar:
int almashsin(int,int);
double max(double x, double y);
void func();
void chop_etish(void);
Funksiya prototipi tushirib qoldirilishi mumkin, agar programma matnida
funksiya aniqlanishi uni chaqiradigan funksiyalar matnidan oldin yozilgan bo‘lsa.
Lekin bu holat yaxshi uslub hisoblanmaydi, ayniqsa o‘zaro birbiriga murojaat
qiluvchi funksiyalarni e’lon qilishda muammolar yuzaga kelishi mumkin.
Funksiya aniqlanishi – funksiya sarlavhasi va figurali qavsga (‘{‘,’}’)
olingan qandaydir amaliy mazmunga ega tanadan iborat bo‘ladi. Agar funksiya
qaytaruvchi turi void turidan farqli bo‘lsa, uning tanasida albatta mos turdagi
parametrga ega return operatori bo‘lishi shart. Funksiya tanasida bittadan ortiq
return operatori bo‘lishi mumkin. Ularning ixtiyoriy birortasini bajarish orqali
funksiyadan chiqib ketiladi. Agar funksiyaning qiymati programmada
ishlatilmaydigan bo‘lsa, funksiyadan chiqish uchun parametrsiz return operatori
ishlatilishi mumkin yoki umuman return ishlatilmaydi. Oxirgi holda funksiyadan
chiqish – oxirgi yopiluvchi qavsga yetib kelganda ro‘y beradi.
Funksiya programmaning birorta modulida yagona ravishda aniqlanishi
kerak, uning e’loni esa funksiyani ishlatadigan modullarda necha marta yozilishi mumkin. Funksiya aniqlanishida sarlavhadagi barcha parametrlar nomlari yozilishi
shart.
Odatda programmada funksiya ma’lum bir ishni amalga oshirish uchun
chaqiriladi. Funksiyaga murojaat qilganda, u qo‘yilgan masalani yechadi va o’z
ishini tugatishida qandaydir qiymatni natija sifatida qaytaradi
Funksiyani chaqirish uchun uning nomi va undan keyin qavs ichida
argumentlar ro‘yxati beriladi:
(, ,..., );
Bu yerda har bir funksiya tanasiga uzatiladigan va keyinchalik
hisoblash jarayonida ishlatiladigan o‘zgaruvchi, ifoda yoki o’zgarmasdir.
Argumentlar ro‘yxati bo‘sh bo‘lishi mumkin.
Funksiyalar ham o‘z tanasida boshqa funksiyalarni, o‘zini ham chaqirishi
mumkin. O‘z tanasida o‘zini chaqiradigan funksiyalarga rekursiv funksiyalar
deyiladi.
Oldingi boblarda ta’kidlab o‘tilganidek, C++ tilidagi har qanqay
programmada albatta main() bosh funksiyasi bo‘lishi kerak. Ayni shu funksiyani
yuklagich tomonidan chaqirilishi bilan programma bajarilishi boshlanadi.
Quyidagi rasmda bosh funksiyadan boshqa funksiyalarni chaqirish va
ulardan qaytish sxemasi ko‘rsatilgan.
int main ()
{
int x, b;
Bool a;
Char s;
Short c;
…
F1(x,s);
A=(x>0);
…
F2(a,b,c);
…
return 0;
}
void F1(int Radius, char symbol)
{
…
return;
}
int F2(bool YesNo, int Count, short Key )
{
…
return 0;
}
1rasm.
Bosh funksiyadan boshqa funksiyalarni chaqirish va qaytish
Programma main() funksiyasini bajarishdan boshlanadi va “f1(x,y);” –
funksiya chaqirishgacha davom etadi va keyinchalik boshqaruv f1(x,y) funksiya
tanasidagi amallarni bajarishga o‘tadi. Bunda Radius parametrining qiymati
sifatida funksiya x o‘zgaruvchi qiymatini, Symbol parametri sifatida y
o‘zgaruvchisining qiymati ishlatiladi. Funksiya tanasi return operatorigacha
bajariladi. Return operatori boshqaruvni main() funksiyasi tanasidagi f1() funksiyasi chaqirilgan operatordan keyingi operatorga o‘tishni ta’minlaydi, ya’ni
funksiyadan qaytish ro‘y beradi. Shundan keyin main() funksiyasi operatorlari
bajarilishda davom etadi va “f2(a,b,c);” – funksiya chaqirishi orqali boshqaruv f2()
funksiya tanasiga o‘tadi va hisoblash jarayonida mos ravishda YesNo sifatida a
o‘zgaruvchisining, cout sifatida
o‘zgaruvchisining va key sifatida c
o‘zgarchuvchisining qiymatlari ishlatiladi. Funksiya tanasidagi return operatori
yoki oxirgi operator bajargandan keyin avtomatik ravishda bosh funksiyaga
qaytish amalga oshiriladi.
Aksariyat hollarda main() funksiyasining parametrlar ro‘yxati bo‘sh bo‘ladi.
Agar programmani ishga tushirishda, buyruq satrida ma’lum bir parametrlarni
uzatish (berish) zarur bo‘lsa, main() funksiyasining sintaksisi o‘zgaradi:
int main(int argc, char* argv[]);
Bu yerda argc – uzatiladigan parametrlar soni, argv[] birbiridan
punktuatsiya belgilari (va probel) bilan ajratilgan parametrlar ro‘yxatini o‘z ichiga
olgan massivga ko‘rsatkich.
Quyida funksiyalarni e’lon qilish, chaqirish va aniqlashga misollar
keltirilgan:
// funksiyalar e’loni
int mening_funksiyam(int Number, float Point);
char Belgini_uqish();
void bitni_urnatish(short Num);
void Amal_yoq(int,char);_
// funksiyalarni chaqirish
result= mening_funksiyam (Varb1,3.14);
symb=Belgini_uqish();
bitni_urnatish(3);
Amal_yoq(2,Smb1);
// funksiyalarni aniqlash
int mening_funksiyam (int Number, float Point);
{int x;
…
return x;}
char Belgini_uqish();
{
char Symbo1;
cin>>Symbo1;
return Symbo1;
};
void bitni_urnatish(short number)
(global_bit=global_bit|number;};
void Amal_yoq(int x, char ch){};
Funksiyaning programmadagi o‘rnini yanada tushunarli bo‘lishi uchun son
kvadratini hisoblash masalasida funksiyadan foydalanishni ko’raylik. Funksiya prototipini sarlavha.h sarlavha faylida joylashtiramiz:
long Son_Kvadrati(int);
Asosiy programmaga ushbu sarlavha faylini qo‘shish orqali
Son_Kvadrati() funksiya e’loni programma matniga kiritiladi:
#include
#include “sarlavha.h”
int main()
{
int uzgaruvchi=5;
cout<
long Son_kvadrati(int);
int main()
{
int uzgaruvchi=5;
cout<”;
cin>>n;
cout<<’[‘<> sarlavha faylida joylashgan(3ilova qarang):
#include
#include
void chop_qilish (double Numb, double aniqlik=1,bool bayroq=true);
int main()
{double Mpi=3.141592654;
chop_qilish(Mpi,4, false);
chop_qilish(Mpi,2);
chop_qilish(Mpi);
return 0;
}
void chop_qilish(double Numb, double aniqlik=1,bool bayroq=true)
{if(!bayroq)Numb=fabs1(Numb);
Numb=(int)(Numb*pow(10,aniqlik));
Numb=Numb/pow(10,aniqlik);
cout<
// funksiya prototipi
int sum (int a; int b);
int main()
{
// lokal o’zgaruvchi
int x=r;
cout<
int f1();
int f2();
int main()
{
cout<
//global o’zgaruvchi e’loni
int test=100;
void Chop_qilish(void);
int main()
{
//lokal o’zgaruvchi e’loni
int test=10;
//global o’zgaruvchi chop qilish funksiyasini chaqirish
Chop_qilish();
cout<<”Lokal o’zgaruvchi: “<
Функции
Функции
Функции
Функции
Функции
Функции
Функции
Функции
Функции
Функции
Материалы на данной страницы взяты из открытых истончиков либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.