Файл: Ozbekiston respublikasi oliy va orta maxsus talim vazirligi navoiy davlat pedagogika instituti.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 08.11.2023

Просмотров: 331

Скачиваний: 8

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

So‘z boshi

I BOB. C++ DASTURLASH TILIGA KIRISH Ushbu bobda C ++ tilining asosiy elementlari, ya’ni, alifbosi, o‘zgaruvchilar, o‘zgarmaslar, ma’lumotlar turlari, asosiy amallar, standart funksiyalar, dastur tuzilishi va ma’lumotlarni kiritish hamda chiqarishga oid ma’lumotlar berilgan. 1.1-§. C++ tilining leksik asoslari C++ dasturlash tili 1980-yilning boshida Bjarne Stroustrup tomonidan C dasturlash tiliga asoslangan holda yaratilgan bo`lib, uning kutubxonasida turli funksiyalar mavjud. Ushbu tilni o`rganish ikki qismga bo‘linadi. Birinchi qismda C++ dasturlash tilini o‘rganish, ikkinchisi esa C++ dasturlash tilining standart kutubxonasidagi tayyor obyekt va funksiyalarni qo‘llashni o‘rganishga asoslangan.Dastlab, mazkur mavzuda C++ dasturlash tili imkoniyatlarini Dev-C++ muhitidan foydalanib, misol va masalalarni dasturlashni ko‘rib chiqamiz. Dev-C++ – bu C / C ++ dasturlash tillari asosida dasturiy mahsulotlarni ishlab chiqish muhiti hisoblanadi. Dev-C ++ dasturi Bloodshed Software firmasi xodimi Colin Laplace tomonidan yaratilgan va shundan so‘ng, Windows operatsion tizimiga moslashtirilgan versiyalari ishlab chiqarila boshlagan.Hozirda Embarcadero firmasi tomonidan, Embarcadero Dev-C ++ shaklida ishlab chiqarish davom etmoqda. Embarcadero Dev-C ++ – bu Bloodshed Dev-C ++ dasturlash tilining yangi va takomillashtirilgan versiyalaridan biri hisoblanadi.Bugungi kunda, ushbu tilning ko`plab versiyalari ishlab chiqilgan bo`lib, mazkur mavzuda Dev C++ muhitining 5.11-versiyasi va unda misol va masalalarni dasturlashni ko`rib chiqamiz. Ushbu dasturni ishga tushirish quyidagi ketma-ketlikda amalga oshiriladi: Пуск – Все программы – Bloodshed Dev-C++ – Dev-C++ . So‘ngra, File – New – Source File (Ctrl+N) ketma-ketligi tanlanadi. Shu bilan birga, Windowsning ishchi maydonidagi yorliq orqali ham uni ishga tushirish mumkin. Yuqrida qayd etilgan ketma-ketlik asosida Dev C++ muhitining 5.11- versiyasi ishga tushirilgandan so‘ng, dastur oynasi quyidagicha namoyon bo‘ladi: 1-rasm.Ushbu oynaning Untitled1 maydoniga dastur kodi kiritiladi va F9- tugmasidan foydalanib, dastur kodi kompilyatsiya qilinadi. F11- tugmasi yordamida esa bir vaqtda kompilyatsiya qilinadi va ishga tushirib, natija olinadi. Agar dastur kodida xatolik aniqlansa, xatolik topilgan qator ajratilib ko‘rsatiladi.C++ dasturlash tili alifbosi va xizmatchi so‘zlariTanlab olingan algoritm asosida qo‘yilgan masalani kompyuterda yechish uchun har qanday algoritmik tilning o‘z alifbosi, buyruqlar majmuasi va maxsus dasturlar jamlangan kutubxonasi bo‘lishi zarur. Bu imkoniyatlar C++ dasturlash tilida ham mavjud bo`lib, uning alifbosi quyidagica bo`ladi. 1-jadvalC++ dasturlash tili alifbosi t/r Nomi Ishlatiladigan belgilar 1 Katta va kichik lotin alfaviti xarflari (A,B,..,Z, a,b,…,z) 2 Raqamlar 0,1,2,3,4,5,6,7,8,9 3 Maxsus belgilar “ , {} | [] () + - / % \ ; ‘ . : ? < = > _ ! & * # ^ Keltirilgan jadvaldan tashqari satrlarni o‘zaro ajratish uchun ishlatiladigan belgilar (misol uchun bo‘shliq, tabulyatsiya, yangi qatorga o‘tish belgilari) ham mavjud.Izohlar satrini tavsiflashC++ dasturlash tilida ikki turdagi izohlardan foydalaniladi: 1. Bir satrli. Masalan: // Beriladigan izoh (satr boshida ikkita drop belgisini qo‘yish orqali bir satrli izoh yoziladi);2. Ko‘p satrli. Masalan: /* Beriladigan izoh */ (izoh boshiga /* belgilari, izoh oxirida esa */ belgilari yoziladi).C++ tilida operatorlarC++ dasturlash tilida tuziladigan dastur kodi, kutubxona fayllariga murojaat va bir nechta funksiyalardan iborat bo‘lishi mumkin. Bunda, main nomli asosiy funksiya bo‘lishi zarur. Agar dasturda faqat asosiy funksiyadan foydalanilsa, dastur kodi quyidagicha yoziladi:#includeusing namespace std;int main(){ // dastur tanasi;} 2-rasm.Bunda:1. #include – xizmatchi so‘zi, kutubxona fayliga murojaat qiladi. Foydalanuvchi tomonidan qiymat kiritiladigan yoki ekranga qandaydir ma’lumot chiqariladigan dasturda iostream kutubxona fayli yoziladi. Masalan, kiritish va chiqarish operatoridan foydalanish uchun iostream kutubxona faylidan foydalaniladi;2. using namespace std – standart nomlarni e’lon qilish;3. int main() – asosiy funksiya hisoblanib, misol va masalalarning dastur kodi, ushbu bo‘limga, ya’ni { va } belgilari oralig‘iga kiritiladi;4. { va } – dastur kodi bloki hisoblanadi. Bunga dasturchi tomonidan kiritiladigan buyruqlar bitta operator sifatida qaraladi.Standart funksiyalar va ularning yozilishiC++ dasturlash tilida funksiyalar kutubxona fayllarida mavjud bo‘lib, undan foydalanish uchun #include xizmatchi so‘zi yordamida tegishli kutubxonaga murojaat qilinadi. Masalan, matematik funksiyalar joylashgan kutubxonaga murojaat qilish uchun math.h buyrug‘i yoziladi:#include#includeusing namespace std;int main(){ // dastur tanasi;}Ushbu math.h kutubxonasida quyidagi matematik funksiyalar mavjud:2-jadvalmath.h kutubxonasidagi ba’zi bir funksiyalarning berilishi va vazifalari t/r Berilishi Vazifasi 1 abs(x) Butun qiymatli x ning moduli 2 fabs(x) Haqiqiy qiymatli x ning moduli 3 sin(x) x ning sinusi 4 cos(x) x ning kosinusi 5 tan(x) x ning tangensi 6 atan(x) x ning arktangensi 7 acos(x) x ning arkkosinusi 8 asin(x) x ning arksinusi 9 exp(x) eksponenta, ex 10 log(x) natural logorifm (x>0) 11 log10(x) o‘nli logorifm (x>0) 12 sqrt(x) kvadrat ildiz (x>0) 13 pow(x,a) x ning a-chi darajasi 14 ciel(x) x ni katta butun songacha yaxlitlash 15 floor(x) x ni kichik butun songacha yaxlitlash Ushbu 2-jadvalda keltirilgan funksiyalardan foydalanib, ba’zi bir matematik amallar yozilishini 3-jadvalda ko‘rib chiqamiz.3-jadvalBa’zi bir matematik formulalarning C++ dasturlash tilida yozilishi Matematik formulalar C++ dasturlash tilida yozilishi 1. 1. pow((a+b)*(a+b), 1./5)2. pow(pow(a+b,2), 1./5)3. pow((a+b)*(a+b), (float)1/5)4. pow(pow(a+b,2), (float)1/5) 2. pow(sin(x), n) 3. exp(3*n) 4. exp(6*cos(2*x/a)) 5. pow(cos(sqrt(x+a)),2) 6. 1. log(abs(x-5))2. log(fabs(x-5)) 7. log(2*b)/log(a) 8. log10(b*b+1)/log10(a) 9. 3,4/pow(2,x) 10. pow(tan(pow(x,5)), 1/k) -pow(cos(2*x),2/3) 11. log(2*x)/log(b)-log(x) 12. pow(x,-3)-pow(2,5-x) 13. (2*x-(x-pow(x,6))*pow((x-pow(x,3)),x) /(sin(x)-abs(x-1) Konsol orqali muloqot qilishDev-C++ dasturlash muhitida konsolli rejim yordamida misol va masalalarning natijalarini qulay tartibda olish imkoniyati mavjud. Konsolli rejimda yangi dasturlash oynasini hosil qilish uchun File – New – Source File (Ctrl+N) ketma-ketligi tanlanadi. Hosil qilingan oynada tegishli dastur kodi yozilgandan so‘ng, uni kompyuter xotirasiga saqlash mumkin. Buning ikki xil usuli mavjud: 1. File – Save (Ctrl+S) ketma-ketligi yordamida lozim bo‘lgan disk yoki katalog tanlanadi;2. F9- yoki F11- tugmalari bosilganda hosil qilingan faylni saqlash so‘raladi. Shundan so‘ng, kompilyatsiya amali bajariladi. Natijada *.cpp fayl kengaytma bilan kompyuter xotirasiga saqlanadi. Agar kiritilgan dastur kodi, kompilyatsiyadan muvaffaqiyatli o‘tsa (dastur kodida xatolik bo‘lmasa) *.exe fayl kengaytma bilan tanlangan disk yoki katalogda, joriy fayl sifatida saqlanadi.Chiqarish operatoriDev-C++ dasturlash muhitida ma’lumotlarni ekranga chiqarish uchun iostream kutubxona faylida joylashgan cout<< operatoridan foydalaniladi. Bu yerda “cout” – chiqarish operatori, “<<” – esa chiqarish oqimi hisoblanadi. Misol uchun “2021-yil Yoshlarni qo‘llab-quvvatlash va aholi salomatligini mustahkamlash yili” jumlasini ekranga chiqarish uchun quyidagi dastur kodi yoziladi:#includeusing namespace std;int main(){cout<<"2021-yil Yoshlarni qo‘llab-quvvatlash va aholi salomatligini mustahkamlash yili";} 3-rasm.Ushbu dastur kodi kiritilgandan so‘ng, F11- tugmasi yordamida kompilyatsiya qilinadi. Natijada, quyidagi oyna hosil bo‘ladi: 4-rasm.Yuqorida keltirilgan tartibda bir nechta jumlalarni ham chiqarish mumkin. Buning uchun chiqariladigan ma’lumotlar oralig‘iga << – chiqarish oqimi yoziladi:#includeusing namespace std;int main(){cout<<"Mening birinchi dasturim"<<" Dasturlashni o‘rganaman "<<"Yosh dasturchi";} 5-rasm.Ushbu jumlalarni ustun shaklda chiqarish uchun ma’lumotlar oralig‘iga endl operatori kiritiladi. Ya’ni, quyidagi dastur kodi yoziladi: cout<<"Mening birinchi dasturim"< 6-rasm.Yuqorida keltirilgan tartibda faqat jumlalarni emas, balki hisoblash natijalarini ham chiqarish mumkin.Kiritish operatoriDev-C++ dasturlash muhitida ma’lumotlarni muloqot usulida kiritish uchun iostream kutubxona faylida joylashgan cin>> operatoridan foydalaniladi. Bu yerda “cin” – kiritish operatori, “>>” – esa kiritish oqimi hisoblanadi. Ushbuga oid misollarni keyingi mavzularda ko‘rib chiqamiz.Mustaqil bajarish uchun topshiriqlar1. Dev-C++ dasturlash muhitini kompyuterga o‘rnating.2. Dev-C++ dasturlash muhitini turli usullar bilan ishga tushiring.3. Dev-C++ dasturlash muhitida yangi dasturlash oynasini hosil qiling va uni kompyuter xotirasiga saqlang.4. Quyidagi misollarni hisoblash dasturini tuzing:1) .2) .3) .4) .5) .6) .7) .8) .9) .10) .5. Quyidagi jumlalarni ustun va satr shaklda chiqaruvchi dastur tuzing: “1-sentyabr O‘zbekiston Respublikasining mustaqillik kuni”, “9-may Xotira va qadrlash kuni” , “8-dekabr O‘zbekiston Respublikasining Konstitutsiyasi qabul qilingan kun”.1   2   3   4   5   6   7   8   9   10   11

1.2-§. O‘zgaruvchi va o‘zgarmas tipli kattaliklar

1.3-§. Dasturlash operatorlari

II BOB. BOSHQARUV OPERATORLARI

2.1-§. C++ dasturlash tilida shartli operatorlar

2.2-§. C++ dasturlash tilida takrorlanuvchi jarayonlar

2.3-§. C++ dasturlash tilida funksiyalar

2.4-§. C++ dasturlash tilida massivlar

2.5-§. C++ dasturlash tilida ko‘rsatkichlar

2.6-§. C++ dasturlash tilida satrlar va ular ustida amallar C++ dasturlash tilida ikki xil belgilar majmuasini mujassamlashtirgan. Birinchi toifaga, an’anaviy, ya’ni, tor belgilar deb nomlanuvchi 8 bitli, ikkinchisiga esa 16 bitli belgilar kiradi. Til kutubxonasida har bir guruh belgilari uchun maxsus funksiyalar to‘plami mavjud. Satrni char turidagi belgilar massivi sifatida qarash mumkin va bu belgilar ketma-ketligi nol kodli belgi bilan tugaydi (‘\0’). Odatda, nol bilan tugaydigan satrlarni ASCIIZ – satrlar deyiladi. Shuningdek, C++ dasturlash tilida satrlar bilan ishlashni qulaylashtirish uchun string sinfi kiritilgan. String sinfida satr oxirida ‘\0’ belgi qo‘yish talab etilmaydi.Satrli o‘zgarmas deb – qo‘shtirnoqlar ichiga olingan belgilar ketma-ketligiga aytiladi. Qo‘shtirnoqlar ichidagi belgilar ketma-ketligiga satr deyiladi.Quyida C++ dasturlash tilida belgi sifatida ishlatilishi mumkin bo‘lgan o‘zgarmaslar to‘plami keltirilgan: katta harflar – ‘A’ …’Z’, ‘A’…’Я’; kichik harflar – ‘a’ …’z’, ‘a’…’я’; raqamlar – ‘0’ …’9’; gorizontal bo‘sh joy qoldirish (ASCII kodi 9), satrni o‘tkazish (ASCII kodi 10), vertikal bo‘sh joy qoldirish (ASCII kodi 11), formani o‘tkazish (ASCII kodi 12), navbatdagi satrga o‘tkazish (ASCII kodi 13); punktuatsiya belgilari (ajratuvchilar) ! ” # $ & ‘ ( ) * + - , . / : ; < = > ? @ [ \ ] ^ _ { | }

2.7-§. C++ dasturlash tilida strukturalar va birlashmalar

2.3-§. C++ dasturlash tilida funksiyalar


Dasturlashni o‘rganishni boshlaganlar ko‘pincha quyidagi savolga duch keladi: “Dasturni funksiyalarsiz bajarish va barcha kodlarni to‘g‘ridan-to‘g‘ri main() funksiyasiga kiritish mumkinmi?” Agar uncha katta bo‘lmagan dastur kodi ustida amallar bajarilsa, main() funksiyasi yetarli hisoblanadi. Funksiyalarning asosiy vazifasi murakkab ko‘p satrli dasturlarning dastur kodini yozishni soddalashtirishdir.

Dasturning hajmi va murakkabligi oshib borishi bilan, barcha kodlarni main() funksiyasi ichida saqlash qiyinlashadi. Shu bois, ushbu muammolarni bajarishda funksiyalardan foydalaniladi. Funksiya asosiy dasturdan alohida bo‘lgan mini-dastur ko‘rinishida yoziladi. Funksiya murakkab vazifalarni kichikroq va sodda vazifalarga ajratishga imkon beradi, bu dasturning umumiy murakkabligini keskin pasaytiradi va hisoblash vaqtini qisqartiradi.

Funsiyalar haqida tushuncha va ularni yaratish

Dasturlash amaliyotida, ma’lum bir maqsadni amalga oshiradigan bir xil operatorlar guruhi ishtirok etgan ko‘p hollarida, dasturning ba’zi bir qismlarida o‘zgarishsiz takrorlash zarur bo‘lgan vaziyatlarga duch kelinadi. Bu holatlarda ortiqcha dastur kodi yozishdan voz kechish uchun qismdasturlar taklif etiladi.

Qismdastur – bu dasturning turli qismida bir necha marotaba qo`llash mumkin bo`lgan til birikmalari guruhidir.

Funksiya – bu ma’lum bir vazifani bajaradigan tavsif va operatorlarning nomlangan to‘plamidir. Funksiya parametrlarni qabul qilishi va hisoblashning natijaviy qiymatini berishi mumkin. Funksiyaga ishlov berish uchun berilgan ma’lumot uning parametri, funksiyani hisoblash natijasi esa uning qiymati deyiladi. Ma’lumki, C ++ dasturi bir yoki bir nechta funksiyalardan tashkil topadi. Dastur ishga tushgach, avval asosiy funksiya bajariladi. Agar funksiyaga murojaat asosiy funksiyaning operatorlari orasida ishlatilsa, u holda boshqarish funksiyani operatorlariga o‘tkaziladi. Funksiyaning barcha operatorlari bajarilgandan so‘ng, boshqaruv funksiyaga murojaat qilingandai so`ngi operatorga o`tkaziladi.

Funksiyaga murojaat qilishda avval, uni e’lon qilish lozim. Funksiya e’loni sarlavha va uning tanasidan iborat bo‘ladi. Ya’ni:

funksiya_tipi funksiya_nomi (o‘zgaruvchilar ro‘yxati)

{

funksiya_tanasi

}

Funksiya sarlavhasi quyidagilarni o‘z ichiga oladi:

funksiya_tipi – funksiya o‘zlashtiradigan qiymat turi. Agar funksiya hech qanday qiymatni o‘zlashtirmasa, void tipi ko‘rsatiladi;

funksiya_nomi – foydalanuvchi tomonidan funksiyaga beriladigan nom, ixtiyoriy identifikator;

o‘zgaruvchilar ro‘yxati – funksiyaga berilgan, bir-biridan vergul bilan ajratilgan qiymatlar ro‘yxati (argumentlar). Ro‘yxatdagi har bir o‘zgaruvchining turi va nomi ko‘rsatiladi. Agar funksiyaning argumentlari bo‘lmasa, u holda void tipi ko‘rsatiladi yoki qavs ichida hech bir operator yozilmaydi;

– funksiya tanasi – bu { } qavslar ichiga olingan tavsif va operatorlar ketma-ketligidir.

Umumiy holda, C++ dasturlash tilining funksiyalarini tuzilishi quyidagi ko‘rinishda bo‘ladi:

kompilyator ko‘rsatmalari

funksiya_tipi 1_funksiya (o‘zgaruvchilar ro‘yxati)

{

1_funksiya_tanasi;

}

funksiya_tipi 2_funksiya (o‘zgaruvchilar ro‘yxati)

{

2_funksiya_tanasi;

}



funksiya_tipi n_funksiya (o‘zgaruvchilar ro‘yxati)

{

n_funksiya_tanasi;

}

int main(o‘zgaruvchilar ro‘yxati)

{

asosiy_funksiya_tanasi;

// bu yerda 1_funksiya, 2_funksiya, ... n_funksiya larni chaqirish uchun operatorlar bo‘lishi mumkin.

}

Shu bilan birga, dastur kodini yozishning quyidagi shakli ham mavjud:

kompilyator ko‘rsatmalari

funksiya_tipi 1_funksiya (o‘zgaruvchilar ro‘yxati);

funksiya_tipi 2_funksiya (o‘zgaruvchilar ro‘yxati);

...

funksiya_tipi n_funksiya (o‘zgaruvchilar ro‘yxati);


int main(o‘zgaruvchilar ro‘yxati)

{

asosiy_funksiya_tanasi;

// bu yerda 1_funksiya, 2_funksiya, ... n_funksiya larni chaqirish uchun operatorlar bo‘lishi mumkin.

}

funksiya_tipi 1_funksiya (o‘zgaruvchilar ro‘yxati)

{

1_funksiya_tanasi;

}

funksiya_tipi 2_funksiya (o‘zgaruvchilar ro‘yxati)

{

2_funksiya_tanasi;

}



funksiya_tipi n_funksiya (o‘zgaruvchilar ro‘yxati)

{

n_funksiya_tanasi;

}

Yuqorida keltirilgan funksiyalar main() funksiyasidan keyin tavsiflangan. Bunda barcha funksiyalarning sarlavhalari main() funksiyasidan oldin yoziladi. Ushbu ko‘rinishda sarlavhalarni oldindan yozish, funksiya prototiplari deb nomlanadi. Prototip kompilyatorga funksiya o‘zlashtiradigan qiymat turini, argument sifatida foydalaniladigan o‘zgaruvchilar turini va ularning tartibini ko‘rsatib beradi. Prototiplar asosiy dasturda funksiyalarning to‘g‘ri chaqirilishini tekshirish uchun ishlatiladi.

Funksiya prototipida ko‘rsatilgan o‘zgaruvchilarning nomlarini kompilyator e’tiborsiz qoldiradi:

// ushbu yozuvlar teng kuchlidir

int func ( int a , int b);

int func ( int , int );

Funksiya dasturning istalgan qismida chaqirilishi mumkin. Buning uchun uning nomi ko‘rsatiladi va agar argumentlari mavjud bo‘lsa, qiymatlari qavs ichida vergul bilan ajratib yoziladi. Funksiyani chaqirish umumiy holda quyidagicha bo`ladi:

