Печать
Категория: C++
Просмотров: 819

Мо тағйирёбандахо, оператори if, сиклҳоро аз худ намудем. Акнун навбати омӯхтани функсияҳо (function) расидааст. Пеш аз ҳама муҳим аст, ки ба чунин саволи ғоявӣ ҷавоб диҳем: барои чӣ? Барои чӣ функсияҳо лозиманд? Функсияҳо татбиқи бисёр доранд. Масалан, дар барнома метавонад ягон қисми коде мавҷуд бошад, ки он дар чил ҷои ин барнома вомехӯрад, такрор меёбад. Агар ҳамин қисми кодро дар шакли функсия иҷро кунем, ҳаҷми барнома мухтасар мешавад, намуди он соддатар мегардад. Дигар мақсад аз истифодаи функсияҳо ин аст, ки барномаи мураккабро ба қисмҳои содда тақсим карда, барои ҳар як қисми он функсияи алоҳида тартиб додан мумкин аст. Албатта, ислоҳ намудан, дигаргун кардан, санҷидан ва идораи ингуна функсияҳо нисбат ба кор бо барномаи калону мураккаб осон аст. Масалан, ягон барнома бояд ҳисобҳои якчанддавраи бухгалтериро иҷро кунад. Табиист, ки дохилнамоии қиматҳои ибтидоӣ, даврҳои коркарди маълумот ва ба чоп баровардани натиҷаҳоро дар шакли функсияҳои алоҳида иҷро намоем. Агар ягон қадами ҳисобкуниро тағйир додани шавем бо функсияи мувофиқ кор мекунему халос, дар ин ҳолат зарурияти расидан ба функсияҳои дигар нест.

Ҳар як функсияе, ки мо месозем бояд тимсол (прототип, prototype) дошта бошад. Тимсол ба компилятор нақл мекунад, ки функсия, баъди иҷрои кораш, чиро бозмегардонад, номи функсия чӣ аст ва ба функсия, пеш аз ба кор шурӯъ намуданаш, чӣ хел қиматҳоро додан зарур аст. Ибораи "функсия чиро бозмегардонад" маънои онро дорад, ки функсия баъди итмоми кори худ метавонад ягон маълумотро ҳосил кунад ва он маълумот ба ягон тағйирёбандаи намуди мувофиқ бахшида шуда метавонад. Қимате, ки функсия онро қабул мекунад одатан аргументи функсия номида мешавад.

Сохтори умумии тимсоли функсия чунин аст:

return-type function_name(arg_type arg); 

Дар ин ҷо return-type - намуди (type) қимате, ки функсия бозмегардонад, function_name - номи функсия, arg_type - намуди аргументи функсия ва arg - номи ин аргумент. Қайд мекунем, ки дар охири тимсол бояд нуқтавергул (;) истад. Мисол:

//namuna13.cpp
using namespace std;
#include <iostream>
int kv(int a);
int main() {
int x, y;
x= -17;
y=kv(x);
cout<<"Kvadrati "<<x<<" barobar ast ba "<<y<<endl;
cout<<"Kvadrati "<<45<<" barobar ast ba "<<kv(45)<<endl;
return 0;
}
int kv(int a) {
int b=a*a;
return b;
}

Дар тимсол int kv(int a); мо нишон додаем, ки номи функсияе, ки мо сохтанием kv мебошад. Барои кори он ягон адади бутунро ба он роҳӣ кардан (фиристодан) зарур аст ва ин адад дар тағйирёбандаи a нигоҳ дошта мешавад. Баъди итмоми кори худ функсияи мо адади бутунро (int) бозмегардонад. Қайд мекунем, ки дар охири тимсол нуқтавергул (;) истодааст. Дар y=kv(x); қимати тағйирёбандаи x, ки ба функсияи main тааллуқ дорад, ба тағйирёбандаи a, ки ба функсияи kv тааллуқ дорад, бахшида мешавад. Яъне, акнун қимати a ба -17 баробар аст. Баъди ба a қимат бахшидан, квадрати он ҳисоб шуда, ба b бахшида мешавад. Ба воситаи return b функсияи kv қимати b-ро ба функсия main бозмегардонад, ки дар main он ба y бахшида мешавад. Хулоса, дар y квадрати x. Айнан ҳамин хел квадрати адади 45 хисоб карда мешавад, лекин он ба тағйирёбандае бахшида нашуда, бевосита ба экран бароварда мешавад.

Мисоли дигар:

//namuna14.cpp
using namespace std;
#include <iostream.h>
#include <math.h>
float hypot(float a, float b);
int main() {
float x, y,z;
cout<<"Darozii kateti yakum: ";
cin>>x;
cout<<"Darozii kateti duyum: ";
cin>>y;
z=hypot(x,y);
cout<<"Darozii hypotenuza: "<<z<<endl;
cout<<"Agar darozii kateti yakum "<<x;
cout<<" va darozii kateti duyum "<<y<<"boshad,";
cout<<kv(x,y)<<endl;
return 0;
}
float hypot(float a, float b) {
float y;
y=sqrt(a*a+b*b);
return y;
}

САВОЛҲО БАРОИ МУСТАХКАМКУНӢ
1. Мақсад аз истифодаи функсияҳо дар чист?
2. Тимсоли функсияро дар куҷо бояд навишт ва он аз худи функсия бо чӣ фарқ мекунад?
3. Иваз кардани номи тағйирёбандаҳои дохили як функсия ба функсияҳои дигар ягон таъсир дорад? Чаро?
4. Вазифаи фармони #include - ро фаҳмонед.