Функсияхо

Мо тагйирёбандахо, оператори 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 - ро фахмонед.

Дополнительная информация