Функциянинг аргументи сифатида массивлврнинг ишлатилиши. Кўп ўлчамли массивлар.

1 Функциянинг аргументи сифатида массивларнинг ишлатилиши. Кўп ўлчамли массивлар • Режа: 1. Кўп ўлчамли статик массивлар 2. Икки ўлчамли массивни хотирада жойлашиши 3. Уч ўлчамли массивни хотирада жойлашиши 4. Тўрт ўлчамли массивни хотирада жойлашиши Кўп ўлчамли статик массивлар С++ тилида массивлар элементининг турига чекловлар қўйилмайди, лекин бу турлар чекли ўлчам - даги объектларнинг тури бўлиши керак. Чунки компилятор массивнинг хотирадан қанча жой (байт) эгаллашини ҳисоблай олиши керак. Хусусан, массив компонентаси массив бўлиши мумкин («векторлар-вектори»), натижада матрица деб номланувчи икки ўлчамли массив ҳосил бўлади. Агар матрицанинг элементи ҳам вектор бўлса , уч ўлчамли массивлар - куб ҳосил бўлади. Шу йўл билан ечилаётган масалага боғлиқ равишда ихтиёрий ўлчамдаги массивларни яратиш мумкин . Икки ўлчамли массивнинг синтаксиси қуйидаги кўринишда бўлади: <тур> <ном> [<узунлик >] [<узунлик>] Кўп ўлчамли статик массивлар Масалан, Ҳақиқий сонлар массивининг эълон қилиниши: f loat a [ m ][ n ]; Эълон қилинган а матрицани кўриниши : Кўп ўлчамли статик массивлар Энди адрес нуқтаи - назаридан кўп ўлчамли массив элементларига мурожаат қилишни кўрайлик. Қуйидаги эълонлар берилган бўлсин: int a[3][2]; float b[2][2][2]; Биринчи эълонда икки ўлчамли массив, яъни 2 сатр ва 3 устундан иборат матрица эълон қилинган, иккинчисида уч ўлчамли - 3 та 2х2 матрицадан иборат бўлган массив эълон қилинган. 6 Икки ўлчамли массивни хотирада жойлашиши 77 Уч ўлчамли массивни хотирада жойлашиши 88 Тўрт ўлчамли массивни хотирада жойлашиши 9 Бир ва икки ўлчовли массив I- ҳол. (1) вектор берилган. II -ҳол . Фараз қилайлик, (1) нинг ҳар бир элементи ўз навбатида вектор бўлсин, бу ҳолда биз икки ўлчовли массивни аниқлаймиз. (2)} ,..., , { 2 1 n a a a a                 nmnn nn a a a a a a a a a A ... ... ... ... ... ... ... 21 22221 11211 10 Уч ўлчовли массив III- ҳол . Энди уч ўлчовли массивни қараймиз. Бу ерда иккита ҳол мавжуд. а) (1) ни ҳар бир элементини матрица деб яъни уни ҳар бир элементини (2) кўринишда қарашимиз мумкин. б) (2) ни ҳар бир элементини вектор, яъни уни ҳар бир элементини (1) кўринишда қарашимиз мумкин. Иккала ҳолда ҳам уч ўлчовли матрицани кўриниши қуйидагича бўлади. 11 Уч ўлчовли массив Иккала ҳолда ҳам уч ўлчовли матрицани кўриниши қуйидагича бўлади.     nmnmnmnm nnnn nnnn mmmm mmmma a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a ... . .......... .......... ... ... ......... .......... .......... ... ....... .......... .......... ... ... ....... .......... .......... ... ....... .......... .......... ... ... 221 2232221 1131211 2322212 22223222221 21213212211 1312111 12123122121 11113112111 (3) 12 Тўрт ўлчовли массив IV- ҳол . Тўрт ўлчовли массивни қараймиз. Бу ерда қуйидаги ҳоллар бўлади: а) (1) ни ҳар бир элементи уч ўлчовли массив, яъни (1) ни ҳар бир элементи (3) кўринишда бўлиши мумкин, б) агар (2) ни ҳар бир элементи матрицадан иборат бўлса, яъни (2) ни ҳар бир элементи (2) кўринишда бўлиши мумкин, в) агар (3) ни ҳар бир элементи ўз навбатида вектордан иборат бўлса, яъни (3) ни ҳар бир элементи (1) кўринишда бўлиши мумкин. 13 Тўрт ўлчовли массив Уччала ҳолда ҳам тўрт ўлчовли массив қуйидаги кўринишда бўлади:              mn n n m m A A A A A A A A A ....... .... .......... .......... ........ ......... 2 1 2 22 21 1 12 11         ijn ijn ijn ij ij ij ij ij ij ij aaa aaa aaa A ... ..................... ...... 2 1 2 22 21 1 12 11 14 Тўрт ўлчовли массивни геометрик ифодаси 1-ҳол 2-ҳол 15 Тўрт ўлчовли массивни геометрик ифодаси Бу кўп ўлчовли матрицалар устида қандай амаллар бажариш мумкин. I - ҳол учун қуйидаги амаллар бажарилади. а) вектор узунлиги б) max ва min қийматларни топиш в) саралаш II - ҳол учун. а) транспонирлаш б) дискреминантини ҳисоблаш в) тескарисини топиш г) рангини ҳисоблаш д) изини ҳисоблаш е)Матрицани сонга кўпайтириш ё)Матрицаларни қўшиш ж)Матрицаларни кўпайтириш з) Матрицаларни векторга кўпайтириш III - ҳол учун. а) max ва min топиш б) нормаларни ҳисоблаш ва бошқалар 1616 Кўп ўлчамли массивларга мисоллар Кўп ўлчамли массивда унинг типи, ўлчами ва ҳар бир ўлчамни элементлар сони кўрсатилиши лозим int MyArray1[10]; // 10 та элементли бир ўлчовли массив . int MyArray2[20][10]; /* 20 та элементли ва ҳар бир элементи 10 тадан бўлган икки ўлчовли массив .*/ int MyArray3[30][20][ 10]; /* 30 та элементли ва ҳар бир элементи 20 * 10 тадан бўлган уч ўлчовли массив . */ С++ да массивлар қуйидагича ўсиш тартибида тартибланади MyArray1[0], MyArray2[0][0], MyArray3[0][0][0], кейин бошқа элементлари MyArray1[1], MyArray2[0][1], MyArray3[0][0][1] ва бошқалар 1717 Кўп ўлчамли массивларни эълон қилиш Кўп ўлчамли массивлар худди бир ўлчамли массивга ўхшаб эълон қилинади. Биринчи бўлиб энг кичкинаси олинади : int MyArray[3][3][3] = {0,1,2,3,4,5,6,7,8,9,10,11}; Уч ўлчовли массив бошланғич қийматлари қуйидагича олинади : MyArray[0][0][0] == 0 MyArray[0][0][1] == 1 MyArray[0][0][2] == 2 MyArray[0][1][0] == 3 MyArray[0][1][1] == 4 MyArray[0][1][2] == 5 MyArray[0][2][0] == 6 MyArray[0][2][1] == 7 MyArray[0][2][2] == 8 MyArray[1][0][0] == 9 MyArray[1][0][1] == 10 MyArray[1][0][2] == 11 1818 Кўп ўлчамли массивларни эълон қилиш Қўшимча фигурали қавслар кўп ўлчамли массвини алоҳида фрагментларини инициализация қилишга имкон беради. Ҳар бир фигурали қавслар битта аниқ ўлчамга тегишли бўлади. Бўш фигурали қавсларни ёзиш мумкин эмас. Уч ўлчовли массив бошланғич қийматлари қуйидагича олинади : int MyArray[3][3][3] = { {{0,1}}, {{100},{200,210},{300}}, {{1000},{2000,2100},{3000,3100,3200}} }; Бу оператор учун MyArray массив элементлари қуйидаги қийматларни олади MyArray[0][0][0] == 0 MyArray[0][0][1] == 1 MyArray[1][0][0] == 100 MyArray[1][1][0] == 200 MyArray[1][1][1] == 210 MyArray[1][2][0] == 300 MyArray[2][0][0] == 1000 MyArray[2][1][0] == 2000 MyArray[2][1][1] == 2100 MyArray[2][2][0] == 3000 MyArray[2][2][1] == 3100 MyArray[2][2][2] == 3200 1919 Кўп ўлчамли массивларни эълон қилиш Бир ўлчовли массивлар билан кўп ўлчовли массивларни инициализация қилишда энг чапдаги массивни ўлчамини кўрсатиш шарт эмас. У инициализация натижасида аниқланади . Уч ўлчовли массив бошланғич қийматлари қуйидагича олинади : int MyArray[ ][3][3] = { {{0,1}}, {{100},{200,210},{300}}, {{1000},{2000,2100}} }; Транслятор бунда гап 3*3*3 ўлчамли массив ҳақида кетаётганлигини аниқлайди. Бу ҳол учун эса 4*3*3 ўлчам олинади. int MyArray[ ][3][3] = { {{0,1}}, {{100},{200,210},{300}}, {{1000},{2000,2100}} , {{10000}} }; 20 Тасодифий сонлар билан тўлдириш for ( i = 0; i < N; i ++ ) for ( j = 0; j < M; j ++ ) A[i][j] = rand() % (b - a + 1 ) + a;for ( i = 0; i < N; i ++ ) for ( j = 0; j < M; j ++ ) A[i][j] = rand() % (b - a + 1 ) + a; [a; b] интервал ? int main(){ int n,i,j, c[100][100]; cin>>n; int a = 5; int b = 10; for (i = 0; i < n; i ++) for (j = 0; j < n; j ++) c[i][j] = rand()%(b - a + 1) + a; for (i = 0; i < n; i ++){ for (j = 0; j < n; j ++) cout<<c[i][j]<<&#34; &#34;; cout<<endl; } }int main(){ int n,i,j, c[100][100]; cin>>n; int a = 5; int b = 10; for (i = 0; i < n; i ++) for (j = 0; j < n; j ++) c[i][j] = rand()%(b - a + 1) + a; for (i = 0; i < n; i ++){ for (j = 0; j < n; j ++) cout<<c[i][j]<<&#34; &#34;; cout<<endl; } } 2121 Бир ўлчамли массивларни киритиш ва чиқариш функцияси Хусусий холда массивни элементларини йиғиндисини топиш функцияси . int massiv_one(int n, int a[ ]) { int i, s = 0; for (i = 0; i < n; i++) cin>>a[i]; for (i = 0; i < n; i ++) s = s + a[i]; return s; }int massiv_one(int n, int a[ ]) { int i, s = 0; for (i = 0; i < n; i++) cin>>a[i]; for (i = 0; i < n; i ++) s = s + a[i]; return s; } 2222 Икки ўлчамли массивларни киритиш ва чиқариш функцияси Хусусий холда массивни элементларини йиғиндисини топиш функцияси . const MAXN = 3; int massiv_two(int n, int b[MAXN][MAXN]) { int i, j, s = 0; for (i = 0; i < n; i++){ for (j = 0; j < n; j++) cin>>b[i][j];} for (i = 0; i < n; i ++){ for (j = 0; j < n; j++) s = s + b[i][j];} return s; } const MAXN = 3; int massiv_two(int n, int b[MAXN][MAXN]) { int i, j, s = 0; for (i = 0; i < n; i++){ for (j = 0; j < n; j++) cin>>b[i][j];} for (i = 0; i < n; i ++){ for (j = 0; j < n; j++) s = s + b[i][j];} return s; } 2323 Уч ўлчамли массивларни киритиш ва чиқариш функцияси Хусусий холда массивни элементларини йиғиндисини топиш функцияси . int massiv_three (int n, int c[MAXN][MAXN][MAXN]) { int i, j, k, s = 0; for (i = 0; i < n; i++){ for (j = 0; j < n; j++){ for (k = 0; k < n; k++) cin>>c[i][j][k];} } for (i = 0; i < n; i ++){ for (j = 0; j < n; j++){ for (k = 0; k < n; k++) s = s + c[i][j][k]; } } return s; } int massiv_three (int n, int c[MAXN][MAXN][MAXN]) { int i, j, k, s = 0; for (i = 0; i < n; i++){ for (j = 0; j < n; j++){ for (k = 0; k < n; k++) cin>>c[i][j][k];} } for (i = 0; i < n; i ++){ for (j = 0; j < n; j++){ for (k = 0; k < n; k++) s = s + c[i][j][k]; } } return s; } 2424 Функцияларни чақириш Асосий дастурда эълон қилинган функциялар чақирилади. int main() { const int n = 3; int b[n][n], c[n][n][n], a[n]; // cout << massiv_one(n, a); // cout << massiv_two(n, b); cout << massiv_three(n, c); getch(); return 0; }int main() { const int n = 3; int b[n][n], c[n][n][n], a[n]; // cout << massiv_one(n, a); // cout << massiv_two(n, b); cout << massiv_three(n, c); getch(); return 0; } 25 Статик массив #include <iostream> using namespace std; int main() { int array_2d[3][3] = { {11, 12, 13}, {21, 22, 23}, {31,32,33}}; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { cout << array_2d[i][j] << &#34; &#34;; } cout << endl; } cin.get(); return 0; } Динамик массив #include <iostream> using namespace std; int main(int argc, char* argv[]) {int n = 3; // satrlar soni int m = 3; // ustunlar soni int** array_2d; // ko&#39;rsatkichli massivni hosil qilamiz array_2d = new int*[n]; // har bir satr uchun massiv qiymatlarini hosil qilamiz for (int i = 0; i < n; i++) { array_2d[i] = new int[m];} for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { array_2d[i][j] = (i+1)*10+(j+1); cout << array_2d[i][j] << &#34; &#34;; }cout << endl; } // massivni qiymatlarini o&#39;chiramiz for (int i = 0; i < n; i++) { delete[] array_2d[i]; } // massivni ko&#39;rsatkichlarini o&#39;chiramiz delete[] array_2d; cin.get(); return 0;}