5-ma’ruza. Funksiyalar
Maqsad:
Parametrli funksiyalar;
Qiymat qaytaruvchi funksiyalar;
Qiymat qaytarmaydigan (void) funksiyalar;
Qiymat bo‘yicha argumentlarni o‘tkazish;
Funksiyaning chaqirilishi
void funksiyalar
Matematik funksiyalardan foydalanib, matematik masalalarni yechish;
char turidan foydalanib, belgilarni namoyish qilish;
ASCII kodiga ko‘ra belgilarni shifrlash;
Belgilarni klaviaturadan o‘qish;
Maxsus belgilarni namoyon qilish;
Sonli qiymatlarni belgili, belgili qiymatlarni sonli qiymatlarga o‘tkazish;
Belgilarni taqqoslash va tekshirish;
Kirish
Funksiyalar kodni qayta foydalanuvchan, tashkillashtirilgan va sodda ko‘rinishga olib keladi.
Tasavvur qiling, Siz 1 dan 10 gacha, 20 dan 37 gacha va 35 dan 49 gacha bo‘lgan sonlar yig‘indisini hisoblovchi dastur yozinshingiz kerak. U quyidagicha ko‘ringan bo‘lar edi:
Dastur kodida ko‘rish mumkinki, masalani yechish uchun deyarli bir xil ko‘rinishdagi sikllardan foydalanildi, farqi siklning boshlang‘ich va oxirgi qiymatlarida xolos. Yuqoridagi kodni funksiyadan foydalanib, quyidagicha yozish ham mumkin.
Funksiya
1 – 8 qatorlarda funksiya aniqlangan bo‘lib, funksiyaning nomi sum, i1 va i2 nomli 2 ta parametrga ega. Main funksiyasi tanasida 1 dan 10 gacha bo‘lgan sonlar yig‘indisini hisoblash uchun sum(1, 10) ko‘rinishida funksiya chaqirilmoqda, 20 dan 37 gacha sonlar yig‘indisini hisoblash uchun funksiya sum(20, 37), 35 dan 49 gacha yig‘indini hisoblash uchun sum(35, 49) ko‘rinishida yoziladi.
Funksiya – bu biror operatsiyani bajarish uchun guruhlangan buyruqlar to‘plami. Biz shu paytgacha pow(a, b), rand(), srand(seed), time(0) va main() funksiyalari bilan ishladik. Misol uchun, pow(a, b) funksiyasi chqirilganda tizim funksiyadagi buyruqlarni bajaradi va qiymat qaytaradi.
Funksiyani aniqlash
Funksiyani aniqlash quyidagilardan tashkil topgan bo‘lishi lozim: funksiya nomi, parametrlari, qiymat qaytarish turi va tanasi.
Funksiyani aniqlash sintaksisi quyidagicha:
qiymatQaytarishTuri funksiyaNomi( parametrlar )
{
//Funksiya tanasi
}
Misol. Ikki sondan kattasini aniqlovchi funksiya yarating. Funksiyani max deb nomlaymiz, num1 va num2 nomli int turida ikki parametri mavjud, katta son funksiya tomonidan qaytariladi.
Funksiyani chaqirish
Funksiyani chqirish – funksiyadagi kodning bajarilishidir.
Funksiyani yaratayotganda u nima bajarishini aniqlab olish zarur. Funksiya yaratilgandan so‘ng ubu chaqirish lozim. Funksiyalarni chiqirshning ikki yo‘li mavjud: qiymat qaytarish yoki qaytarmasligiga bog‘liq.
Natija va tahlil
Finksiyaning chaqirilishi
Funksiyaning chaqirilishi
Funksiya har safar chaqirilganda, tizim faollashtirish yozuvi(activation record) ni yaratadi. Faollashtirish yozuvi funksiyaning argumentlari va o‘zgaruvchilarini stek chaqiruvi(call stack) deb nomlangan xotiraning sathiga joylashtiradi va saqlaydi. Stek chaqiruvi boshqa nomlar bilan ham nomlanadi, masalan, bajariluvchi stek (execution stack), runtime stek, mashina steki yoki qisqacha qilib stek. Bir funksiya boshqa funksiyani chaqirganda, chaqiruvchi funksiyaning faollashtirish yozuvi kutib turadi, chaqirilgan funksiyaning faollashtirish yozuvi yaratiladi. Funksiya o‘z ishini yakunlagach, uning faollashtirish yozuvi stekdan o‘chadi va boshqaruvni uning chaqiruvchisiga qaytaradi.
Stek faollashtirish yozuvlarini “oxirgi kirgan birinchi chiqadi” prinsipida saqlaydi. Oxirida chaqirilgan funksiyaning faollashtirish yozuvi stekdan birinchi bo‘lib o‘chiriladi. Faraz qiling, m1 funksiyasi m2 funkisyasini chaqirishi va m2 funksiyasi m3 funksiyasini chaqirishi lozim. Tizim dastlab m1 funksiyaning faollashtirish yozuvini stekka joylashtiradi, keyin m2 funksiyaning va oxirida m3 funksiyaning faollashtirish yozuvini qo‘yadi. Birinchi bo‘lib, m3 funksiya bajariladi va bajarilish yakunlangach uning faollashtirish yozuvi stekdan o‘chadi. Keyin m2 yakunlanadi va uning faollashtirish yozuvi stekdan o‘chadi. Oxirida m1 yakunlanadi va uning faollashtirish yozuvi stekdan o‘chadi.
void funksiyalar
void funksiyalar qiymat qaytarmaydi.
Quyidagi listing da printGrade nomli void funksiyasi berilgan ballni baho ko‘rinishida ekranga chiqaradi.
Natija:
Qiymat qaytaruvchi funksiya
Eslatma! void funksiyalar uchun qaytarish buyrug‘ini ishlatish shart emas, ammo u funksiya ishini yakunlash uchun qo‘llaniladi va u bsohqaruvni funksiya chaqiruvchisiga qaytaradi. Sintaksisi judayam oddiy:
return;
void funksiyasida boshqaruvning normal oqimidan chetlab o‘tish uchun ba’zida qo‘llanadi. Misol uchun quyidagi kodda mavjud bo‘lmagan ball kiritilsa, return buyrug‘I yordamida funksiyadan chiqib ketiladi:
Dastur funksiyadan chiqib ketishini nonormal holat yuz berganda tezkorlik bilan chiqib ketishda, kamdan-kam hollarda foydalanish mumkin. Buning uchun cstdlib kutubxonasidagi exit(int) funksiyasini chaqirish mumkin. Dasturda xatolik borligini ko‘rsatish uchun funksiyaga ixtiyoriy butun qiymat bersa bo‘ladi:
Misol
Qiymat orqali argumentlarni uzatish
Jimlik qoidasiga ko‘ra, funksiya chaqirilganda argumentlar parametrlarga qiymatlar orqali yuboriladi.
Funksiyalarning kuchli jihatlaridan biri uning parametrlar bilan ishlay olishidadir.
Kodni modullashtirish
Kodni modullashtirish koddan qayta foydalanishni, xatolarni to‘g‘rilashni va unga qo‘shimchalar kiritishni osonlashtriadi.
Funksiyalar ortiqcha kodni kamaytirish va koddan qayta foydalanish imkonini beradi. Shuningdek funksiyalar kodni modullashtiradi va dasturning sifatini yaxshilashga xizmat qiladi.
Dastur:
Natija:
Modullashtrishning quyidagi ijobiy tomonlari mavjud:
EKUB ni hisoblash main funksiyasida amalga oshmaydi;
Agar EKUB ni hisoblashda biror xatolik yuzaga kelsa, u shu
funksiyaning tanasida to‘g‘rilanadi;
Funksiyani boshqa dasturlarda ham ishlatish mumkin.
Funksiyalarni “aniqlash” (define) va “e’lon qilish”(declare) tushunchalari mavjud bo‘lib, e’lon qilish deganda funksiya tanasisiz yozilishi (ya’ni prototip) tushuniladi. Aniqlash deganda esa, funksiya bajariladigan tanasi bilan yoziladi.
Funksiyaning argumentlari “jimlik qoidasi”ga ko‘ra qiymatga ega bo‘lgan va ega bo‘lmagan hollarda dastlab qiymatga ega bo‘lmagan, so‘ngra qiymat ega bo‘lgan argumentlar turishi shart.
//Xato
//Xato
//To‘gri
//To‘g‘ri
Matematik funksiyalar
C++ ning cmath nomli kutubxonasida ko‘plab foydali matematik funksiyalar jamlangan.
C++ da matematik funksiyalar uch kategoriyaga bo‘linadi:
Trigonometrik funksiyalar(sin(), cos(), tan());
Exponent funksiyalar(pow(), log());
Xizmat funksiyalari(min(), max(), abs()).
Trigonometrik funksiyalar
Do'stlaringiz bilan baham: |