C++ tilida standart funksiyalarning yozilishi

C++ tilida standart funksiyalarning yozilishi
Funksiya
|
Ifodalanishi
|
Funksiya
|
Ifodalanishi
|
Sin x
|
sin(x)
|
|
sqrt(x); pow(x,1/2.)
|
Cos x
|
cos(x)
|
|
abs(x) yoki fabs(x)
|
Tg x
|
tan(x)
|
Arctan x
|
atan(x)
|
ex
|
exp(x)
|
Arcsin x
|
asin(x) ?
|
Ln x
|
log(x)
|
Arccos x
|
acos(x) ?
|
Lg x
|
log10(x)
|
|
pow(x,2/3.)
|
xa
|
pow(x,a)
|
Log2x
|
log(x)/log(2)
|
Masalan: → (-b+sqrt(b*b-4*a*c)/(2*a); yoki
(-b+pow(b*b-4*a*c,1/2.)/(2*a);
e sin x + tg2(x+3) → exp(sin(x)) + pow(tan(x+3),2);
k=(m*5)+((7 % n) / (9+x));
C++ tilidagi dastur quyidagi tarkibdan tashkil topadi:
Direktivalar – # include direktiva – instruksiya degan ma’noni beradi. C++ tilida dasturning tuzilishiga, ya’ni ehtiyojiga qarab, kerakli direktivalar ishlatiladi. Ular <> belgisi orasida keltiriladi. Umuman olganda quyidagi direktivalar mavjud (jami 32 ta):
#include - S da oddiy kiritish/chiqarish dasturi uchun. Bu yerda std - standart, i – input, o - output degani.
#include - C++ da kiritish/chiqarish uchun, oddiy amallar bajarilsa.
#include - standart funksiyalarni ishlatish uchun.
#include - dasturning tashqi ko’rinishini shakllantirish uchun.
#include - satr toifasidagi o’zgaruvchilar ustida amallar bajarish uchun.
#include - standart kutubxona fayllarini chaqirish uchun.
#include - kompyuter ichidagi soat qiymatlaridan foydalanish uchun.
#include - C++ tilining grafik imkoniyatlaridan foydalanish uchun.
Bu fayllar maxsus kutubxona e’lon fayllari hisoblanadilar va ular aloxida INCLUDE deb nomlanadigan papkada saqlanadiar. Hozirda C++ kutubxonasini yangilandi va undagi fayllarning nomlaridan .h (head – bosh ma’nosida) kengaytmasi olib tashlandi va oldiga c harfi qo’shildi (C dan qolgan 18 tasiga). Bu fayllarda funksiya prototoifalari, toifalari, o’zgaruvchilar, o’zgarmaslar ta’riflari yozilgan bo’ladi.
Direktivalar dasturni uni kompilyasiya qilinishidan oldin tekshirib chiqadi.
2. Makroslar - # define makro qiymati. Masalan:
#define y sin(x+25) – u = sin(x+25) qiymati berildi;
#define pi 3.1415 - pi = 3.1415
#define s(x) x*x - s(x) = x*x (; belgisi qo’yilmaydi)
Global o’zgaruvchilarni e’lon qilish. Asosiy funksiya ichida e’lon qilingan o’zgaruvchilar lokal, funksiyadan tashqarida e’lon qilinganlari esa global o’zgaruvchilar deyiladi. Global o’zgaruvchilar dastur davomida ishlaydi va xotiradan ma’lum joyni egallaydi. O’zgaruvchini bevosita ishlatishdan oldin e’lon qilsa ham bo’ladi, u holda o’z lokal bo’ladi. Global o’zgaruvchilar nomi lokal o’zgaruvchilar nomi bilan bir xil bo’lishi ham mumkin. Bunday holatda lokal o’zgaruvchining qiymati joriy funksiya ichidagini qiymatini o’zgartiradi, funksiyadan chiqishi bilan global o’zgaruvchilar ishlaydi.
Asosiy funksiya - main ( ) hisoblanadi. Bu funksiya dasturda bo’lishi shart. Umuman olganda C++ dagi dastur funksiyalardan iborat deb qaraladi. main ( ) funksiyasi { boshlanadi va dastur oxirida berkitilishi shart } . main – asosiy degan ma’noni beradi. Bu funksiya oldida uning toifasi ko’rsatiladi. Agar main ( ) funksiyasi beradigan (qaytaradigan) javob oddiy so’z yoki gaplardan iborat bo’lsa, hech qanday natija qaytarmasa, void so’zi keltiriladi. main ( ) funksiyasi dastur tomonidan emas, balki OS tomonidan chaqiriladi. OSga qiymat qaytarish shart emas, chunki u bu qiymatdan foydalanmaydi. Shuning uchun main ( ) funksiyasining turini void deb ko’rsatganimiz ma’qul. Har bir funksiyaning o’z argumenti bo’ladi, shuning uchun main funksiya ( ) lari ichiga uning parametri keltiriladi. Ba’zan u bo’sh bo’lishi ham mumkin. Bu funksiyadan chiqish uchun odatda return operatori ishlatiladi. 0 (nol) qiymatining qaytarilishi operasion tizimga ushbu dastur normal bajarilib turganini bildiradi. return orqali qaytadigan qiymat toifasi funksiya e’lonidagi qaytish toifasi bilan bir xil bo’lishi kerak. Masalan int main ( ) va 0 (nol) qiymat butun toifalidir. Bu funksiyadan so’ng lokal o’zgaruvchilar, qism dasturlar, ularning haqiqiy parametrlar e’lon qilinadi. So’ngra dasturning asosiy operatorlari (kiritish/chiqarish, hisoblash va h.k.) yoziladi. Agar bu operatorlar murakkab toifali bo’lsalar, ularni alohida {} qavslarga olinadi. C++ tilida dastur kichik harflarda yoziladi. Ba’zi operatorlar katta harflar bilan kelishi mumkin, bunday xollarda ular alohida aytib o’tiladi. Operatorlar oxiriga ; belgisi qo’yiladi. Operatorlar bir qatorga ketma-ket yozilishi mumkin. Dasturda izohlar xam kelishi mumkin, ular /* ....*/ belgisi orasiga olinadi. Agar izoh bir qatorda tugasa, uni // belgisidan keyin yoziladi. Masalan:
main ( ) // C++ tilining asosiy funksiyasi
Tilda quyidagi amallardan foydalanish mumkin:
Arifmetik amallar: +, -, /, *, %. Barcha amallar odatdagidek bajariladi, faqat bo’lish amali butunga bo’lish bajariladi, ya’ni agar butun sonlar ustida bajarilayotgan bo’lsa, natija doim butun bo’ladi, ya’ni kasr qism tashlab yuboriladi (9/5=1; vaxolanki 1,8 bo’lishi kerak). Shuning uchun surat yoki maxrajiga nuqta (.) qo’yilsa, natija ham xaqiqiy bo’ladi (9./5=1.8). % belgisi (modul operatori) esa butun sonni butun songa bo’lgandan hosil bo’ladigan qoldiqni bildiradi.
Masalan: 9 % 5=4
Taqqoslash amallari: = = (tengmi?); != (teng emas); < ; > ; >=; <=
Mantiqiy amallar: && (and) mantiqiy ko’paytirish; || (or) mantiqiy qo’shish; ! (not) mantiqiy inkor. Mantiqiy amallarni ixtiyoriy sonlar ustida bajarish mumkin. Agar javob rost bo’lsa, natija 1 bo’ladi, agar javob yolg’on bo’lsa, natija 0 bo’ladi. Umuman olganda 0 (nol)dan farqli javob rost deb qabul qilinadi.
Masalan: i>50 && j==24 yoki s1 < s2 && (s3>50 || s4<=20);
Yoki 6 ≤ x ≤ 10 yozuvini x>=6 && x<=10 deb yoziladi
Qiymat berish amallari:
a=5; b = 2*c; x = y = z =1; a = (b = c)*d // 3=5 deb yozib bo’lmaydi
qabul qildim va almashtirdim deb nomalandigan amallar:
+ = : a+=b → a = a + b;
- = : a-=b → a = a - b;
* = : a*=b → a = a * b;
/ = : a/=b → a = a / b;
% = : a%=b → a = a % b;
inkrement operatsiyasi (++) ikki ma’noda ishlatiladi: o’zgaruvchiga murojaat qilinganidan keyin uning qiymati 1 ga oshadi (a++ postfiks ko’rinishi) va o’zgaruvchining qiymati uning murojaat qilishdan oldin 1 ga oshadi (++a prefix ko’rinishi);
dekrement operatsiyasi (--), xuddi inkrement operatsiyasi kabi, faqat kamaytirish uchun ishlatiladi. Masalan: s = a + b++ (a ga b ni qo’shib keyin b ning qiymatini 1 ga oshiradi); s = a+(--b) (b ning qiymatini 1 ga kamaytirib, keyin a ga qo’shadi).
Yuqoridagi standart funksiyalardan tashqari yana quyidagi funksiyalar ham ishlatiladi:
ceil (x) - x ni x dan katta yoki unga teng bo’lgan eng kichik butun songacha yaxlitlash. Masalan: ceil (12.6) = 13.0; ceil (-2.4) = -2.0;
floor (x) - x ni x dan kichik bo’lgan eng katta butun songacha yaxlitlash. Masalan: floor (4.8) = 4.0; floor (-15.9) = -16.0; floor(12.1) = 12; floor(-12.1)=-13;
fmod (x,y) – x / y ning qoldig’ini kasr son ko’rinishida berish. Masalan: fmod(7.3, 1.7) = 0.5;
Dasturlar. Kompyuterni biron bir amalni bajprishga majburlash uchun, siz (yoki boshqalar) unga nima xoxlayotganingizni aniq, batafsil aytishingiz kerak.
Bundan tashqari, biz o’zimiz bajarishimiz kerak bo’lgan vazifa tavsifini olamiz, masalan, «yaqin oradagi kinoteatrga qanday borish mumkin» yoki «to’lqinli pechda go’shtni qanday qovurish mumkin». bunday tavsiflar va dasturlar orasidagi farq aniqlik darajasida aniqlanadi: insonlar sog’lom aql bilan qo’llanmani noaniqligini aniqlashga harakat qiladilar, kompyuter bunday qila olmaydi. Masalan, «yo’lak bo’ylab o’nga, zinadan yuqoriga, so’ngra chapga» - yuqori qavatdagi yuvinish xonasini topish imkonini beruvchi aniq qo’llanma. Biroq, agar siz bunday sodda qo’llanmaga qarasangiz, u holda ular grammatik noaniqligi va to’liq emasligini ko’rish mumkin. Masalan, siz stol atrofida o’tiribsiz va yuvinish xonasiga qanday o’tishni so’radingiz. Sizga javob beruvchi, o’rningizdan turishingizni, uni aylanib o’tishingizni va boshqalarni aytishi shart emas. Yana sizga hyech kim sanchqini stolga qo’yishingiz, zanadan ko’tarilayotganda chiroqni yoqishingiz kerakligini, yuvinish xonasiga kirish uchun eshikni ochish kerakligini maslahat bermaydi.
Qarama-qarshi holatda bunga kompyuterning aqli yetmaydi. Unga barchasini aniq va batafsil tavsiflash kerak. Kompyuterga qo’llanmani batafsil tavsiflash uchun, o’ziga xos grammatikaga ega bo’lgan aniq belgilangan til hamda biz bajarishni xoxlayotgan faoliyatlarni barcha ko’rinishlari uchun yaxshi aniqlikdagi lug’at kerak bo’ladi. Bunday til dasturlash tili va ko’p qamrovli masalalarni yechish uchun ishlab chiqilgan - C++ dasturlash tili deb nomlanadi.
Kompyuterlar, dasturlar va dasturlash bo’yicha falsafiy qarashlar 1-maruzada kengroq yoritib berilgan. Bu yerda biz juda oddiy dasturdan boshlanadigan kodni hamda uning bajarilishi uchun kerak bo’ladigan bir qancha usullar va qurilmalarni ko’rib chiqamiz.
Birinchi klassik dastur. Birinchi klassik dasturlarni variantlarini keltiramiz. U ekranga Hello, World! xabarini chiqaradi.
// Bu dastur ekranga «Hello, World! xabarini chiqaradi»
#include «std_lib_facilities.h»
intmain() // C++ da dasturlar main funksiyasidan boshlanadi
{
cout<< «Hello, World!\n»; // «Hello, World!» ni chiqarish
return 0;
}
Kompyuter bajarishi lozim bo’lgan bu buyruqlar to’plami, pazandalik resepti yoki yangi o’yinchoqni yig’ish bo’yicha qo’llanmani eslatadi. Eng boshidan boshlab, dasturning har bir satrini ko’rib chiqamiz:
cout<<«Hello, World!\n»;// «Hello, World!» chiqarish
Aynan mana shu satr xabarni ekranga chiqaradi. U yangi satrga o’tuvchi belgi bilan Hello, World! belgilarini chop etadi; aks holda, Hello, World! belgisini chiqargandan so’ng kursor yangi satrning boshiga joylashtiriladi. Kursor - bu keyingi belgi qayerda chiqishini ko’rsatib turuvchi katta bo’lmagan yonib o’chib turuvchi belgi yoki satr.
C++ tilida satrli literallar qo’shtirnoq («) bilan belgilanadi; ya’ni «Hello,Word!\n» — bu belgilar satri. \n belgi - yangi satrga o’tishni bildiruvchi maxsus belgi. cout standart chiqarish oqimiga tegishli. «coutoqimida chiquvchilar» << chiqarish operatori yordamida ekranda aks etadi. cout “see-out” kabi talaffuz qilinadi, lekin “character putstream” («belgilarni chiqarish oqimi») qisqartmasi hisoblanadi. Dasturlashda qisqartmalar yetarlicha keng tarqalgan. Albatta, qisqartmalar birinchi marta eslab qolish uchun noqulay ko’rinishi mumkin, lekin o’rganib qolgach ulardan voz kecha olmaysiz, ya’ni ular qisqa va boshqarib bo’ladigan dasturlarni yaratishga imkon beradi.
Satr oxiri
//»Hello, World!» chiqarish
izoh hisoblanadi. // (ya’ni, ikkita egri chiziqdan keyin (/)) belgidan keyin yozilgan barchasi izoh hisoblanadi. U kompilyator tomonidan inkor qilinadi va dasturni o’quvchi dasturchilar uchun mo’ljallangan. Bu holatda biz satrning birinchi qismi nimani anglatishini sizga xabar qilish uchun izohdan foydalandik.
Izohlar insonlar uchun dastur matnida ifodalashning iloji bo’lmagan foydali ma’lumotlarni qamrab oladi va dastur manzilini tasvirlaydi. Umuman olganda, izoh o’zingiz uchun ham foydali bo’lishi mumkin, ya’ni yaratgan dasturingizga xafta yoki yillar o’tib murojat qilganingizda nima uchun yaratilganini tezda anglab olishga yordam beradi. O’zingizni dasturlaringizni yaxshi xujjatlashtirishga harakat qiling.
Dastur ikkita auditoriya uchun yoziladi. Albatta, biz ularni bajaruvchi kompyuterlar uchun dastur yozamiz. Biroq biz kodni o’qish va modifikasiyalashga uzoq yillar sarflaymiz. Shunday qilib, dastur uchun ikkinchi auditoriya bo’lib boshqa dasturchilar hisoblanadi. Shuning uchun dasturning yaratilishini insonlar o’rtasidagi muloqot shakli deb sanash mumkin. Albatta, insonlarni o’z dasturlarini birinchi o’quvchilari deb hisoblash maqsadga muvofiq: agar ular qiyinchilik bilan o’z yozganlarini tushunishsa, u holda dastur qachonlardir to’g’ri bo’lishi dargumon. Shu sababli, kod o’qish uchun mo’ljallanganligini esdan chiqarmaslik kerak - dastur onson o’qilishi uchun barcha imkoniyatlarni qilish kerak. Istalgan holatda izohlar faqat insonlar uchun kerak, kompyuter ularni inkor qiladi.
Dasturning birinchi satri - bu o’quvchilarga dastur nima qilishi kerakligi haqida xabar beradigan toifaviy izoh.
// Bu dastur ekranga «Hello, World!» xabarini chiqaradi.
Bu izohlarning foydali tomoni shundaki, bunda dastur kodi bo’yicha dastur nima qilayotganini tushunish mumkin, lekin biz aynan nima hohlayotganimizni aniqlash mumkin emas. Bundan tashqari, kodning o’zidan tashqari, biz izohlarda dasturning maqsadini qisqacha tushuntirishimiz mumkin. Ko’pincha bunday izohlar dasturning birinchi satrida joylashgan bo’ladi. Boshqa narsalar orasida, ular biz nima qilmoqchi ekanligimizni eslatib o’tadi.
Satr
#include «std_lib_facilities.h»
o’zi bilan #include direktivasini akslantiradi. U std_lib_facilities.h faylida tasvirlanganlarni imkoniyatlarini «faollashtirish» uchun kompyuterni majburlaydi. Bu fayl C++ (C++ tilining standart kutubxonasi) tilining barcha amalga oshirishlarida ko’zda tutilgan imkoniyatlaridan foydalanishni osonlashtiradi.
std_lib_facilities.h faylning imkoniyatlari berilgan dastur uchun shunda hisoblanadiki, uning yordami bilan biz C++ tilining standart kiritish-chiqarish vositalaridan foydalanish imkoniyatiga ega bo’lamiz. Bu yerda biz faqatgina cout standart chiqarish potoki va << chiqarish operatoridan foydalanamiz. #include direktivasi yordamida dasturga kiruvchi fayl odatda .h kengaytmasiga ega bo’ladi va sarlavha (header) yoki sarlavha fayli (header file) deb nomlanadi. Sarlavha biz dasturimizda foydalanadigan cout kabi atamalarni aniqlashni o’z ichiga oladi.
Dastur bajarilishi boshlanadigan nuqtani dastur qanday aniqlaydi? U main nomli funksiyani ko’rib chiqadi va uni qo’llanmalarini bajarishni boshlaydi. Bizning “Hello, World!” dasturimizda main funksiyasi quyidagicha ko’rinadi:
int main() // C++ da dasturlash main funksiyasi yordamida amalga oshiriladi
{
cout << «Hello, World!\n»; // «Hello, World!» chiqarish
return 0;
}
Bajarishning boshlang’ich nuqtasini aniqlash uchun, C++ tilidagi har bir dastur main nomli funksiyadan tashkil topgan bo’lishi zarur. Bu funksiya to’rtta qismdan iborat.
1. Qiymat qaytaruvchi toifa, bu funksiyada - int toifa (ya’ni, butun son), funksiya chaqirish nuqtasida qanday natija qaytarishini aniqlaydi (agar u qandaydir qiymat qaytarsa). int so’zi C++ tilida zahiralangan hisoblanadi (kalit so’z), shuning uchun uni boshqa bir narsaning nomi sifatida foydalanish mumkin emas.
2. Nom, main berilgan holatda.
3. Parametrlar ro’yxati, aylana qavsda berilgan; berilgan holatda parametrlar ro’yxati bo’sh.
4. Funksiya tanasi, figurali qavsda berilgan va funksiya bajarishi kerak bo’lgan faoliyatlar ro’yxati.
Bundan kelib chiqadiki, C++ tilidagi kichik dastur quyidagicha ko’rinadi:
intmain(){}
Bu dastur hech qanday amal bajarmaganligi uchun undan foyda kam. “Hello, World!” dasturining main funksiyasining tanasi ikkita qo’llanmadan iborat:
cout<<«Hello,World!\n»;//»Hello,World!» chiqish
return0;
Birinchidan, u ekranga Hello, World! satrini chiqaradi, so’ngra chaqirish nuqtasiga 0 (nol) qiymat qaytaradi. Qachonki main() funksiyasi tizim sifatida chaqirilsa, biz qiymat qaytarmasdan foydalanamiz. Lekin ayrim tizimlarda (Unix/Linux) bu qiymatdan dasturni muvaffaqiyatli bajarilishini tekshirish uchun foydalanish mumkin. main() funksiyasidagi qaytariluvchi Nol (0), dastur muvaffaqiyatli bajarilganini bildiradi.
1.2.2. algebraik ifodalarni matematik kutubxona funksiyalari yordamida hisoblash.
1.3-§. Tarmoqlanish va tanlash operatorlari.
1.3.1. Tarmoqlanuvchi operatorlar va ularni ishlash tartibi.
1.3.2. Ternar operatori.
1.3.3. Shartsiz o’tish operatori.
4-§. Takrorlanish operatorlari.
1.4.1. Parametrli takrorlash operatori (for).
1.4.2. Old shartli va so’ng shartli takrorlanuvchi operatorlari (while, do while).
II-BOB. FUNKSIYA VA MASSIVLAR
2.1-§. Funksiyalar.
2.1.1. Funksiya tavsifi. Qiymatlarni qaytarish. Funksiya prototiplari.
2.1.2. Parametrlarni qiymat va adresga ko’ra jo’natish.
2.1.3. Qiymat berish parametrlari. Funksiyalar parametr sifatida.
2.1.4. Rekursiv funksiyalar. Funksiyalarni qayta yuklash.
2.1.5. Foydalanuvchi kutubxonasini tashkil etish.
I BOB. CHIZIQLI, TARMOQLANISH VA TAKRORLANISH ALGORITMLARI
1.1-§. Algoritmlar va dasturlashning asosiy tushunchalari.
1.1.1. Algoritmlarning xossalari va ifodalash usullari.
1.1.2. Dasturlashga kirish.
1.1.3. Kompilyator turlari.
1.1.4. Identifikator va ularning turlari.
|