Nostandart funksiyalar.
Funksiyani e’lon qilish va aniqlash Yuqorida qayd qilganimizdek, funksiya - bu qism dastur yoki asosiy (bosh) dasturga yordamchi dastur hisoblanadi. Dastur tarkibida, xususiy holda main() funksiyasi tarkibida boshqa funksiyaga (qism dasturga) murojaat qilish uchun o„sha funksiya avval e‟lon qilinishi, so„ngra aniqlanishi lozim. Funksiyani e‟lon qilish deyilganda main() funksiyasidan oldin funksiyaning turini, ya‟ni qabul qiladigan qiymatlari turini, nomini, qavs ichida parametrlari(argumentlari)ni turlarini ko’rsatib yozib chiqish tushuniladi va funksiyadan foydalanishda kompilyator bu ma‟lumotlarni inobatga oladi. Funksiya e’loni uning prototini yoki signaturasi ham deyiladi. Funksiyani aniqlash esa uning qanday masalani yechayotganligini buyruqlar yordamida ko’rsatish yoki funksiya sarlavhasiga uning tanasini qo„shib yozish tushuniladi. Funksiya prototinining umumiy ko„rinishi quyidagicha Funksiya turi funksiya nomi (turlari ko„rsatilgan argumentlar ro’yxati); Bunda funksiya turi hozirgacha bizga ma’lum bo’lgan turlardan biri bo„ladi. Bu tur funksiya qaysi turga mansub qiymat qabul qilishiga qarab tanlanadi. Funksiya nomi u yechadigan masala mazmuniga mos holda tanlanadi. Masalan, kvadrat tenglamani yechayotgan bo„lsa, ktye, yig„indini hisoblayotgan bo’lsa, summa, natural sonning faktorialini hisoblayotgan bo’lsa, fak kabi tanlalanishi mumkin. Funksiya turi va nomi probel bilan ajratiladi. Funksiya nomidan keyin qavs ichida turlari ko„rsatilgan argumentlari(parametrlari) ko„rsatiladi va qavs yopilgach albatta (;) qo„yiladi. Qaysidir dasturdan(xususiy holda qaysidir funksiyadan) biror funksiyaga murojaat qilinsa, murojaat bolgan funksiyaning tanasidagi hisoblash ishlari bajarilib, hisoblash natijasi o„sha murojaat bo„lgan joyga qaytariladi. Aynan qaytarilayotgan qiymat turi bilan funksiya turi bir xil bo‘lishi kerak. Aks holda kompilyator xato sodir bo„lganligi haqida xabar beradi. Bundan buyon funksiya tanasi bajarilgandan keyin qaytariladigan qiymatni funksiyaga qaytariladigan qiymat yoki qisqacha qilib qaytariladigan qiymat deb ataymiz. Endi funksiya prototinini e’lon qilish usullari bilan tanishamiz. Funksiya prototini argumentlarining nomlarini ko„rsatmasdan, faqat turlarini ko„rsatish yo„li bilan ham e’lon qilish mumkin. Chunki ular formal parametrlar. Masalan, float bo’luvchi (int, float, char); Bunda bo„luvchi nomli haqiqiy turli funksiya e‟lon qilindi va u uchta argumentga ega bo„lib, ular har uchalasi uch xil turli. C++ dasturlash tilida bunga ruxsat etiladi. Lekin dastur tushunarli bo’lishi uchun funksiya prototinini e‟lon qilishning bu usulidan foydalanmaslik tavsiya etiladi. Funksiya prototipidagi parametrlar formal parametrlar bo„lsa ham ularni quyidagicha ko„rsatib e’lon qilish dastur mohiyatini tushunishni yengillashtiradi. Float bo„luvchi (int x, float y, char z); Yuqorida qayd qilinganidek, funksiyaga qaytariladigan qiymat turi ham e‟lon qilinishi kerak. Agar funksiya prototipida uning turi ko’rsatilmagan bo„lsa, C++ ning ba‟zi kompilyatorlari unga avtomatik tarzda int turini beradi. Masalan, funksiya prototipi fak (int n) ; kabi e‟lon qilingan bo„lsa, qaytariladigan qiymat butun turli deb qabul qilinadi. Ammo funksiya turini ko„rsatmagandan ko„ra ko„rsatish yaxshiroq xatto bu tur int bo„lsa ham. Endi funksiyani aniqlash jarayoni bilan tanishamiz. Funksiyani aniqlovchi matn ikki qismdan iborat, ya‟ni funksiya sarlavhasidan va tanasidan iborat bo’ladi. Funksiya sarlavhasi yozuvi uning prototipi yozuvi bilan bir xil bo„ladi. Faqat birinchidan, argumenti nomi aniq yozilishi shart, ikkinchidan, funksiya sarlavhasini yozib bolgach qavsdan keyin (;) qo„yilmaydi. Funksiya sarlavhasidan keyin figurali qavs ({) ochiladi va shundan so„ng funksiya tarkibida foydalaniladigan qo„shimcha o’zgaruvchilar, ya‟ni asosiy dasturda e‟lon qilinmagan o’zgaruvchilar turlarini ko„rsatib e’lon qilinadi hamda funksiya yechayotgan masalaga taalluqli buyruqlar ketma-ketligi asosiy dasturda bo„lgani kabi bir-birlaridan (;) bilan ajratilgan holda yoziladi. Oxirida agar funksiyaning qiymati chaqiriq byurug’i bo’lgan joyga qaytarilishi kerak bo„lsa return operatori yozilib probel qo’yiladi hamda qiymati qaytarilayotgan o„zgaruvchi yoki ifoda yozilib, (;) quyiladi hamda figurali qavs (}) yopiladi. Funksiyaning ushbu figurali qavslar ({}) orasidagi qismi uning tanasi deyiladi. 148 Misol. Binomial koeffitsentni aniqlash dasturini tuzing. Ma’lumki, binomial koeffitsent ( ) formula bilan topiladi.
1 #include
2 using namespace std;
3 int fak(int n);
4 int main()
5 { 6 int n,m,nf,mf,nm;
float c;
7 cin>>n>>m;
8 nf=fak(n); mf=fak(m); nm=fak(n-m);
9 c=nf/(mf*nm);
10 cout<<"\nc="<11 system ("pause");
12 return 0; 13 }
14 int fak(int n)
15 { int f=1, i=1;
16 while(i<=n) {f=f*i; i++;}
17 return f; 18 }
Dasturning 3-satrida butun turli fak nomli funksiya prototipi e‟lon qilindi va u bitta butun turli n parametrga ega. int main () funksiyasi tanasi tugagandan keyin fak nomli funksiya 14-satrdan 18-satrgacha aniqlandi. Demak, funksiya biror funksiya tanasidan tashqarida aniqlanishi keak. Lekin funksiya tanasidan boshqa funksiya tanasiga murojaat qilish mumkin. 14-satr fak nomli funksiya(yordamchi dastur)ning sarlavhasi deyiladi. U funksiya prototipi bilan bir xil. Faqat sarlavha oxirida, ya‟ni qavsdan keyin (;) belgisi qo„yilmagan. 15 va 18 satrlardagi figurali qavslar fak funksiyasining blok belgilari. Dasturning 15- satridan 18-satrigacha bo„lgan qismi fak nomli funksiyaning tanasi deyiladi. Bundan buyon tarkibida boshqa funksiyaga murojaat byurug„i bo„lgan dasturni asosiy dastur deb, murojaat bo„layotgan funksiyani esa yordamchi dastur(poddastur) deb ham ataymiz. Demak, dasturning 4- satridan 13-satrigacha bo„lgan qismi asosiy dastur, 14-satridan 18- satrigacha bo„lgan qismi esa yordamchi dastur hisoblanadi. Asosiy dasturning 8-satrida uchta chaqiriq byuruqlari (yoki funksiyaga murojaat byurulari) berilgan. Ulardan biri, masalan, nf=fak(n); byurug„ini tahlil qilaylik. C++ bu buyruqni uchratgach, dastur bajarilishini 15-satrdan davom ettiradi, ya‟ni fak nomli funksiyaning tanasini bajaradi. Bunda 15 va 16-satrlarda n! hisoblanadi. n! ning natijaviy qiymatini butun turli f o„zgaruvchi oladi. 17-satrdagi return f; byurug„i f o„zgaruvchining qiymatini murojaat bo„lgan joyga qaytarishni ta‟minlaydi.
Natijada nooshkor holda nf=f qiymat berish byurug„i bajarilib, keyingi mf=fak(m) byuruqni bajarishga o„tiladi.
Xulosa: demak, qism dastur tanasida bajarilgan hisob natijalarini return operatori va undan keyin yozilgan o„zgaruvchi yoki ifoda yordamilda asosiy dasturga olib chiqiladi. Funksiya prototipi, funksiya sarlavhasi va chaqiriq buyruqlaridagi parametrlar nomlarining har xil bo„lishi dastur bajarilishiga hech qanday ta‟sir qilmaydi. Chunki funksiya prototipi va aniqlanishidagi argumentlar (bizning dasturimizda n parametr) formal (nomiga turgan) parametrlar bo„lib, ularning qiymati shu funksiyaga murojaat bo„lguncha aniq bo„lmaydi. Demak, yuqorida keltirilgan dastur quyidagi ko„rinishda ham bexato ishlaydi.
#include
using namespace std;
int fak(int s);
int main()
{ int n, m, nf, mf, nm; float c;
cin>>n>>m; nf=fak(n); mf=fak(m); nm=fak(n-m); c=nf/(mf*nm);
cout<<"\nc="<system ("pause");
return 0; }
int fak(int y)
{in t f=1, i=1; while(i<=y) {f=f*i; i++;};
return f; }
Lekin zaruriyat bo„lmaganda bu usuldan foydalanmaslik tavsiya etiladi, chunki dasturni tushunish qiyinlashadi
Do'stlaringiz bilan baham: |