Ikki o’lchovli massivlar yechish dasturini tuzish.
Ikki o’lchovli massivlar yechish dasturini tuzish. Reja 1. Ikki o’lchovli massivlar. 2. Belgili va so’zlar massivlar. 3. Ko’rsatkichlar massivlari. 4. Ikki o‗lchovli massiv elementlari ichidan eng kattasi va kichigini aniqlash.
Ikki o’lchovli massivlar Ikki o’lchovli massivlar matematikada matrisa yeki jadval tushunchasiga mos keladi. Jadvallarning insializasiya qilish qoidasi, ikki o’lchovli massivning yelementlari massivlardan iborat bo’lgan bir o’lchovli massiv ta’rifiga asoslangandir. Aytaylik a(n,m) o’lchovli matrisa berilgan:A=¿ |a 00 a 01 ....a 0n¿||a 10 a 11 ....a 1n¿||.......................¿|¿ ¿ ¿¿ Matrisa yelementlari belgilash uchun ikki indeksli o’zgaruvchi ishlatiladi, a[n][m], bu yerda n-satrlar soni, m-ustunlar soni. Matrisa quyidagicha ye’lon qilingan bo’lishi mumkin: const n=5, m=5; int A[n][m], bu yerda n - satrlar soni(birinchi, chap o’lchov), m – ustunlar soni yoki satrdagi yelementlar soni (ikkinchi o’ng o’lchov). Matrisa tezkor xotirada satr bo’yicha joylashadi va uzluksiz joyni yegallaydi, hamda ining hajmi n*m*sizeof(int) ga teng bo’ladi, bu yerda int – matrisa yelementlarining turi. Matrisani tavsiflashning u yoki bu usulu konkret masalaning turiga qarab belgilanishi ham mumkin. Matrisa satr va ustunlarni nomerlash 0 dan boshlanadi. Matrisani inisialaziyalash uni tavsiflash vaqtida amalga oshirilishi mumkin, masalan: a= | 1 − 2 3 10 20 33 − 11 22 36 | int A[3][3]= {{1, -2, 3}, { 10, 20, 33}, {-11, 22, 36}}; Agar satrda talab qilinganidan kam sondagi yelement berilgan bo’lsa, u holda qolganlari 0 bilan inisialaziya qilinadi: int A[5][3]= {{1, -2, 3, -4, 5}, { 10, 20, 33, -40}, {-11, 22, 300, 400, 500}}; Bu misolda 2-satrning oxirxi yelementi o gat yeng bo’ladi. Misol uchun ikki qator va uch ustundan iborat bo’lgan xaqiqiy turga tegishli d massiv boshlang’ich qiymatlari quyidagicha ko’rsatilishi mumkin: float a[2][3]={(1,-2.5,10),(-5.3,2,14)}; Bu yozuv quyidagi qiymat berish operatorlariga mosdir: a[0][0]=1;a[0][1]=-2.5;a[0][2]=10;a[1][0]=-5.3;a[1][1]=2;a[1][2]=14; Bu qiymatlarni bitta ro’yxat bilan hosil qilish mumkin: float a[2][3]={1,-2.5,10,-5.3,2,14}; Inisializasiya yordamida boshlangich qiymatlar aniqlanganda massivning hamma yelementlariga qiymat berish shart yemas. Misol uchun: int x[3][3]={(1,-2,3),(1,2),(- 4)}. Bu yozuv quyidagi qiymat berish operatorlariga mosdir: x[0][0]=1;x[0][1]=-2;x[0] [2]=3;x[1][0]=-1;x[1][1]=2;x[2][0]=-4;
Inisializasiya yordamida boshlangich qiymatlar aniqlanganda massivning birinchi indeksi chegarasi ko’rsatilishi shart yemas, lekin qolgan indekslar chegaralari ko’rsatilishi shart. Misol uchun: Double x[] [2]={(1.1,1.5),(-1.6,2.5),(3,-4)} Bu misolda avtomatik ravishda qatorlar soni uchga teng deb olinadi. Ikki o’lchovli massiv yelementlarini kiritish Oddiy ko’rinishda ikki o’lchovli massiv yelementlarini kiritish quyidagicha bajariladi: for ( i=0; i<n; i++) for ( j=0; j<m; j++) cin>>A[i][j]; Bunda har bir satrda bitta sonni teramiz, lekin qaysi nomerdagi yelementni kiritayotganimiz ko’rinmaydi. Shuning kiritlayotgan yelementni yekranda ko’rib turish uchun quyidagicha yozishimiz mumkin: # include <iostream.h> using namespacye std; int main ( ) {int a[3][3],j,i, m=3, n=3; float s,yeps; for ( i=0; i<n; i++) { for ( j=0; j<m; j++) { cout<<"a["<<i<<"]"<<"["<<j<<"]"<<"="; cin>>a[i][j];} cout<<"\n"; } return 0; } 1-misol .Quyidagi ko’radigan misolimizda jadval kiritilib xar bir qatorning maksimal yelementi aniqlanadi va bu yelementlar orasida yeng kichigi aniqlanadi: #include <iostream.h> void main() { double a[4,3]; double s,max=0.0,min=0.0; int i,j; for(i=0;i<4;i++) { for(j=0;j<3;j++) { Cout<<"a ["<<i<<" ] [" <<j <<"] ="; Cin>>s; a[i,j ] =s; if (max<s) max=s; }; Cout<<‘\n’;
if (max<min) min=max; } Cout<<"\n min=",min; } Matrisa yelementlarini tasodifiy sonlar orqali aniqlash Matrisa yelementlarini kiritish uchun ketadigan vaqtni tejash maqsadida ba’zi masalalarni yechish uchun massiv yelementlarini tasodifiy sonlar generatori orqali aniqlash mumkin: for ( i=0; i<n; i++) for ( j=0; j<m; j++) A[i][j]=rand(); Agar masalaga qo’yilgan shart bo’yicha, matrisa yelementlari [a,b) oraliqqa tegishli bo’lishi kerak bo’lsa, bu yerda a>b, u holda sikl operatorida A[i][j] = random(b-a)+a yozish kerak.Bu usuldan matrisa yelementlari uchun cheklov qo’yilmagan paytda foydalanish mumkin Massiv yelementlariga son qiymat berishda kompyuter xotirasidagi tasodifiy butun sonlardan foydalanish xam mumkin. Buning uchun standart kutubxonaning rand ( ) funksiyasini ishga tushirish kerak. rand ( ) funksiyasi yerdamida 0 ^ 32767 oralikdagi ixtiyoriy sonlarni olish mumkin. Bu qiymatlar umuman tasodifiydir. ( psevdo - tasodifiy degani). Agar dastur qayta-qayta ishlatilsa, ayti tasodifiy qiymatlar takrorlanaveradi. Ularni yangi tasodifiy qiymatlar qilish uchun srand ( ) funksiyasini dasturda bir marta ye’lon qilish kerak. Dastur ishlashi jarayonida yextiyojga karab rand ( ) funksiyasi chakirilaveradi. Tasodifiy qiymatlar bilan ishlash uchun <stdlib.h> faylini ye’lon qilish zarur. Masalan , [1,100) oraliqda a(3,3) massiv yelementlarini hosil qilish va chop yetish quyidagicha bajariladi: # include <iostream.h> # include <conio.h> # include <stdlib.h> #include <time.h> int main() { int n=3,m=3, a[n][m],i,j; for ( i=0; i<n; i++) for ( j=0; j<m; j++) a[i][j]=1+rand()%100; for ( i=0; i<n; i++) { for ( j=0; j<m; j++) cout<<" "<<a[i][j]<<" "; cout<<"\n"; } return 0; }
srand ( ) funksiyasidagi qiymatni avtomatik ravishda uzgaradigan xolatga keltirish uchun srand ( time (NULL)) yozish ma’kul, shunda kompyuter ichidagi soatning qiymati time ( ) funksiyasi yordamida urnatiladi va srand ga parametr sifatida beriladi. NULL yoki 0 deb yozilsa, qiymat sekundlar ko’rinishida beriladi. Vaqt bilan ishlash uchun <time.h> ni ye’lon qilish kerak. #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <time.h> void main ( ) { srand ( time (0)); int a[5], b[5], i; for (i = 0; i < 5; i++) a[i] = rand ( ); for (i = 0; i < 5; i++) { b[i] = a[i] + 64; cout << "b="<<b[i]<<yendl; } getch ( ); } Izox: tasodifiy sonlar ichida manfiy sonlarning ham qatnashishini ixtiyor yesak, a[i] = 1050 - rand ( ); yoki a[i] = rand ( )-1000 ; deb yozish ham mumkin Matrisa yelementlarini ba’zi bir qonuniyatlar orqali ham aniqlash mumkin,masalan: for ( i=0 ; i<n; i++) for ( j=0; j<m; j++) A[i][j]=( i+1)*(j +1); Bunda ko’rinishda aniqlangan matrisalarni ba’zi masalarni yechishda tahlil qilish osonroq. Matrisa bunday usullarda aniqlanilishi dastur bajarilish jarayonida matrisala yelementlarini qayta-qayta kiritish uchun vaqt sarflashni oldini oladi, Ikki o’lchovli massiv yelementlarini chiqarish Oddiy ko’rinishda ikki o’lchovli massiv yelementlarini kiritish quyidagicha bajariladi: for ( i=0; i<n; i++) for ( j=0; j<m; j++) cout<<a[i][j]; Massiv yelementlarini chiqarish bunday ko’rinishda berilsa, uning hamma yelementlari bir satrga joylashadi: # include <iostream.h> using namespacye std; int main ( ) {int a[3][3]={1, 2 ,3 ,4 ,5 ,6, 7 ,8, 9}, j,i, m=3, n=3; float s,yeps; for ( i=0; i<n; i++) for ( j=0; j<m; j++) cout<<a[i][j]<<" ";