funksiya_nomi (o‘zgaruvchilar ro‘yxati);

Funksiyaga oid quyidagi misolni ko`rib chiqamiz.

1-misol. Argumentlari bo‘lmagan va hech qanday qiymat o‘zlashtirmaydigan funk() funksiyasi yaratilsin. Ushbu funksiya chaqirilganda, ekranda "Navro‘zi olam muborak" jumlasi paydo bo‘lsin.

#include

using namespace std ;

void funk () //funksiyasi tavsiflash

{

cout << "Navro‘zi olam Muborak, " ;

}

int main()

{

funk () ; // Funksiyani chaqirish.

cout <<"talabalar! " << endl ;

funk () ; // Funksiyani chaqirish.

cout <<"ustozlar! " << endl ;

}

Ushbu dastur bajarilishi natijasida quyidagi ikkita satr paydo bo‘ladi:

Navro‘zi olam Muborak, talabalar!

Navro‘zi olam Muborak, ustozlar!

Funksiya tanasida tavsiflangan o‘zgaruvchilar va argumentlar ro‘yxatidagi o‘zgaruvchilar lokal hisoblanadi. Masalan, agar dastur beshta turli funksiyalardan iborat bo‘lib, bu funksiyalarda bir xil N o‘zgaruvchi tavfislangan bo‘lsa, u holda C ++ dasturlash tili uchun bular besh xil o‘zgaruvchilar hisoblanadi. Lokal o‘zgaruvchilarning qiymatlari faqat funksiya tanasida saqlab qolinadi. Bitta funksiyaga takroran qayta murojaatlar o‘rtasida lokal o‘zgaruvchilarning qiymatlari saqlanib qolmaydi. Barcha funksiyalardan oldin e’lon qilingan va ixtiyoriy funksiyada foydalanish mumkin bo‘lgan o‘zgaruvchilar global deb nomlanadi. Agar global o‘zgaruvchi bilan bir xil nomdagi lokal o‘zgaruvchi e’lon qilinmagan bo‘lsa, funksiyalarda global o‘zgaruvchini ajratish mumkin.

Ma’lumotlarni funksiyalar o‘rtasida uzatish uchun global o‘zgaruvchilar ishlatiladi, ammo bu dasturni ishlash tezligini sekinlashtiradi. Funksiyalar o‘rtasida ma’lumot almashish uchun funksiya o‘zlashtiradigan qiymatlar va parametrlardan foydalaniladi.

Funksiya parametrlari

Murojaat qilinayotgan va murojaat qiluvchi funksiyalar o‘rtasida, ma’lumot almashinish jarayoni, parametrlarni uzatish mexanizmi yordamida amalga oshiriladi. Funksiya sarlavhasida yozilgan o‘zgaruvchilar ro‘yxati rasmiy (formal) parametrlar yoki shunchaki funksiya parametrlari deb ataladi. Funksiyani chaqirish operatoridagi o‘zgaruvchilar ro‘yxati – bu haqiqiy parametrlar yoki argumentlar deyiladi.

Parametrlarni uzatish mexanizmi, rasmiy va haqiqiy parametrlarga almashtirishni hamda funksiyani har xil qiymatlar bilan bajarilishini ta’minlaydi.

Funksiyani chaqirish operatoridagi parametrlar va funksiya sarlavhasidagi parametrlar o‘rtasida birma-bir mosliklar tekshiriladi. Bunda rasmiy va haqiqiy parametrlarning soni, turlari va tartibi bir xil bo‘lishi lozim.



Funksiyalarda parametrlar quyidagi tartibda uzatiladi: 1. Haqiqiy parametrlar o‘rnida bo‘lgan ifodalar aniqlanadi; 2. Xotirada rasmiy parametrlar uchun ularning tipiga mos bo‘lgan joy ajratiladi; 3. Rasmiy parametrlarga haqiqiy qiymatlar beriladi; 4. Tiplar mosligi tekshiriladi va agar lozim bo‘lsa konvertatsiya qilinadi.

Parametrlar funksiyaga qiymat va manzil bo‘yicha ham uzatilishi mumkin. Ma’lumotlarni qiymat bo‘yicha uzatishda funksiya haqiqiy parametrlarning nusxalari bilan ishlaydi va u argumentlarning joriy qiymatlariga kirish huquqiga ega bo‘lmaydi.

Ma’lumotlarni manzil bo‘yicha uzatishda funksiyaga o‘zgaruvchilar emas, balki uning manzili uzatiladi. Bunda funksiya argumentlarning qiymatlari saqlanadigan xotira katakchalariga kirish huquqiga ega bo‘ladi.

Funksiya manzil bo‘yicha uzatilgan ma’lumotlardan farqli ravishda, qiymat bo‘yicha uzatilgan ma’lumotlarni o‘zgartira olmaydi.

Agar funksiya ichidagi parametrni o‘zgartirishni taqiqlash talab etilsa, const xizmatchi so‘zidan foydalaniladi. Funksiya sarlavhasi umumiy holda quyidagicha yoziladi:

funksiya_tipi funksiya_nomi (const o‘zgaruvchi_tipi* o‘zgaruvchi_nomi, ...)

Masalan:

#include

using namespace std ;

int funk1 ( int i ) //ma’lumotlar qiymat bo‘yicha uzatiladi

{ return( i++);

}

int funk2 ( int j ) // ma’lumotlar manzil bo‘yicha uzatiladi. Bunda * yo‘naltirish amalidan foydalaniladi

{ return(( j )++);

}

int funk3 (const int k) // parametr qiymati o‘zgartirilmaydi

{ return((k)++);

}

int main()

{

int a ; cout<<"a=" ; cin>>a ;

funk1 (a) ; cout<<"a="<

funk2(&a) ; //manzil olish & amalidan foydalaniladi

cout<<"a="<


funk3(&a) ; cout<<"a="<


return 0;

}

Ushbu dastur kodida quyidagi natijalar paydo bo‘ladi:

a=5

a=5

a=6

a=6

Agar funksiyaga murojaat qiluvchi dasturdagi o‘zgaruvchilar qiymatlarini o‘zgartirish talab etilsa, ma’lumotlarni manzil bo‘yicha uzatish qulay hisoblanadi.

Funksiyaga qiymat o‘zlashtirish

Funksiyaga natijaviy qiymatni o‘zlashtirish uchun return operatoridan foydalaniladi. Operator quyidagicha ishlaydi: return operatoridan keyin yozilgan ifodaning qiymati funksiya o‘zlashtiradigan qiymat tipiga aylantiriladi.

Funksiya ishini yakunlaydi va natijaviy qiymat chaqiriluvchi funksiyasiga o‘zlashtiriladi. Funksiyadagi return operatoridan keyin yozilgan har qanday operatorlar e’tiborga olinmaydi. Dastur joriy funksiyaga murojaat qilgan operatordan keyingi operator bilan o‘z ishini davom ettiradi. return operatori void tipidagi funksiyalarda qo‘llanilmaydi. Shuningek, ishlash algoritmi talabidan kelib chiqib, funksiyada bir nechta return operatoridan foydalanish ham mumkin.

2-misol. Kvadrat tenglamaning ildizlari sonini aniqlaydigan IldizSoni(a,b,c) butun tipli funksiya tasvirlansin(a, b, c- haqiqiy parametr, a≠0).

Ushbu misolning dastur kodi quyidagicha:

#include

using namespace std;

int IldizSoni(float a, float b, float c){

if (a==0) {

cout<<"a parametr noldan farli son bo‘lishi zarur!\n";

return 0; }

else{

float d=b*b-4*a*c;

if (d<0) { cout<<"Haqiqiy yechim yo‘q "; return 0; }

else

if (d==0) return 1;

else return 2;

}

}

int main() {

float a,b,c;

cout<<"a= "; cin>>a;

cout<<"b= "; cin>>b;

cout<<"c= "; cin>>c;

cout<< IldizSoni(a,b,c);

}

Yuqorida bayon etilgan fikrlarni tekshirib ko‘rish uchun C++ dasturlash tilida funksiyalarga doir bir nechta misollarni ko‘rib o‘tamiz.

3-misol. r radiusli doiraning yuzasini hisoblovchi haqiqiy tipli DoiraS(r) funksiya tasvirlansin. Bu funksiyadan foydalanib, berilgan r radiusli doiraning yuzasini hisoblash dasturi.

Berilgan masalaning dastur kodi quyidagicha:

#include

#include

using namespace std;

float DoiraS(float r){

float s=M_PI*r*r;

return s;

}

int main(){

float r;

cout<<"r= "; cin>>r;

cout<< DoiraS(r);

}
4-misol. Berilgan n (n>1) parametr tub son bo‘lsa true, aks holda false qiymat qaytaruvchi mantiqiy tipli tub(n) funksiyasi tasvirlansin. Bu funksiyadan foydalanib, berilgan 5 ta sonning tub yoki tub emasligini aniqlash dasturi.

Berilgan masalaning dastur kodi quyidagicha:

#include

using namespace std;

bool tub(int n){

int k=0;

for(int i=1; i<=n; i++)

if (n%i==0) k++;

if (k==2) return true;

else return false;

}

int main(){

int n;

for (int i=1; i<=5; i++) {

cout<<"n= "; cin>>n;

if (tub(n)) cout<

else cout<

}

}
5-misol. n faktorialni hisoblovchi haqiqiy tipli Fact(n) funksiyasi tasvirlansin. Bu funksiyadan foydalanib, berilgan 5 ta butun musbat sonning har biri uchun faktoriallarni hisoblash dasturi.

Berilgan masalaning dastur kodi quyidagicha:

#include

using namespace std;

double Fact(int n){

double p=1;

for(int i=1; i<=n; i++)

p*=i;

return p;

}

int main(){

unsigned int n;

for (int i=1; i<=5; i++){

cout<<"n= "; cin>>n;

cout<

}

}
6-misol. Agar burchak o‘lchovi gradusda berilgan bo‘lsa, uni radianda ifodalovchi haqiqiy tipli Almashtirish(d) funksiyasi tasvirlansin (d haqiqiy son 0
Berilgan masalaning dastur kodi quyidagicha:

#include

#include

using namespace std;

float Almashtirish(float d){

float g=d*M_PI/180;

return g;

}

int main(){

float g;

for(int i=1; i<=4; i++) {

cout<<"g= "; cin>>g;

cout<

}

}
7-misol. Berilgan k butun musbat sonining raqamlarini teskari tartibga almashtiruvchi, butun tipli TeskariTartib(k) funksiyasi tasvirlansin (k butun tipli parametr). Bu funksiyadan foydalanib, berilgan 5 ta butun musbat sonning har birining raqamlari joylashish tartibi teskarisiga almashtirish dasturi.

Berilgan masalaning dastur kodi quyidagicha:

#include

using namespace std;

int TeskariTartib(int k){

int x=0;

while (k>0){

x=10*x+k%10;

k=k/10;

}

return x;

}

int main(){

int a;

for (int i=1; i<=5; i++){

cin>>a;

cout<< TeskariTartib(a)<

}

}
8-misol. Berilgan butun k(k>0) parametr, biror butun sonning kvadratiga teng bo‘lsa true aks holda false qiymat qaytaruvchi mantiqiy tipli IsSquare(k) funksiyasi tasvirlansin. Bu funksiyadan foydalanib, berilgan 10 ta butun sondan iborat to‘plamdagi to‘la kvadrat bo‘lgan sonlar miqdorini aniqlash dasturi.

Berilgan masalaning dastur kodi quyidagicha:

#include

#include

using namespace std;

bool IsSquare(int k){

float z=sqrt(k);

if (z-floor(z)==0) return true;

else return false;

}

int main(){

int a,x=0;

for(int i=1; i<=10; i++){

cin>>a;

if (IsSquare(a)) x++;

}

cout<

}
9-misol. Butun k parametr palindrom bo‘lsa true aks holda false qiymat o‘zlashtiradigan mantiqiy tipli palindrom(k) funksiyasi tasvirlansin. (Palindrom son – o‘ng va chapdan bir xil o‘qiladigan sondir). Bu funksiyadan foydalanib, berilgan sonning palindrom yoki polindrom emasligi aniqlash dasturi.

Berilgan masalaning dastur kodi quyidagicha:

#include

#include

using namespace std;

bool palindrom(int k){

int x=0, y=k;

while(k>0){

x=x*10+k%10;

k=k/10;

}

if (x==y) return true;

else return false;

}

int main(){

int a;

cin>>a;

if (palindrom(a)) cout<<"Palindrom ";

else cout<<"Palindrom emas ";

}

Mustaqil bajarish uchun topshiriqlar

1. Kvadrat tenglamaning ildizlari sonini aniqlaydigan RootsCount(a,b,c) butun tipli funksiya tasvirlansin (a, b, c- haqiqiy parametr a≠0). Bu funksiyadan foydalanib, berilgan 5 ta kvadrat tenglamaning har biri uchun ildizlari sonini aniqlash dasturini tuzing.

2. Ikkita r1, r2 (r1>r2) radiusli markazlari umumiy aylanalar bilan chegaralangan xalqa yuzasini hisoblovchi haqiqiy tipli RingS(r1, r2) funksiyasi tasvirlansin (r1 va r2 haqiqiy). Bu funksiyadan foydalanib ichki va tashqi radiuslari berilgan 4 ta xalqaning har biri uchun yuzalarni hisoblash dasturini tuzing.

3. Nol bo‘lmagan haqiqiy a va b sonlari ustida 1 ta arifmetik amal bajaruvchi haqiqiy tipli Calc(a,b,op) funksiyasi tasvirlansin. Bu yerda op parametri 1 bo‘lsa “ayirish”, 2 bo‘lsa “ko‘paytirish”, 3 bo‘lsa “bo‘lish’, boshqa hollarda “qo‘shish” amaliga ekvivalent hisoblanadi. Bu funksiyadan foydalanib, berilgan a va b sonlari uchun k1, k2, k3, k4 amallardagi qiymatlarni chop etish dasturini tuzing.

4. Koordinata boshida yotmaydigan (tekislikdagi) nuqtaning qaysi chorakda joylashganligini aniqlovchi butun tipli chorak(x,y) funksiyasi tasvirlansin. Bu funksiyadan foydalanib, berilgan 4 ta koordinata boshida yotmaydigan nuqtalarning qaysi choraklarda joylashganligini aniqlash dasturini tuzing.

5. Berilgan butun k (k>0) parametr, 5 ning biror darajasiga teng bo‘lsa true aks holda false qiymatini beruvchi mantiqiy tipli IsPowerS(k) funksiyasi tasvirlansin. Bu funksiyadan foydalanib, berilgan 10 ta butun sonlar ichida 5 ning darajalariga teng bo‘lganlari miqdorini topish dasturini tuzing.

6. Berilgan k butun musbat sondagi raqamlar miqdorini aniqlovchi butun tipli raqam_soni(k) funksiyasi tasvirlansin. Bu funksiyadan foydalanib, berilgan 10 ta musbat butun sonning har biri uchun raqamlari sonini aniqlash dasturini tuzing.

7. n!! ni hisoblovchi haqiqiy tipli Fact2(n) funksiyasi tasvirlansin. n !! bu

agar n toq bo‘lsa n !! = 13 5 ... n

agar n juft bo‘lsa n !! = 2 4 6 ... n

Bu funksiyadan foydalanib, berilgan 10 ta butun musbat sonlarning har biri uchun n !! larni hisoblash dasturini tuzing.

8. t berilgan yil kabisa bo‘lsa true aks holda false qiymat beruvchi mantiqiy tipli Kabisa(y) funksiyasi tasvirlansin. Bu funksiyadan foydalanib, berilgan 5 ta turli butun musbat qiymatlarda funksiyaning qiymatlarini chop etish dasturini tuzing.

9. Berilgan yilning m-oyi uchun Kabisa funksiyasidan foydalanib kunlar sonini hisoblovchi butun tipli Kunlar(m,y) funksiyasi tasvirlansin. Bu funksiyadan foydalanib, berilgan 4 ta turli butun musbat qiymatlar uchun funksiyaning qiymatini chop etish dasturini tuzing.

10. n butun soni va a haqiqiy son berilganda an ni

a0=1

an = a a... a (n marta) agar n>0

(|n| marta) agar n<0

formula asosida hisoblaydigan butun tipli Daraja1(a,n) funksiyasi tasvirlansin. Bu funksiyadan foydalanib, a, k, l, m sonlari berilganda ak, al, am larning qiymatini hisoblash dasturini tuzing.

1   2   3   4   5   6   7   8   9   10   11

2.4-§. C++ dasturlash tilida massivlar


Massivlar haqida tushuncha

Massiv – bu bitta nom ostida birlashtirilgan, bir xil tipdagi elementlar guruhi sifatida taqdim etilgan ma’lumotlar to‘plamidir.

Bir xil turdagi, katta hajmdagi ma’lumotlarni qayta ishlashda massivlardan foydalanish qulay hisoblanadi. Massiv ma’lumotlarining bitta yacheykasi massiv elementi deyiladi. Massiv elementlari har qanday turdagi ma’lumotlar bo‘lishi mumkin (Butun yoki haqiqiy sonlar, satrlar, sanalar va boshqalar). Massivlar bir yoki bir nechta o‘lchovlarga ega bo‘lishi mumkin, ya’ni bir o‘lchovli, ikki o‘lchovli, uch o‘lchovli va n o‘lchovli massivlarga bo‘linadi. Dasturlashda ko‘pincha bir o‘lchovli va ikki o‘lchovli massivlardan foydalaniladi. Ushbu mavzuda biz bir va ikki o`lchovli massivlar bilan ishlashni ko‘rib chiqamiz.

