3-ma'ruza funktsiyalar va sinflardan foydalanish. Funktsiya deklaratsiyasi. Funktsiya chaqiruvi. Funktsiyalar uchun bekor qilish sarlavha fayli. Standart sarlavha fayllari. Standart sinflardan foydalanish. Reja


Download 137.72 Kb.
bet7/15
Sana09.03.2023
Hajmi137.72 Kb.
#1255999
1   2   3   4   5   6   7   8   9   10   ...   15
Bog'liq
Лек 3узб

Tayyor
Dastur eslatma
kiritishni tashkil qilish (va tsikllar haqidagi bilimlaringizni oshirish uchun) uchun while siklidan foydalanadi . ­Belgini o'qish uchun cin.get(ch) yoki ch = cin.get() o'rniga cin »ch dan foydalanishiga e'tibor bering. Buning yaxshi sababi bor. Eslatib o'tamiz, in bilan ikkita funktsiya mavjud. get() esa cin barcha kiritilgan belgilarni, jumladan boʻshliqlar va yangi qatorlarni oʻqiydi » bo'shliqlar va yangi qatorlarni e'tiborsiz qoldiradi. Dastur so'roviga javob berganingizda, har bir satr oxirida tugmasini bosishingiz kerak va shu bilan yangi qator ­belgisi hosil bo'ladi. cin » ch yondashuvi bu qo'shimcha belgilarni osongina o'tkazib yuboradi, ikkalasi ham cin. get() ko'rsatish uchun keyingi belgi sifatida kiritilgan har bir raqamdan keyingi yangi qatorni o'qing. Ushbu noqulaylikni dasturiy tarzda hal qilish mumkin, ammo 7-3 ro'yxatda ko'rsatilganidek, cinni ishlatish osonroq.
n chars() funksiyasi ikkita argumentni oladi: c belgisi va butun n. Keyin u belgini n da ko‘rsatilgandek ko‘p marta ko‘rsatish uchun tsikldan foydalanadi:
while (n-->0) // n 0 ga yetguncha davom eting
cout "s;
E'tibor bering, dastur argumentlar ro'yxatidan rasmiy parametr bo'lgan n o'zgaruvchining qiymatini har bir qadamda kamaytirib, hisoblashni amalga oshiradi. Bu o'zgaruvchiga main() funksiyasidan vaqt o'zgaruvchisining qiymati beriladi . ­while tsikli n ni 0 ga kamaytiradi, lekin misolda ko'rsatilganidek, n qiymatini o'zgartirish vaqtlar qiymatiga ta'sir qilmaydi.

Ikki argumentli boshqa funktsiya


Keling, yanada murakkabroq funktsiyani yarataylik - bu ­oddiy bo'lmagan hisob-kitoblarni amalga oshiradi. Bundan tashqari, funktsiya rasmiy parametrlardan foydalanishdan tashqari, mahalliy o'zgaruvchilardan foydalanishni ko'rsatadi.
Hozirda AQShning ko'plab shtatlarida turli xil lotereyalar uyushtirilmoqda. Ushbu lotereyalar sizdan kartada taqdim etilgan ko'plab raqamlardan ma'lum raqamlarni tanlashingizni so'raydi ­. Misol uchun, siz jami 51 raqamni o'z ichiga olgan kartada 6 ta raqamni tanlashingiz mumkin. Keyin lotereya egasi tasodifiy 6 ta raqamni tanlaydi. Agar sizning tanlovingiz uy egasi tomonidan tanlangani bilan bir xil bo'lsa, siz bir necha million dollar olasiz. Bizning funktsiyamiz g'alaba qozonish ehtimolini hisoblab chiqadi. (Albatta, g'alaba qozongan raqamlarni muvaffaqiyatli taxmin qila oladigan funktsiya foydaliroq bo'lar edi, lekin C++, butun kuchiga qaramay, psixologik omillarni hisobga olmaydi.)
Birinchidan, bizga formula kerak. Agar siz 51 ta raqamdan 6 tasiga mos kelishingiz kerak bo'lsa, matematiklar sizda R dan 1 ta g'alaba qozonish imkoniyati borligini aytishadi, bu erda R quyidagi formula yordamida hisoblanadi:
51 x 50 x 49 x 48 x 47 x 46
R=
6x5x4x3x2x1
6 ta raqam uchun maxraj birinchi 6 ta butun son yoki 6 ning ko'paytmasi bo'ladi! (olti faktorial). Numerator oltita ketma-ket sonning ko'paytmasi sifatida hisoblanadi ­, bu safar 51 va undan pastdan boshlanadi. Umuman olganda, agar siz raqamlardan tanlash variantlarini tanlashingiz kerak bo'lsa, u holda hisoblagich tanlash faktorial bo'ladi va maxraj raqamlarning qiymatidan boshlab va undan past bo'lgan butun sonlarning ko'paytmasi bo'ladi. Ushbu hisobni bajarish uchun for loopidan foydalanishingiz mumkin:
uzoq juft natija = 1,0;
uchun (n = raqamlar, p = tanlash; p > 0; n—, p—) natija = natija * n / p ;
Numeratorning barcha qismlarini bir vaqtning o'zida ko'paytirish o'rniga, tsikl ­1,0 ni hisoblagichning birinchi qismiga ko'paytirish va keyin uni maxrajning birinchi qismiga bo'lish orqali boshlanadi. Keyin, keyingi bosqichda, pastadir ko'paytiriladi va natijani hisoblagich va denominatorning keyingi qismlariga bo'linadi. Bu joriy mahsulotni butun ko'paytirish birinchi bo'lib bajarilganidan ko'ra kichikroq saqlashga imkon beradi. Masalan, solishtiring (10/2) / (9/1)
Birinchi ifoda 90/2 ga baholanadi, natijada 45, ikkinchisi esa 5x9 ni baholaydi va bir xil 45 ni oladi. Natija bir xil, lekin birinchi holatda ikkinchisiga qaraganda kattaroq oraliq natija (90) olinadi. Qanchalik ko'paytiruvchi bo'lsa, farq shunchalik katta bo'ladi. Ko'p sonlar uchun ko'paytirishni ­bo'linish bilan almashtirishning ushbu strategiyasi hisoblash jarayonining maksimal mumkin bo'lgan suzuvchi nuqta qiymatidan oshib ketishini oldini oladi.
Listing 7.4 bu formulani ehtimollik funksiyasiga o'rab oladi (). Tanlovlar soni va raqamlarning umumiy soni ijobiy qiymatlar bo'lishi kerakligi sababli, dastur imzosiz ­turdan foydalanadi. int ( imzosiz deb qisqartirilgan ) bu qiymatlar uchun. Bir nechta butun sonlarni ko'paytirish juda katta natijalarga olib kelishi mumkin, shuning uchun lotto .cpp uzun turdan foydalanadi ikki barobar funktsiyaning qaytish ­qiymati uchun. Bundan tashqari, 49/6 kabi ifodalar integral turlar bilan foydalanilganda yaxlitlash xatolarini keltirib chiqaradi.
Muvofiqlik eslatmasi

Download 137.72 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   10   ...   15




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling