C++ dasturlash tili yordamida matritsalar va determinatlar ustida amallar bajaruvchi dasturlar yaratish
![“ C++ dasturlash tili yordamida matritsalar va determinatlar ustida amallar
bajaruvchi dasturlar yaratish ”
MUNDARIJA
I. BOB. C++tilida matritsalarni e'lon qilish va aniqlash ................................................................................. 4
1.1. C++ dasturi ikki matrisani Qo'shish uchun ............................................................................................ 5
1.2. C++ dasturi ikki matrisani Ayirish uchun ............................................................................................... 7
1.3. C++tilida matritsalarni ko'paytirish ....................................................................................................... 9
II. BOB. A matritsaning determinantini topish uchun C++ dasturi ............................................................. 11
2.1. Matritsaning transpozitsiyasini topish uchun C++ dasturi .................................................................. 13
2.2. C++ dasturi ikkita matritsaning skalyar ko'paytmasini topish ............................................................. 17
2.3. C++ da matritsaning aniqlovchisi ........................................................................................................ 19
III BOB. Bir necha indeksli massivlar .......................................................................................................... 24
XULOSA ...................................................................................................................................................... 27
FOYDALANILGAN ADABIYOTLAR RO`YXATI. ............................................................................................... 28](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_1.png)
![KIRISH
Mavzuning dolzarbligi . C++ - bu umumiy maqsadli kuchli dasturlash tili
bo'lib, uni kompyuterda deyarli hamma narsani qilish uchun ishlatishingiz
mumkin. Ushbu qo‘llanma yordamida siz C++ tilini mutaxassisdan C++ da
o‘qitiladigan dasturlash asoslaridan bosqichma-bosqich o‘rganasiz, ko‘rsatkichlar,
sinflar, andozalar va boshqalar kabi ilg‘or tushunchalarga
o‘tasiz. Tugatganingizdan so'ng, siz tilni yaxshi tushunasiz va AI, grafika, o'yin
dasturlash va umumiy dasturiy injiniring uchun mustahkam poydevorga ega
bo'lasiz!
C++ dasturlash tili C dasturlash tiliga asoslangan. C dasturlash tili o`z
navbatida B va BCPL dasturlashgan tillaridan kelib chiqqan. BCPL - 1967 yilda
Martin Richards tomonidan o`ylab topilgan bo`lib, operatsion tizimlarni yaratish
uchun mo`ljallangan. Ken Thompson o`zining B tilida BCPL ning ko`p xossalarini
yaratishga harakat qilgan va B dasturlash tilida asosan operatsion tizimning
birinchi variantlarini yozgan. BCPL ham, B ham tipsiz til bo`lgan. Ya`ni
o`zgaruvchilarning ma`lum bir tipi bo`lmagan - har bir o`zgaruvchi kompyuter
xotirasida faqat bir bayt joy egallagan. O`zgaruvchini qanday sifatda ishlatish esa,
ya`ni butun sonmi, haqiqiy sonmi yoki harfmi, dasturchining vazifasi bo`lgan.
C++ dan tashqari boshqa ko`p ob`yektli dasturlashga yo`naltirilgan tillar
mavjud. C++ esa gibrid tildir. Unda C ga o`xshab strukturali dasturlash yoki
yangicha, ob`yektlar bilan dasturlash mumkin. Yangicha deyishimiz ham nisbiydir.
Ob`yektli dasturlash falsafasi paydo bo`lganiga ham yigirma yildan oshyapti. C++
funksiya va ob`yektlarning juda katta kutubxonasiga ega. Ya`ni C++ tilida
dasturlashni o`rganish ikki qismga bo`linadi. Birinchisi bu C++ ni o`zini
o`rganish, ikkinchisi esa C++ ning standart kutubxonasidagi tayyor ob`ekt-
funksiyalardan foydalanishni o`rganishdir.
Matritsalar, shubhasiz, kompyuter fanida juda muhim mavzu. Matritsalar
yordamida algebraik tenglamalarning ildizlarini topishdan tortib, tasvirni qayta
ishlashda va hatto video o'yinlarda tasvirni keng manipulyatsiya qilish va
2](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_2.png)
![xususiyatlarni chiqarishga qadar ko'plab hisoblash muammolari hal qilinadi. Ushbu
kurs ishida biz C++ tilida matritsali ma'lumotlar turini qanday amalga oshirishni va
matritsalar ustida oddiy amallarni bajarishni ko'rib chiqamiz.
Kurs ishining maqsadi: C++ dasturlash tili yordamida matritsalar va
determinatlar ustida amallar bajaruvchi dasturlar yaratish haqida ma`lumotlar
berish.
Kurs ishining vazifalari: C++ dasturlash tili yordamida matritsalar va
determinatlar ustida amallar bajaruvchi dasturlar yaratish to‘g‘risidagi
adabiyotlarni to‘plab, o‘qib tahlil qilish natijasida C++ da massivlar va ularning
xossalari yordamida massivlarni qo’shish, ayirish, ko’paytirish amallari dasturda
qo’llashdan iborat.
3](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_3.png)
![I. BOB. C++tilida matritsalarni e'lon qilish va aniqlash
Matritsa-bu elementlar sifatida qatorlar va ustunlar bilan ikki o'lchovli
massiv. Matritsaning eng ko'p ishlatiladigan operatsiyalari qo'shish, ayirish va
ko'paytirishdir. Matritsani ko'paytirish birinchi matritsaning satr elementlarini
ikkinchi matritsaning barcha ustun elementlari bilan ko'paytiradi. Siyrak matritsa-
elementlari asosan nolga teng bo'lgan matritsa. Quyidagi bo'limda matritsa
operatsiyalari, matritsa turlari, matritsa diagonallari, siyrak matritsa, qo'shni
matritsa va uchburchak matritsalar bo'yicha turli xil C++ dasturlari mavjud.
Agar biron bir dasturlash tilida bir o'lchovli massivlar bilan ishlash
tajribangiz bo'lsa, matritsalarni o'rganish oson bo'ladi. Oddiy bir o'lchovli matritsa-
bu har qanday turdagi to'rtburchaklar massivdan boshqa narsa emas (shuningdek,
ushbu qo'llanmaga tegishli bo'lishi mumkin bo'lgan eng foydali ma'lumotlar turlari
butun sonlar va/yoki butun sonlardir).
Ko'rib turganingizdek, a matrix faqat bir to'g'ri burchakli qator bo'lib,
matritsaning har bir satr faqat oddiy bir o'lchovli qator, ya'ni. Aslida, eng oson yo'li
(va dumbest yo'l, shuningdek!) qandaydir tarzda kompyuterga shunday deb
4](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_4.png)
![o'ylashiga imkon berishdir n bir xil o'lchamdagi bir o'lchovli qator matritsani hosil
qilmoqda:
a 3 ni kodlashning yuqoridagi usuli 3 matritsani ishlayotganda, agar siz kattaroq
qator va ustunlarga ega bo'lgan bir nechta matritsalarda ishlashni istasangiz, tezda
boshqarib bo'lmaydigan bo'lib qoladi. Bu aniq bo'lishi mumkin bo'lsa-da, C/C++
da matritsalarni aniqlash bo'yicha ko'proq mavhumlikka ega bo'lgan echim
allaqachon yuqoridagi kod ichida. Bizga kerak bo'lgan narsa-butun matritsani
ifodalay oladigan ko'rsatgichga bitta ko'rsatgich:
1.1. C++ dasturi ikki matrisani Qo'shish uchun
Bu matritsani qo'shishni namoyish qilish uchun C++ dasturi. Dastur ikkita
matritsani qo'shadi va natijada chiqadigan natijani chop etadi.
5](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_5.png)
![ Dastur ikkita matritsaning satrlari va ustunlari sonini tekshiradi.
Agar ular teng bo'lmasa, matritsalarni qo'shib bo'lmaydi va dastur chiqadi.
Boshqa matritsalar ko'chadan foydalanib qo'shiladi.
Natijada olingan matritsa keyin chop etiladi.
Chiqish.
Bu yerda C++ dasturining manba kodi ikki matrisler Qo'shish va chiqish
chop etish. Dastur chiqishi quyida ko'rsatilgan.
1. #include<iostream>
2. namespace std ;
3. int main ()
4. {
5. int m, n, p, q, i, j, A [5][5] , B [5][5] , C [5][5];
6. cout << "Enter rows and column of matrix A : ";
7. cin >> m >> n ;
8. cout << "Enter rows and column of matrix B : ";
9. cin >> p >> q ;
10. if (( m != p ) && ( n != q ))
11. {
12. cout << "Matrices cannot be added!";
13. exit(0);
14. }
15. cout << "Enter elements of matrix A : ";
16. for ( i = 0; i < m ; i ++)
17. for ( j = 0; j < n ; j ++)
18. cin >> A [ i ][ j ];
19. cout << "Enter elements of matrix B : ";
20. for ( i = 0; i < p ; i ++)
21. for ( j = 0; j < q ; j ++)
22. cin >> B [ i ][ j ];
23. for ( i = 0; i < m ; i ++)
24. for ( j = 0; j < n ; j ++)
25. C [ i ][ j ] = A [ i ][ j ] + B [ i ][ j ];
26. cout << "Sum of matrices \n ";
27. for ( i = 0; i < m ; i ++)
28. { for ( j = 0; j < n ; j ++)
29. cout << C [ i ][ j ] << " ";
30. cout << " \n ";
31. }
32. return 0;
33. }
6](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_6.png)
![Dasturni Tushuntirish
Dastlab foydalanuvchidan ikkala matritsaning satrlari va ustunlari sonini kiritish
so'raladi.
Agar a matritsaning satrlari va ustunlari soni mos ravishda b matritsaning
satrlari va ustunlari soniga teng bo'lmasa, unda matritsalarni qo'shib bo'lmaydi.
Dastur chiqadi.
Else agar ular teng bo'lsa, ikkala matritsaning elementlari kiritiladi va qo'shiladi.
Natijada C matritsasi chop etiladi.
1.2. C++ dasturi ikki matrisani Ayirish uchun
Ushbu C++ bir xil tartibda ikkita matritsani olib tashlashni ko'rsatadigan
dastur. Dastur matritsalarni boshlab beradi, ikkita matritsaning har bir mos
elementini chiqaradi va qiymatni uchinchi matritsaga qo'yadi. Mana manba kodi
ning C++ bir xil tartibdagi ikkita matritsani olib tashlashni ko'rsatadigan dastur. C+
+ dasturi muvaffaqiyatli tuzilgan va Linux tizimida ishlaydi. Dastur chiqishi
quyida ham ko'rsatilgan .
7](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_7.png)
![1. /*
2. * C++ program to demonstrate matrix subtraction
3. */
4. #include<iostream>
5. using namespace std ;
6.
7. int main ()
8. {
9. int mat1 [3][3], mat2 [3][3], mat3 [3][3];
10.
11. /* Initializing Mat1 and Mat2 */
12. for (int i = 0; i < 3; i ++)
13. {
14. for (int j = 0; j < 3; j ++)
15. {
16. mat1 [ i ][ j ] = i + 1;
17. mat2 [ i ][ j ] = j + 1;
18. }
19. }
20.
21. /* Adding matrices Mat1 and Mat2 */
22. for (int i = 0; i < 3; i ++)
23. {
24. for (int j = 0; j < 3; j ++)
25. {
26. mat3 [ i ][ j ] = mat2 [ i ][ j ] - mat1 [ i ][ j ];
27. }
28. }
29.
30. cout << "First Matrix : " << endl ;
31. for (int i = 0; i < 3; i ++)
32. {
33. for (int j = 0; j < 3; j ++)
34. {
35. cout << mat1 [ i ][ j ] << " \t ";
36. }
37. cout << endl ;
38. }
39.
40. cout << "Second Matrix : " << endl ;
41. for (int i = 0; i < 3; i ++)
42. {
43. for (int j = 0; j < 3; j ++)
44. {
8](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_8.png)
![45. cout << mat2 [ i ][ j ] << " \t ";
46. }
47. cout << endl ;
48. }
49.
50. cout << "Third Matrix = Second Matrix - First Matrix : " << endl ;
51. for (int i = 0; i < 3; i ++)
52. {
53. for (int j = 0; j < 3; j ++)
54. {
55. cout << mat3 [ i ][ j ] << " \t ";
56. }
57. cout << endl ;
58. }
59. }
1.3. C++tilida matritsalarni ko'paytirish
Dastur ikkita matritsani ko'paytiradi va natijani chop etadi.
Dastur ikkita matritsani oladi va ularni ko'paytiradi.
Agar a matritsaning ustunlari soni b matritsaning qatorlari soniga teng
bo'lmasa, matritsalarni qo'shib bo'lmaydi.
Dastur chiqadi.
Else ular ko'paytiriladi va natija chop etiladi.
Chiqish.
1. #include<iostream>
2. using namespace std ;
3. int main ()
4. {
5. int r1, c1, r2, c2, i, j, k ;
6. int A [5][5] , B [5][5] , C [5][5];
7. cout << "Enter number of rows and columns of matrix A : ";
8. cin >> r1 >> c1 ;
9](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_9.png)
![9. cout << "Enter number of rows and columns of matrix B : ";
10. cin >> r2 >> c2 ;
11. if ( c1 != r2 )
12. {
13. cout << "Matrices cannot be multiplied!";
14. exit(0);
15. }
16. cout << "Enter elements of matrix A : ";
17. for ( i = 0; i < r1 ; i ++)
18. for ( j = 0; j < c1 ; j ++)
19. cin >> A [ i ][ j ];
20. cout << "Enter elements of matrix B : ";
21. for ( i = 0; i < r2 ; i ++)
22. for ( j = 0; j < c2 ; j ++)
23. cin >> B [ i ][ j ];
24. for ( i = 0; i < r1 ; i ++)
25. {
26. for ( j = 0; j < c2 ; j ++)
27. {
28. C [ i ][ j ] = 0;
29. for ( k = 0; k < r2 ; k ++)
30. {
31. C [ i ][ j ] += A [ i ][ k ] * B [ k ][ j ];
32. }
33. }
34. }
35. cout << "Product of matrices \n ";
36. for ( i = 0; i < r1 ; i ++)
37. {
38. for ( j = 0; j < c2 ; j ++)
39. cout << C [ i ][ j ] << " ";
40. cout << " \n ";
41. }
42. return 0;
43. }
Dasturni Tushuntirish
Foydalanuvchidan a va b matritsaning satrlari va ustunlari sonini kiritish
so'raladi.
Agar a matritsaning ustunlari soni b matritsaning qatorlari soniga teng
bo'lmasa, matritsalarni ko'paytirish mumkin emas.
Dastur exit () funksiyasi yordamida chiqariladi.
10](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_10.png)
![ Agar ular teng bo'lsa, matritsalar ko'chadan foydalanib ko'paytiriladi va
mahsulot s matritsasida saqlanadi.
Natijada keyin chop etiladi.
II. BOB. A matritsaning determinantini topish uchun C++ dasturi
Bu C++ dasturi muayyan matritsaning determinanti qiymatini ko'rsatadi.
Determinant-bu kvadrat matritsa bilan bog'liq qiymat. Uni matritsaning
yozuvlaridan ma'lum bir arifmetik ifoda bilan hisoblash mumkin, uning qiymatini
aniqlashning boshqa usullari ham mavjud. Matritsaning determinantini hisoblash
uchun C++ dasturining manba kodi. C++ dasturi muvaffaqiyatli tuzilgan va Linux
tizimida ishlaydi. Dastur chiqishi quyida ham ko'rsatilgan.
1. /*
2. * C++ Program to Find the Determinant of a Given Matrix
3. */
11](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_11.png)
![4. #include<iostream>
5. #include<math.h>
6. #include<conio.h>
7.
8. using namespace std ;
9. double d = 0;
10. double det (int n, double mat [10][10]);
11. double det (int n, double mat [10][10])
12. {
13. double submat [10][10];
14. if ( n == 2)
15. return (( mat [0][0] * mat [1][1]) - ( mat [1][0] * mat [0][1]));
16. else
17. {
18. for (int c = 0; c < n ; c ++)
19. {
20. int subi = 0; //submatrix's i value
21. for (int i = 1; i < n ; i ++)
22. {
23. int subj = 0;
24. for (int j = 0; j < n ; j ++)
25. {
26. if ( j == c )
27. continue;
28. submat [ subi ][ subj ] = mat [ i ][ j ];
29. subj ++;
30. }
31. subi ++;
32.
33. }
34. d = d + (pow(-1 , c ) * mat [0][ c ] * det ( n - 1 , submat ));
35. }
36. }
37. return d ;
38. }
39. int main (int argc, char ** argv )
40. {
41.
42. cout << "Enter the dimension of the matrix: \n ";
43. int n ;
44. cin >> n ;
45. double mat [10][10];
46. cout << "Enter the elements of the matrix: \n ";
47. for (int i = 0; i < n ; i ++)
12](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_12.png)
![48. {
49. for (int j = 0; j < n ; j ++)
50. {
51. cin >> mat [ j ][ i ];
52. }
53. }
54. cout << "The determinant of the given matrix is: " << det ( n, mat );
55. return 0;
56. }
2.1. Matritsaning transpozitsiyasini topish uchun C++ dasturi
Dastur matritsani oladi va matritsaning transpozitsiyasini bosib chiqaradi.
Transpozitsiya matritsasida qatorlar ustunga aylanadi va aksincha.
Dastlab matritsaning satr va ustunlari soni kiritiladi, so'ngra matritsa
elementlari kiritiladi.
Matritsaning tranpozasi chop etiladi.
Chiqish.
Bu erda bir matritsasi Transpose topish uchun C++ dasturi manba kodi. Dastur
chiqishi quyida ko'rsatilgan.
1. #include<iostream>
2. namespace std ;
3. int main ()
13](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_13.png)
![4. {
5. int A [10][10] , m, n, i, j ;
6. cout << "Enter rows and columns of matrix : ";
7. cin >> m >> n ;
8. cout << "Enter elements of matrix : ";
9. for ( i = 0; i < m ; i ++)
10. for ( j = 0; j < n ; j ++)
11. cin >> A [ i ][ j ];
12. cout << "Entered Matrix : \n ";
13. for ( i = 0; i < m ; i ++)
14. {
15. for ( j = 0; j < n ; j ++)
16. cout << A [ i ][ j ] << " ";
17. cout << " \n ";
18. }
19. cout << "Transpose of Matrix : \n ";
20. for ( i = 0; i < n ; i ++)
21. {
22. for ( j = 0; j < m ; j ++)
23. cout << A [ j ][ i ] << " ";
24. cout << " \n ";
25. }
26. return 0;
27. }
Dasturni Tushuntirish
Foydalanuvchidan matritsaning satrlari va ustunlari sonini kiritish so'raladi.
Matritsaning elementlarini kiritish so'raladi va ' a ' matritsasiga saqlanadi.
Transpozitsiya satrlarni ustunlar bilan va ustunlarni qatorlar bilan almashtirish
orqali topiladi.
Asl matritsa va transpozitsiya ikkalasi ham bosilgan.
14](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_14.png)
![2-usul:
Ushbu C++ dasturi har qanday tartibdagi berilgan matritsaning
transpozitsiyasini hosil qiladi. Bu standart kiritish dan qator hajmini oladi va yangi
yordamida buning uchun xotira ajratadi[]. Keyin elementlar ko'p o'lchovli
massivda saqlanadi va transpose an'anaviy usul yordamida olinadi. Transpose chop
etiladi va xotira nihoyat delete [] yordamida ajratiladi. Bu yerda C++ dasturi
manba kodi har qanday tartibda berilgan matritsasi bir transpose hosil bo'ladi. C++
15](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_15.png)
![dasturi muvaffaqiyatli tuzilgan va Linux tizimida ishlaydi. Dastur chiqishi quyida
ham ko'rsatilgan.
1. /*
2. * C++ Program to Generate a Transpose of a Given Matrix of any order
3. */
4. #include <iostream>
5.
6. int main ()
7. {
8. std ::cout << "Enter the order of matrix ";
9. int x, y ;
10. std ::cin >> x >> y ;
11.
12. double** arr = new double*[ x ];
13. for (int i = 0; i < y ; i ++)
14. {
15. arr [ i ] = new double[ y ];
16. }
17. for (int i = 0; i < x ; i ++)
18. {
19. for (int j = 0; j < y ; j ++)
20. {
21. std ::cin >> arr [][ j ];
22. }
23. }
24. for(int i = 0; i < x ; i ++)
25. {
26. for(int j = i ; j < y ; j ++)
27. {
28. int temp = arr [ i ][ j ];
29. arr [][ j ] = arr [ j ][];
30. arr [ j ][ i ] = temp ;
31. }
32. }
33. std ::cout << "Transpose Matrix" << std ::endl;
34. for(int i = 0; i < x ; i ++)
35. {
36. for(int j = 0; j < y ; j ++)
37. {
38. std ::cout << arr [ i ][ j ] << " ";
39. }
40. std ::cout << " \n ";
41. }
16](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_16.png)
![42. for(int i = 0 ; i < y ; i ++)
43. {
44. delete[] arr [ i ];
45. }
46. delete[] arr ;
47. }
2.2. C++ dasturi ikkita matritsaning skalyar ko'paytmasini topish
Dastur ikkita matritsani oladi va skalyar ko'paytmani hisoblaydi.
Dastur ikkita matritsaning hajmini oladi.
Agar ular teng bo'lmasa, nuqta mahsulotini topib bo'lmaydi va dastur tugaydi.
Boshqa matritsalarning nuqta mahsuloti hisoblanadi.
Natijada chop etiladi.
Chiqish.
1. #include<iostream>
2. using namespace std ;
3. int main ()
4. {
5. int i, j, m, n, p, q ;
6. int A [10][10] , B [10][10] , C [10];
7. cout << "Enter number of rows and columns of matrix A : ";
8. cin >> m >> n ;
9. cout << "Enter number of rows and columns of matrix B : ";
10. cin >> p >> q ;
11. if (( m != p ) && ( n != q ))
12. {
13. cout << "Dot product cannot be found as matrices are not of same size!";
14. exit(0);
15. }
17](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_17.png)
![16. cout << "Enter elements of matrix A : ";
17. for ( i = 0; i < m ; i ++)
18. for ( j = 0; j < n ; j ++)
19. cin >> A [ i ][ j ];
20. cout << "Enter elements of matrix B : ";
21. for ( i = 0; i < m ; i ++)
22. for ( j = 0; j < n ; j ++)
23. cin >> B [ i ][ j ];
24. for ( i = 0; i < m ; i ++)
25. {
26. C [ i ] = 0;
27. for ( j = 0; j < n ; j ++)
28. C [ i ] += A [ i ][ j ] * B [ i ][ j ];
29.
30. }
31. // Printing matrix A //
32. cout << "Matrix A : \n ";
33. for ( i = 0; i < m ; i ++)
34. {
35. for ( j = 0; j < n ; j ++)
36. cout << A [ i ][ j ] << " ";
37. cout << " \n ";
38. }
39.
40. // Printing matrix B //
41. cout << "Matrix B : \n ";
42. for ( i = 0; i < m ; i ++)
43. {
44. for ( j = 0; j < n ; j ++)
45. cout << B [ i ][ j ] << " ";
46. cout << " \n ";
47. }
48. cout << "Dot product : \n ";
49. for ( i = 0; i < m ; i ++)
50. cout << C [ i ] << " ";
51. return 0;
52. }
Dasturni Tushuntirish
Foydalanuvchidan ikkita matritsaning satrlari va ustunlari sonini kiritish
so'raladi.
Agar mos keladigan qatorlar va ustunlar teng bo'lmasa, nuqta mahsulotini
hisoblash mumkin emas. Dastur chiqadi.
18](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_18.png)
![ Boshqa tomondan, ikkala matritsaning elementlariga kirish va saqlash talab
qilinadi int 'a' va 'B'massivlari.
tegishli ustunlari A va B ko'paytirilib qo'shiladi, bu esa beradi nuqta mahsuloti
har bir ustun vektor sifatida yaratilganligi sababli ushbu ustunning.
Natijada keyin chop etiladi.
2.3. C++ da matritsaning aniqlovchisi
Kvadrat matritsaning determinantini uning element qiymatlari yordamida
hisoblash mumkin. A matritsaning determinantini det(A) deb belgilash mumkin va
uni geometriyada matritsa tomonidan tasvirlangan chiziqli transformatsiyaning
19](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_19.png)
![masshtablash omili deb atash mumkin. C++ da matritsaning aniqlovchisi
Matritsaning determinantini faqat kvadrat matritsa uchun birinchi qator kofaktorini
mos keladigan kofaktorning determinantiga ko'paytirish va yakuniy natija olish
uchun ularni muqobil belgilar bilan qo'shish orqali hisoblash mumkin.
Matritsaning determinantiga quyidagi misol keltiriladi.
#include <iostream>
#include <math.h>
using namespace std ;
int determinant ( int matrix [ 10 ][ 10 ], int n ) {
int det = 0 ;
int submatrix [ 10 ][ 10 ];
if ( n == 2 )
return (( matrix [ 0 ][ 0 ] * matrix [ 1 ][ 1 ]) - ( matrix [ 1 ][ 0 ] * matrix [ 0 ][ 1 ]));
else {
for ( int x = 0 ; x < n ; x ++) {
int subi = 0 ;
for ( int i = 1 ; i < n ; i ++) {
int subj = 0 ;
for ( int j = 0 ; j < n ; j ++) {
if ( j == x )
continue ;
submatrix [ subi ][ subj ] = matrix [ i ][ j ];
subj ++;
}
subi ++;
}
det = det + ( pow (- 1 , x ) * matrix [ 0 ][ x ] * determinant ( submatrix , n - 1 ));}}
return det ;
}
int main ()
20](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_20.png)
![{
int n , i , j ;
int matrix [ 10 ][ 10 ];
cout << "Enter the size of the matrix:\n" ;
cin >> n ;
cout << "Enter the elements of the matrix:\n" ;
for ( i = 0 ; i < n ; i ++)
for ( j = 0 ; j < n ; j ++)
cin >> matrix [ i ][ j ];
cout << "The entered matrix is:" << endl ;
for ( i = 0 ; i < n ; i ++)
{
for ( j = 0 ; j < n ; j ++)
cout << matrix [ i ][ j ] << " " ;
cout << endl ;}
cout << "Determinant of the matrix is " << determinant ( matrix , n );
return 0 ;
}
Natija
Enter the size of the matrix: 3
Enter the elements of the matrix:
7 1 3
2 4 1
1 5 1
The entered matrix is:
7 1 3
2 4 1
1 5 1
Determinant of the matrix is 10
21](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_21.png)
![Yuqoridagi dasturda matritsaning hajmi va elementlari main() funksiyasida
berilgan. Keyin determinant() funksiyasi chaqiriladi. U ko'rsatilgan matritsaning
determinantini qaytaradi. Bu quyidagi kod parchasi bilan ko'rsatilgan.
cout << "Enter the size of the matrix:\n" ;
cin >> n ;
cout << "Enter the elements of the matrix:\n" ;
for ( i = 0 ; i < n ; i ++)
for ( j = 0 ; j < n ; j ++)
cin >> matrix [ i ][ j ];
cout << "The entered matrix is:" << endl ;
for ( i = 0 ; i < n ; i ++) {
for ( j = 0 ; j < n ; j ++)
cout << matrix [ i ][ j ] << " " ;
cout << endl ;
}
cout << "Determinant of the matrix is " << determinant ( matrix , n );
Determinant() funksiyasida matritsaning o'lchami 2 bo'lsa, u holda determinant
to'g'ridan-to'g'ri hisoblanadi va qiymat qaytariladi. Bu quyidagicha ko'rsatilgan.
if (n == 2)
return ((matrix[0][0] * matrix[1][1]) - (matrix[1][0] * matrix[0][1]));
Agar matritsaning o'lchami 2 bo'lmasa, determinant rekursiv tarzda hisoblanadi. X,
i va j sikl o'zgaruvchilari bilan ishlatiladigan 3 ta nested for tsikli mavjud. Ushbu
tsikllar determinantni hisoblash uchun ishlatiladi va determinant() funksiyasi ichki
determinantni hisoblash uchun rekursiv chaqiriladi va keyin uni tashqi qiymat
bilan ko'paytiradi. Bu quyidagi kod parchasi bilan ko'rsatilgan.
22](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_22.png)
![for ( int x = 0 ; x < n ; x ++) {
int subi = 0 ;
for ( int i = 1 ; i < n ; i ++) {
int subj = 0 ;
for ( int j = 0 ; j < n ; j ++) {
if ( j == x )
continue ;
submatrix [ subi ][ subj ] = matrix [ i ][ j ];
subj ++;
}
subi ++;
}
det = det + ( pow (- 1 , x ) * matrix [ 0 ][ x ] * determinant ( submatrix , n - 1 ));
}
C++ da matritsaning aniqlovchisi
Matritsaning determinantini faqat kvadrat matritsa uchun birinchi qator kofaktorini
mos keladigan kofaktorning determinantiga ko'paytirish va yakuniy natija olish
uchun ularni muqobil belgilar bilan qo'shish orqali hisoblash mumkin.
Avval matritsani va matritsaning o'lchov qiymatini oladigan
determinantOfMatrix(int mat[N][N], int o'lchov) funksiyasiga egamiz. Agar
matritsa faqat 1 o'lchovli bo'lsa, u [0][0] matritsa qiymatini qaytaradi. Ushbu shart
23](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_23.png)
![asosiy shart sifatida ham qo'llaniladi, chunki biz har bir rekursiv chaqiruvda
o'lchamlarni kamaytirish bilan matritsamizni rekursiv ravishda takrorlaymiz .
int determinantOfMatrix ( int mat [ N ][ N ], int dimension ){
int Det = 0 ;
if ( dimension == 1 )
return mat [ 0 ][ 0 ];
Keyin birinchi qatorga qadar kofaktor(int mat[N][N], int temp[N][N], int p, int q,
int n) funksiyasiga uzatiladigan kofaktorMat[N][N] ni e'lon qilamiz. o'lchamidan
kichikroqdir. Matritsaning determinanti Det o'zgaruvchisida saqlanadi, har birida
tsikl takrorlanishi uchun belgilar almashadi. Keyinchalik bu det chop etiladigan
asosiy funktsiyaga qaytariladi .
III BOB. Bir necha indeksli massivlar
Jadvallar funktsiyalar argumentlari sifatida kelganda jadvallarning birinchi
parametridan boshqa parametrining chegaralari ko’rsatilishi shartdir. Misol
tariqasida uch o’lchovli kvadrat matritsani uch o’lchovli vektorga ko’paytirish
funktsiyasini k’orib chiqamiz:
Void Umn_vec( float a[3][3],float b[3], float c[3])
{
for(I=0;i<3;++) {
c[I]=0;
for(j=0;j<3;j++)
c[I]+=a[I,j]*b[j];
};
}
Har hil chegarali jadvallar bilan funktsiyalardan foydalanishning bir yuli bu
oldindan kiritiluvchi konstantalardan foydalanishdir. Lekin asosiy yuli
24](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_24.png)
![ko’rsatkichlar massivlaridan foydalanish. Matritsani vektorga ko’paytirish
funktsiyasi ko’rsatkichlar massivlari yordamida qo’yidagicha yoziladi:
Void Umn_vec( int n,float* a[],float b[], float c[])
{ int I,j;
for(I=0;i<n;++) {
c[I]=0;
for(j=0;j<n;j++)
c[I]+=a[I,j]*b[j];
};
}
Matritsani matritsaga ko’paytirish funktsiyasi esa qo’yidagicha yoziladi:
Void Umn_matr( float* a[],float* b[], float* c[])
{
int I,j,k;
for(I=0;i<n;++)
for(j=0;j<n;j++)
{c[I,j]=0;
for(k=0;k<n;k++)
c[I,j]+=a[I,k]*b[j,k];
};
}
Massivlar bir necha indeksga ega bo'lishlari mumkin. C++ kompilyatorlari eng
kamida 12 ta indeks bilan ishlashlari mumkin. Masalan, matematikadagi m x n
kattalikdagi matritsani ikkita indeksli massiv yordamida berisak bo'ladi.
int matritsa [4][10];
Yuqorida to'rt satrlik, 10 ustunlik matritsani e'lon qildik. Bir indeksli massivlar
kabi ko'p indeksli massivlarni initsalizatsiya ro'yhati bilan birga e'lon qilish
mumkin. Masalan:
char c[3][4] = {
{ 2, 3,9, 5}, // birinchi satr qiymatlari
25](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_25.png)
![{-10, 77,5, 1}, // ikkinchi " "
{ 90,233,3,-3} // uchinchi " " };
int m[2][2] = {56,77,8,-3}; // oldin birinchi satrga qiymatlar beriladi,
// keyin esa ikkinchi satrga
double d[4][3][6] = {2.55, -46,0988}; // birinchi satrning dastlabki ikkita
// elementi qiymat oladi,
// massivning qolgan elementlari esa
// nolga tenglashtiriladi
Massivning indekslarini funksiyaga bildirish yana muammoligicha qoladi. Albatta,
birinchi indeksdan tashqari qolgan boshqa indekslar kattaligini funksiya ichida
berish ma'noga egadir. Lekin birinchi indeks kattaligini tashqaridan, qo'shimcha
parametr sifatida bersak, funksiyamiz chiroyliroq chiqadi, turli kattalikdagi
massivlarni o'lish imkoniga ega bo'ladi.
26](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_26.png)
![XULOSA
C++ bu umumiy maqsadli kuchli dasturlash tili bo'lib, uni kompyuterda
deyarli hamma narsani qilish uchun ishlatishingiz mumkin. Ushbu qo‘llanma
yordamida siz C++ tilini mutaxassisdan C++ da o‘qitiladigan dasturlash
asoslaridan bosqichma-bosqich o‘rganasiz, ko‘rsatkichlar, sinflar, andozalar va
boshqalar kabi ilg‘or tushunchalarga o‘tasiz. Tugatganingizdan so'ng, siz tilni
yaxshi tushunasiz va AI, grafika, o'yin dasturlash va umumiy dasturiy injiniring
uchun mustahkam poydevorga ega bo'lamiz. Matritsalar, shubhasiz, kompyuter
fanida juda muhim mavzu. Matritsalar yordamida algebraik tenglamalarning
ildizlarini topishdan tortib, tasvirni qayta ishlashda va hatto video o'yinlarda
tasvirni keng manipulyatsiya qilish va xususiyatlarni chiqarishga qadar ko'plab
hisoblash muammolari hal qilinadi. Ushbu kurs ishida biz C++ tilida matritsali
ma'lumotlar turini qanday amalga oshirishni va matritsalar ustida oddiy amallarni
bajarishni ko'rib chiqamiz.
Matritsa-bu elementlar sifatida qatorlar va ustunlar bilan ikki o'lchovli
massiv. Matritsaning eng ko'p ishlatiladigan operatsiyalari qo'shish, ayirish va
ko'paytirishdir. Matritsani ko'paytirish birinchi matritsaning satr elementlarini
ikkinchi matritsaning barcha ustun elementlari bilan ko'paytiradi. Siyrak matritsa-
elementlari asosan nolga teng bo'lgan matritsa. Quyidagi bo'limda matritsa
operatsiyalari, matritsa turlari, matritsa diagonallari, siyrak matritsa, qo'shni
matritsa va uchburchak matritsalar bo'yicha turli xil C++ dasturlari mavjud.
27](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_27.png)
![FOYDALANILGAN ADABIYOTLAR RO`YXATI.
1. A.A. Xoidjigitov , Sh.f.Madraximov, U.E.Adamboyev “Informatika va
programmalash ”.O`quv qo`llanma, O`z.MU . 2005-yil.
2. B. Straustrop. “Yazik programmirovaniya C++. ” Binom press , 2006-yil.
3. Qobulov “C++ tili “Toshkent nash. 2008-yil.
4. Madraximov. F “C++ dasturlash tili” uslubiy qo`llanma. 2009-yil.
5. Sayfiyev J.F “C++ tiliga kirish”-uslubiy qo`llanma.Buxoro-2005.
6. http.//www.dastur.uz
7. Жесс Либерти, “Освой самостоятельно С++ за 21 день”, Санкт
Петербург 2000, 815 с.
8. Либерти Д. Освой самостоятельно С++: 10 минут на урок. Пер с англ.
Вильямс, 374 стр,2004 г.
9. Шмидский Я.К. Прораммирование на языке С++: Самоучитель.
10. Учебное пособие. Диалектика. 361 стр, 2004 г.
11. Киммел П., « Borland C ++5» . СПб.: BHV , 1997г.
12. Sayfiyev J. F., «С++ tiliga kirish», Buxoro 2004 y.
13. Nazirov Sh. A., Qobulov R. V., «Ob’yektga mo`ljallangan dasturlash»,
Toshkent 2006 y.
14. Boltayev Sh. J., Elov B. B., «Zmonaviy dasturlash tillari», Buxoro 2004 y.
15. Elov B. E., Boltayev Sh. J., «Dasturlash texnologiyalari», Toshkent - 2002 y.
INTERNET SAYTLAR.
1. https://www.sparknotes.com/cs/c-plus-plus-fundamentals/
pointersandbasicstructures/summary/
2. https://favtutor.com/blogs/recursion-cpp
3. https://uzbekdevs.uz/darsliklar/cpp/cpp-da-funksiya
4. https://www.cprogramming.com/
28](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_28.png)
![29](/data/documents/90dc3632-e97b-45c1-a667-243fad0f7961/page_29.png)
“ C++ dasturlash tili yordamida matritsalar va determinatlar ustida amallar bajaruvchi dasturlar yaratish ” MUNDARIJA I. BOB. C++tilida matritsalarni e'lon qilish va aniqlash ................................................................................. 4 1.1. C++ dasturi ikki matrisani Qo'shish uchun ............................................................................................ 5 1.2. C++ dasturi ikki matrisani Ayirish uchun ............................................................................................... 7 1.3. C++tilida matritsalarni ko'paytirish ....................................................................................................... 9 II. BOB. A matritsaning determinantini topish uchun C++ dasturi ............................................................. 11 2.1. Matritsaning transpozitsiyasini topish uchun C++ dasturi .................................................................. 13 2.2. C++ dasturi ikkita matritsaning skalyar ko'paytmasini topish ............................................................. 17 2.3. C++ da matritsaning aniqlovchisi ........................................................................................................ 19 III BOB. Bir necha indeksli massivlar .......................................................................................................... 24 XULOSA ...................................................................................................................................................... 27 FOYDALANILGAN ADABIYOTLAR RO`YXATI. ............................................................................................... 28
KIRISH Mavzuning dolzarbligi . C++ - bu umumiy maqsadli kuchli dasturlash tili bo'lib, uni kompyuterda deyarli hamma narsani qilish uchun ishlatishingiz mumkin. Ushbu qo‘llanma yordamida siz C++ tilini mutaxassisdan C++ da o‘qitiladigan dasturlash asoslaridan bosqichma-bosqich o‘rganasiz, ko‘rsatkichlar, sinflar, andozalar va boshqalar kabi ilg‘or tushunchalarga o‘tasiz. Tugatganingizdan so'ng, siz tilni yaxshi tushunasiz va AI, grafika, o'yin dasturlash va umumiy dasturiy injiniring uchun mustahkam poydevorga ega bo'lasiz! C++ dasturlash tili C dasturlash tiliga asoslangan. C dasturlash tili o`z navbatida B va BCPL dasturlashgan tillaridan kelib chiqqan. BCPL - 1967 yilda Martin Richards tomonidan o`ylab topilgan bo`lib, operatsion tizimlarni yaratish uchun mo`ljallangan. Ken Thompson o`zining B tilida BCPL ning ko`p xossalarini yaratishga harakat qilgan va B dasturlash tilida asosan operatsion tizimning birinchi variantlarini yozgan. BCPL ham, B ham tipsiz til bo`lgan. Ya`ni o`zgaruvchilarning ma`lum bir tipi bo`lmagan - har bir o`zgaruvchi kompyuter xotirasida faqat bir bayt joy egallagan. O`zgaruvchini qanday sifatda ishlatish esa, ya`ni butun sonmi, haqiqiy sonmi yoki harfmi, dasturchining vazifasi bo`lgan. C++ dan tashqari boshqa ko`p ob`yektli dasturlashga yo`naltirilgan tillar mavjud. C++ esa gibrid tildir. Unda C ga o`xshab strukturali dasturlash yoki yangicha, ob`yektlar bilan dasturlash mumkin. Yangicha deyishimiz ham nisbiydir. Ob`yektli dasturlash falsafasi paydo bo`lganiga ham yigirma yildan oshyapti. C++ funksiya va ob`yektlarning juda katta kutubxonasiga ega. Ya`ni C++ tilida dasturlashni o`rganish ikki qismga bo`linadi. Birinchisi bu C++ ni o`zini o`rganish, ikkinchisi esa C++ ning standart kutubxonasidagi tayyor ob`ekt- funksiyalardan foydalanishni o`rganishdir. Matritsalar, shubhasiz, kompyuter fanida juda muhim mavzu. Matritsalar yordamida algebraik tenglamalarning ildizlarini topishdan tortib, tasvirni qayta ishlashda va hatto video o'yinlarda tasvirni keng manipulyatsiya qilish va 2
xususiyatlarni chiqarishga qadar ko'plab hisoblash muammolari hal qilinadi. Ushbu kurs ishida biz C++ tilida matritsali ma'lumotlar turini qanday amalga oshirishni va matritsalar ustida oddiy amallarni bajarishni ko'rib chiqamiz. Kurs ishining maqsadi: C++ dasturlash tili yordamida matritsalar va determinatlar ustida amallar bajaruvchi dasturlar yaratish haqida ma`lumotlar berish. Kurs ishining vazifalari: C++ dasturlash tili yordamida matritsalar va determinatlar ustida amallar bajaruvchi dasturlar yaratish to‘g‘risidagi adabiyotlarni to‘plab, o‘qib tahlil qilish natijasida C++ da massivlar va ularning xossalari yordamida massivlarni qo’shish, ayirish, ko’paytirish amallari dasturda qo’llashdan iborat. 3
I. BOB. C++tilida matritsalarni e'lon qilish va aniqlash Matritsa-bu elementlar sifatida qatorlar va ustunlar bilan ikki o'lchovli massiv. Matritsaning eng ko'p ishlatiladigan operatsiyalari qo'shish, ayirish va ko'paytirishdir. Matritsani ko'paytirish birinchi matritsaning satr elementlarini ikkinchi matritsaning barcha ustun elementlari bilan ko'paytiradi. Siyrak matritsa- elementlari asosan nolga teng bo'lgan matritsa. Quyidagi bo'limda matritsa operatsiyalari, matritsa turlari, matritsa diagonallari, siyrak matritsa, qo'shni matritsa va uchburchak matritsalar bo'yicha turli xil C++ dasturlari mavjud. Agar biron bir dasturlash tilida bir o'lchovli massivlar bilan ishlash tajribangiz bo'lsa, matritsalarni o'rganish oson bo'ladi. Oddiy bir o'lchovli matritsa- bu har qanday turdagi to'rtburchaklar massivdan boshqa narsa emas (shuningdek, ushbu qo'llanmaga tegishli bo'lishi mumkin bo'lgan eng foydali ma'lumotlar turlari butun sonlar va/yoki butun sonlardir). Ko'rib turganingizdek, a matrix faqat bir to'g'ri burchakli qator bo'lib, matritsaning har bir satr faqat oddiy bir o'lchovli qator, ya'ni. Aslida, eng oson yo'li (va dumbest yo'l, shuningdek!) qandaydir tarzda kompyuterga shunday deb 4
o'ylashiga imkon berishdir n bir xil o'lchamdagi bir o'lchovli qator matritsani hosil qilmoqda: a 3 ni kodlashning yuqoridagi usuli 3 matritsani ishlayotganda, agar siz kattaroq qator va ustunlarga ega bo'lgan bir nechta matritsalarda ishlashni istasangiz, tezda boshqarib bo'lmaydigan bo'lib qoladi. Bu aniq bo'lishi mumkin bo'lsa-da, C/C++ da matritsalarni aniqlash bo'yicha ko'proq mavhumlikka ega bo'lgan echim allaqachon yuqoridagi kod ichida. Bizga kerak bo'lgan narsa-butun matritsani ifodalay oladigan ko'rsatgichga bitta ko'rsatgich: 1.1. C++ dasturi ikki matrisani Qo'shish uchun Bu matritsani qo'shishni namoyish qilish uchun C++ dasturi. Dastur ikkita matritsani qo'shadi va natijada chiqadigan natijani chop etadi. 5