Massivlarni tavsiflash va ulardan foydalanish

7 - jadvalda 8 ta elementdan iborat bo`lgan haqiqiy qiymatlar keltirilgan. Ushbu jadvaldagi ma’lumotlar bir o`lchovli massivga misol bo`ladi. Massivning ma’lum bir elementida saqlangan ma’lumotlariga massiv nomini va indeksi yordamida murojaat qilinadi.

7-jadval.

Bir o‘lchovli massiv

Tartib raqam

0

1

2

3

4

5

6

7

qiymat

8.21

-0.52

6.71

1.09

-21.76

7.07

3.13

-15.11


Agar massivni tavsiflashda uning o‘lchami aniq berilsa, u holda massiv statik deb nomlanadi. Quyida C ++ dasturlash tilidagi bir o‘lchovli statik massivlar bilan tanishib chiqamiz.

Bir o‘lchovli massivlar

Bir o‘lchamli massivni e’lon qilish quyidagi ko‘rinishda yoziladi:

[ elementlar_soni ] = { boshlang‘ich qiymatlar };

Quyida massivlarni e’lon qilishga oid bir necha misollar keltirilgan:

1) float jadval[7]; // 7 ta haqiqiy elementli massiv;

2) int vektor[6]; // 6 ta butun sonli massiv;

3) bool ab[15]; // 15 ta mantiqiy elementli massiv.

Massiv o‘lchami va uning elementlari tipi massivni saqlash uchun zarur bo‘lgan xotira hajmini aniqlaydi. Massivni tavsiflashning yana bir usulini ko‘rib chiqamiz:

const int k=15; // Butun sonli o‘zgarmasni e’lon qilish;

double A[k]; // 15 ta haqiqiy sonli massiv;

Statik massivni tavsiflashda o‘lchov sifatida musbat butun sondan yoki oldindan belgilangan o‘zgarmasdan foydalanish mumkin.

C ++ dasturlash tilidagi massiv elementlari noldan raqamlangan. Birinchi element har doim nol indeksga ega va oxirgi element indeksi, uning tavsifida ko‘rsatilgan o‘lchovdan bitta kam bo‘ladi:

char z[4]; // bunda 4 ta belgili massiv, elementlari 0 dan 3 gacha raqamlangan.

Massiv elementlariga murojaat qilish oddiy o‘zgaruvchilarga murojaat qilishdan biroz farqli bo’lgan jihati mavjud. Massiv elementiga murojaat qilish, uning indeksi orqali amalga oshiriladi. Masalan:

max[1] = 20; // max massivning 1- elementi 20 qiymat o‘zlashtirish;

max[2] = min[3]; // max massivni 2- elementiga min massivning 3-elementini o‘zlashtirish;

max[5] > min[6]; // max massivni 5- elementi bilan min massivning 6-elementini taqqoslash;

Massivni e’lon qilishda, uning elementlariga boshlang‘ich qiymat berish mumkin va buni bir nechta usullari mavjud.

1) O‘lchami ko‘rsatilgan massivni to‘liq e’lon qilish:


int a[4] = { 5, 6, 7, 8};

Bu yerda 4 ta elementdan iborat bo‘lgan a massivi e’lon qilingan va massivning barcha elementlariga boshlang‘ich qiymat berilgan.

2) O‘lchami ko‘rsatilgan massivni to‘liqmas e’lon qilish:

int b[6] = { 7, 5, 3 };

Bu yerda 6 ta elementdan iborat bo‘lgan b massivi e’lon qilingan va massivning dastlabki 3 ta elementlariga boshlang‘ich qiymat berilgan.

3) O‘lchami ko‘rsatilmagan massivni to‘liq e’lon qilish:

int x[] = { 5, 3, 2, 1, 8, 0};

Agar massiv o‘lchami ko‘rsatilmasa, uni to‘liq e’lon qilish talab etiladi. Bu holda massiv o‘lchami kompilyatsiya jarayonida elementlari soniga qarab aniqlanadi. Bunda massivning o‘lchami 6 ga teng bo‘ladi.

4) O‘lchami ko‘rsatilgan massivning barcha elementlariga boshlang‘ich qiymatda 0 berish: int y[4] = { 0 };

Bir o‘lchamli massivlar uchun ishlatilgan o‘zgaruvchilar bir хil tipdagi berilganlarni хotirada saqlashda foydalaniladi.

Yuqorida bayon qilingan fikrlarni tekshirib ko‘rish uchun C++ dasturlash tilida bir nechta dasturlarni ko‘rib o‘tamiz.

1-misol. n (n>0) butun son berilgan. Dastlabki n ta musbat juft sonlarni saqlaydigan n o‘lchamli butun sonli massiv tashkil etish dasturi.

Berilgan masalaning dastur kodi quyidagicha:

#include

using namespace std;

int main(){

int n; cout<<"n = "; cin>>n;

int a[n];

for(int i=0,k=2; i<=n; i++,k+=2)

a[i]=k;

for(int i=0; i

cout<


}
2-misol. Butun n (n>1) soni, arifmetik progressiyaning birinchi hadi a va uning ayirmasi d berilgan. Ulardan foydalanib, o‘zida arifmetik progressiyaning dastlabki n ta hadini saqlovchi massiv tashkil etish dasturi.

Berilgan masalaning dastur kodi quyidagicha:

#include

using namespace std;

int main(){

int a,d,n; cout<<"n = "; cin>>n;

int b[n];

cout<<"a = "; cin>>a;

cout<<"d = "; cin>>d;

for(int i=0,k=a; i<=n; i++,k+=a)

b[i]=k;

for(int i=0; i

cout<

}
3-misol. n (n>2) butun soni berilgan. f1=1, f2=1, fk=fk-2+fk-1, k=3,4, ... .

fk Fibonachchi sonlar ketma-ketligida birinchi n ta elementni o‘z ichiga oladigan n o‘lchamli butun sonli massivni ifodalash va chop etish dasturi.

Berilgan masalaning dastur kodi quyidagicha yoziladi:

#include

using namespace std;

int main(){

int n; cout<<"n = "; cin>>n;

int a[n];

a[0]=1; a[1]=1;

for(int i=2; i

a[i]=a[i-1]+a[i-2];

for(int i=0; i

cout<


}
4-misol. n (n>2), a va b butun sonlar berilgan. 1-elementi a ga, 2-elementi b, har bir keyingi elementi barcha avvalgi elementlar (o‘zidan oldingi barcha element) yig‘indisiga teng bo‘lgan n o‘lchamli butun sonli massivni ifodalash va chop etish dasturi.

Berilgan masalaning dastur kodi quyidagicha:

#include

using namespace std;

int main(){

int n; cout<<"n = "; cin>>n;

int x[n];

int a, b;

cout<<"a = "; cin>>a;

cout<<"b = "; cin>>b;

x[0]=a; x[1]=b;

int s=a;

for(int i=2; i

s=s+x[i-1];

x[i]=s;

}

for(int i=0; i

cout<

}
5-misol. n o‘lchamli nol bo‘lmagan butun tipli a massiv berilgan. Uning ak
n tengsizlikni qanoatlantiradigan birinchi ak elementining qiymatini chiqaruvchi dastur.

Berilgan masalaning dastur kodi quyidagicha:

#include

using namespace std;

int main(){

int n; cout<<"n = "; cin>>n;

int a[n];

for(int i=1; i<=n; i++)

cin>>a[i];

for(int i=1; i<=n; i++)

if (a[i]


cout<


break;

}

}
6-misol. n o‘lchamli butun sonli a massiv berilgan. Massivdagi barcha juft sonlar yangi butun tipli b massivga yozilsin. Hosil qilingan b massivning o‘lchami hamda uning elementlarini chiqarish dasturi.

Berilgan masalaning dastur kodi quyidagicha:

#include

using namespace std;

int main(){

int n, k=0; cout<<"n = "; cin>>n;

int a[n], b[n];

for(int i=1; i<=n; i++)

cin>>a[i];

for(int i=1; i<=n; i++)

if (a[i]%2==0){

k++;

b[k]=a[i];

}

cout<

for(int i=1; i<=k; i++)

cout<

}
7-misol. n o‘lchamli butun tipli massiv berilgan. Birinchi juft sonning dastlabki qiymatini massivdagi barcha juft sonlarga ko‘paytirish (Agar massivda juft son bo‘lmasa, massiv o‘zgartirishsiz qoldirilsin) dasturi.

Berilgan masalaning dastur kodi quyidagicha:

#include

using namespace std;

int main(){

int n, k; cout<<"n = "; cin>>n;

int a[n], b[n];

for(int i=1; i<=n; i++)

cin>>a[i];

for(int i=1; i<=n; i++)

if (a[i]%2==0) {

k=a[i];

break;

}

for(int i=1; i<=n; i++)

if (a[i]%2==0) a[i]=k*a[i];

for(int i=1; i<=n; i++)

cout<


}
Ikki o‘lchovli massivlar

Agar ma’lumotlarni jadval ko‘rinishida ya’ni satrlar va ustunlar formatida saqlash talab etilsa, unda ikki o‘lchovli massivlardan foydalanish lozim bo‘ladi.

8 - jadvalda to‘rt qatorli va beshta ustundan iborat massiv berilgan. Bu ikki o‘lchovli massiv hisoblanadi. Undagi qatorlarni birinchi o‘lchov, ustunlarni ikkinchi o‘lcham deb hisoblash mumkin. Ushbu jadvalda saqlangan ma’lumotlarga murojaat qilish uchun massiv nomini va ikkita indeksni ko‘rsatish kerak bo‘ladi. Bunda indeksning birinchisi satr raqamiga, ikkinchisi kerakli element saqlanadigan ustun raqamiga to‘g‘ri keladi.

8-jadval

Ikki o‘lchovli massiv

3.5

-1.9

0.8

5.07

-2.16

1.6

2.5

3.7

0.01

-2.32

3.01

-0.35

15.18

7.09

-15.66

9.5

10.5

5.3

1.9

1.11


Ikki o`lchovli massiv – bu matritsa hisoblanadi, uning har bir elementi ikkita indeksga ega: qator raqami – i, ustun raqami – j.

Umumiy holda ikki o‘lchovli massiv quyidagicha e’lon qilinadi:

[n] [m] = { boshlang‘ich qiymatlar };

Bu yerda toifa massiv elementlari turini belgilaydi, massivning nomi, n – satrlar soni, m – massivning ustunlar soni. Satrlar 0 dan n - 1 gacha, ustunlar esa 0 dan m - 1 gacha raqamlangan.

Masalan: double m[5][7];

Bunda satrlar soni 5 ta va ustunlari soni 7 ta bo‘lgan haqiqiy sonli m massiv e’lon qilingan, satrlar 0 dan 4 gacha, ustunlar 0 dan 6 gacha raqamlangan.

Ixtiyoriy o‘zgaruvchiga o‘xshab, matritsaga ham boshlang‘ich qiymat berilishi mumkin, masalan: int B[2][3] ={{2,3,4}, {7,8,9}};

Matritsa elementiga murojaat qilish uchun uning nomiga, to‘rtburchak qavslarda qator va ustun soni ko‘rsatilishi lozim. Masalan, a [2] [4]- uchinchi satrda va beshinchi ustunda joylashgan a matritsaning elementi degan ma’noni bildiradi.

Matritsa elementlari bilan ishlash uchun ikkita sikldan foydalanish talab etiladi. Matritsani qayta ishlash uchun birinchi (tashqi) sikl parametrining qiymatlari matritsa satrlari sonlari, ikkinchi (ichki) sikl parametri qiymatlari esa ustunlar raqamlarini anglatadi (19-rasm). Matritsa elementlariga ishlov berishda tartib bilan birinchi qator (ustun) elementlari, so‘ngra ikkinchisi va boshqalar oxirigacha ko‘rib chiqiladi. Agar matritsani ustunlar bo‘yicha qayta ishlash zarur bo‘lsa, tashqi siklni ustunlar bilan, ichki siklni qatorlar bo‘yicha tashkil qilish kerak (20-rasm).





Massivlarni qayta ishlash

Matritsalar ustida bajariladigan asosiy amallarni ko‘rib chiqamiz.

Matritsalar ham massivlar kabi element bo‘yicha kiritib chiqariladi.



Matritsa elementlarini kiritib chiqarish uchun quyidagi dastur kodi kiritiladi:

#include

using namespace std ;

int main()

{ int i , j ,N,M, a [ 20] [20] ;

cout<<"N=" ; cin>>N; // Satrlar sonini kiritish

cout<<"M=" ;

cin>>M; // Ustunlar sonini kiritish

cout<<"A matritsa elementlarini kiriting"<

for ( i =0;i

for ( j =0;j

cin>>a [ i ] [ j ] ; //Matritsa elementlarini ketma-ket kiritish

cout<<"A matritsa elementlarini chiqarish"<

for ( i =0;i

{ for ( j =0;j

cout<

cout<

}

}

Matritsa elementlarini jadval shaklida chiqarish uchun quyidagi dastur kodidan ham foydalanish mumkin:

for ( i =0;i

for ( j =0;j

cout<

Matritsa elementlarini bir satrda probel bilan yoki tabulyatsiya belgisi bilan yoki Enter tugmasi orqali kiritish mumkin. Quyida keltirilgan masalaning dastur natijasi berilgan:

N=2

M=3

A matritsa elementlarini kiriting

1 2 3 4 5 6

A matritsa elementlarini chiqarish

1 2 3

4 5 6
C++ dasturlash tilida matritsalarni qayta ishlash bo‘yicha amaliy masalalarni ko‘rib chiqamiz. Bundan oldin matritsaning quyidagi asosiy xususiyatlarini eslab o‘tamiz (21-rasm):

  • agar satr tartib raqami bilan ustun tartib raqami teng bo‘lsa (i = j), bu element bosh diagonalda yotishini anglatadi;

  • agar satr tartib raqami ustun tartib raqamidan kata bo‘lsa (i > j), bu element bosh diagonaldan pastda yotishini anglatadi;

  • agar ustun tartib raqami satr tartib raqamidan kata bo‘lsa (i < j), bu element bosh diagonaldan yuqorida yotishini anglatadi;

  • agar matritsaning indekslari quyidagi tenglikni qanoatlantirsa i + j = n – 1, element qo‘shimcha diagonalda yotadi;

  • agar i + j < n − 1 tenglik bajarilsa, qo‘shimcha diagonaldan yuqorida joylashgan elementlar uchun taalluqli hisoblanadi;

  • element qo‘shimcha diagonaldan pastda joylashishi uchun i + j > n – 1 tenglik bajarilishi kerak:



21-rasm. Matritsaning asosiy xususiyatlari.

Yuqorida bayon qilingan fikrlarni tekshirib ko‘rish uchun C++ dasturlash tilida funksiyalarga doir bir nechta dasturlarni ko‘rib o‘tamiz.

1-misol. Berilgan A(n,n) kvadrat matritsaning diagonal elementlari yig‘indisini topish dasturi.

Berilgan masalaning dastur kodi quyidagicha:

#include

using namespace std;

int main(){

int n, s=0; cout<<"n = "; cin>>n;

int a[n][n];

for(int i=1; i<=n; i++)

for(int j=1; j<=n; j++)

cin>>a[i][j];

for(int i=1; i<=n; cout<

for(int j=1; j<=n; j++)

cout<


for(int i=1; i<=n; i++)

for(int j=1; j<=n; j++)

if (i==j) s+=a[i][j];

cout<<"Yig‘indi: "<

}
2-misol. Berilgan A(n,n) kvadrat matritsaning bosh diagonalidan yuqorida joylashgan elementlari yig‘indisini topish dasturi.

Berilgan masalaning dastur kodi quyidagicha:

#include

using namespace std;

int main(){

int n, s=0; cout<<"n = "; cin>>n;

int a[n][n];

for(int i=1; i<=n; i++)

for(int j=1; j<=n; j++)

cin>>a[i][j];

for(int i=1; i<=n; cout<

for(int j=1; j<=n; j++)

cout<


for(int i=1; i<=n; i++)

for(int j=1; j<=n; j++)

if (i

cout<<"Yig‘indi: "<

}
3-misol. Berilgan A(n,n) kvadrat matritsaning birlik matritsa ekanligini tekshirish dasturi.

Berilgan masalaning dastur kodi quyidagicha:

#include

using namespace std;

int main(){

int n, s=1; cout<<"n = "; cin>>n;

int a[n][n];

for(int i=1; i<=n; i++)

for(int j=1; j<=n; j++)

cin>>a[i][j];

for(int i=1; i<=n; cout<

for(int j=1; j<=n; j++)

cout<


for(int i=1; i<=n; i++)

for(int j=1; j<=n; j++)

if (((i==j)&&(a[i][j]!=1)) || ((i!=j)&&(a[i][j]!=0))){

s=0;

break;

}

if (s) cout<<"Birlik matritsa ";

else cout<<"Birlik matritsa emas ";

}
4-misol. Berilgan A(n,m) matritsaning toq elementlari sonini aniqlash dasturi.

Berilgan masalaning dastur kodi quyidagicha:

#include

using namespace std;

int main(){

int n, m, k=0;

cout<<"n = "; cin>>n;

cout<<"m = "; cin>>m;

int a[n][m];

for(int i=1; i<=n; i++)

for(int j=1; j<=m; j++)

cin>>a[i][j];

for(int i=1; i<=n; cout<

for(int j=1; j<=m; j++)

cout<


for(int i=1; i<=n; i++)

for(int j=1; j<=m; j++)

if (a[i][j]%2==1) k++;

cout<<"Toq elementlari soni: "<

}
5-misol. Berilgan A(n,m) matritsaning har bir satr elementlari o‘rta arifmetigini topish dasturi.

Berilgan masalaning dastur kodi quyidagicha:

#include

using namespace std;

int main(){

int n, m, s=0;

cout<<"n = "; cin>>n;

cout<<"m = "; cin>>m;

int a[n][m];

for(int i=1; i<=n; i++)

for(int j=1; j<=m; j++)

cin>>a[i][j];

for(int i=1; i<=n; cout<

for(int j=1; j<=m; j++)

cout<


for(int i=1; i<=n; s=0, i++){

for(int j=1; j<=m; j++)

s+=a[i][j];

cout<<"s"<

}

}
6-misol. Berilgan A(n,m) matritsaning eng katta va eng kichik elementlari o‘rnini almashtirish dasturi.

Berilgan masalaning dastur kodi quyidagicha:

#include

using namespace std;

int main(){

int n, m;

cout<<"n = "; cin>>n;

cout<<"m = "; cin>>m;

int a[n][m];

for(int i=1; i<=n; i++)

for(int j=1; j<=m; j++)

cin>>a[i][j];

for(int i=1; i<=n; cout<

for(int j=1; j<=m; j++)

cout<


int min=a[1][1], max=a[1][1];

int x, y, k, l;

x=y=k=l=1;

for(int i=1; i<=n; i++)

for(int j=1; j<=m; j++)

if (a[i][j]

min=a[i][j];

x=i, y=j;

}

for(int i=1; i<=n; i++)

for(int j=1; j<=m; j++)

if (a[i][j]>max) {

max=a[i][j];

k=i, l=j;

}

int z=a[x][y];

a[x][y]=a[k][l];

a[k][l]=z;

for(int i=1; i<=n; cout<

for(int j=1; j<=m; j++)

cout<


}
7-misol. Chiziqli algebraik tenglamalar sistemasini Gauss usulida yechish dasturi.

Berilgan masalaning dastur kodi quyidagicha:

#include

using namespace std;

int n, i, j, k;

double d, s;

int main()

{

cout << "Tartib: " << endl;

cin >> n;

double **a = new double *[n];

for (i = 0; i <= n; i++)

a[i] = new double [n];

double **a1 = new double *[n];

for (i = 0; i <= n; i++)

a1[i] = new double [n];

double *b = new double [n];

double *x = new double [n];

cout << "Koeffitsiyent va ozod hadlarni kiriting " << endl;

for (i = 1; i <= n; i++)

{

for (j = 1; j <= n; j++)

{

cout << "a[ " << i << "," << j << "]= ";

cin >> a[i][j];

a1[i][j] = a[i][j];

}

cout << "b,[ " << i << "]= ";

cin >> b[i];

}

for (k = 1; k <= n; k++)

{

for (j = k + 1; j <= n; j++)

{

d = a[j][k] / a[k][k];

for (i = k; i <= n; i++)

{

a[j][i] = a[j][i] - d * a[k][i];

}

b[j] = b[j] - d * b[k];

}

}

for (k = n; k >= 1; k--)

{

d = 0;

for (j = k + 1; j <= n; j++)

{

s = a[k][j] * x[j];

d = d + s;

}

x[k] = (b[k] - d) / a[k][k];

}

cout << "Natijalar: " << endl;

for( i = 1; i <= n; i++)

cout << "x[" << i << "]=" << x[i] << " " << endl;

return 0;

}

Mustaqil bajarish uchun topshiriqlar

1. n (n>0) butun son berilgan. Dastlabki n ta musbat toq sonlarni saqlaydigan n o‘lchamli butun sonli massiv tashkil etuvchi dastur tuzing.

2. n (n>0) butun son berilgan. 3 ning darajalarini saqlaydigan n o‘lchamli butun sonli massiv tashkil etuvchi dastur tuzing.

3. n o‘lchamli, butun sonli massiv berilgan. Berilgan massivdagi barcha toq sonlarni o‘z ichiga oladigan elementlarni o‘sish tartibida saralab, chop etish hamda ularning miqdori k ni aniqlash dasturini tuzing.

4. n o‘lchamli butun tipli a massiv berilgan. Uning a1
kn qo‘shtengsizlikni qanoatlantiradigan oxirgi ak elementining tartib raqamini chiqaruvchi dastur tuzing.

5. Nol bo‘lmagan butun sonli n o‘lchamli massiv berilgan. Uning elementlari geometrik progresssiyani tashkil etishini tekshiruvchi dastur tuzing. Agar tashkil etsa progressiya maxraji aks holda 0(nol) chiqarilsin.

6. n o‘lchamli haqiqiy tipli a massiv berilgan. Uning eng katta va eng kichik elementlari o‘rnini almashtiruvchi dastur tuzing.

7. A(m,n) haqiqiy sonli matritsa va k(1≤k≤m) soni berilgan. Berilgan matritsaning k satridagi elementlarni chop etuvchi dastur tuzing.

8. A(m,n) butun sonli matritsa va k(1≤k≤n) soni berilgan. Berilgan matritsaning k ustunidagi elementlarni chop etuvchi dastur tuzing.

9. Berilgan A(n,n) kvadrat matritsaning bosh diagonalidan pastda joylashgan elementlari yig‘indisini topuvchi dastur tuzing.

10. A(m,n) butun sonli matritsa berilgan. Matritsa satrlarini har birining yig‘indilarini hisoblab, yig‘indisi eng katta bo‘lgan satr tartib raqamini va shu satr yig‘indisini chop etuvchi dastur tuzing.

11. A(m,n) haqiqiy sonli matritsa berilgan. Matritsani har bir satridagi eng katta va eng kichik elementlari o‘rinlarini almashtirib chop etuvchi dastur tuzing.

12. A(m,n) butun sonli matritsa berilgan. Matritsaning eng katta va eng kichik elementlari joylashgan satrlarining o‘rinlari almashtiruvchi dastur tuzing.