Массивлар Массив – бир хил типдаги элементлар гуруҳи бўлиб, битта умумий ном ва хотирага эга. Хоссалари
bet 1/4 Sana 23.02.2022 Hajmi 0,98 Mb. #122680
Bog'liq
Massiv
Массив тушунчаси. Статик массивлар. Кўрсаткичлар. Кўрсаткичларни ўзлаштириш. Динамик массивлар. Массив – бир хил типдаги элементлар гуруҳи бўлиб, битта умумий ном ва хотирага эга. Хоссалари: Барча элементлари битта типга эга Массив битта номга эга Барча элементлар хотирада кетма-кет жойлаштирилган Мисоллар: ўқувчилар рўйхати кўп қаватли уйдаги хонадонлар шаҳардаги университетлар Йил бўйича ҳавонинг температураси массив элементи НОМЕРИ (ИНДЕКС ) массив элементи НОМЕРИ (ИНДЕКС) : 2 массив элементи ҚИЙМАТИ : 15 С++ да массив элементлари НОЛдан бошланади! Нима учун эълон қилинади? Массив номини аниқлаш учун Массив типини аниқлаш учун Элементлар сонини аниқлаш учун Хотирадан жой ажратиш учун Мисол: Ўлчамни константа орқали киритиш: Массив ўлчами (элементлар сони) int X[10], Y[10]; float zz, A[20]; char s[80] ; Бошланғич қийматларни бериш: int A[4] = { 8, -3, 4, 6 }; float B[2] = { 1. }; char C[3] = { 'A', '1', 'Ю' }; Агарда бошланғич қийматлар берилмаган бўлса, элементлари ихтиёрий кераксиз қиймат олиши мумкин! float X[5]; int n = 1; X[n-2] = 4.5; X[n+8] = 12.; Массив чегарасидан чиқиш (маълумотлар хотирадан ўчирилади) Каср қисми олиб ташланади (хатолик йўқ) float B[2] = { 1., 3.8, 5.5 }; Эълон қилиш: Клавиатурадан киритиш: Элемент бўйича амаллар: Экранга чиқариш: const int N = 5; int A[N], i; cout<<“Massivni 5 ta elementini kiriting:\n”; for( i=0; i < N; i++ ) { cout<<"A[i] = ", i ; cin>> A[i] ; } A[0] = A[1] = A[2] = A[3] = A[4] = for( i=0; i < N; i++ ) A[i] = A[i]*2; cout<<“Natija:\n”; for( i=0; i < N; i++ ) cout<< A[i]<<“ ”; #include #include main() { const int N = 5; int A[N], i; // массив элементларини киритиш // массивларни қайта ишлаш // натижаларни чиқариш getch(); } Масала: Клавиатурадан массивни 5 та элементини киритинг ва уларни барчасини 2 га кўпайтиринг ҳамда ҳосил бўлган янги массивни чиқаринг. «4»: Клавиатурадан массивни 5 та элементини киритинг ва уларни ўрта арифметигини топинг. Мисол: 5 та сон киритинг: 4 15 3 10 14 ўрта арифметиги 9.200 «5»: Клавиатурадан массивни 5 та элементини киритинг ва уларни энг кичигини топинг . Мисол: 5 та сон киритинг : 4 15 3 10 14 энг кичиги 3 Масала: Массивни энг катта элементни топинг. Алгоритм: // энг катта элемент деб A[0] – ни оламиз for ( i=1; i < N; i++ ) if ( A[i] > энг каттаси) // A[i] нинг янги энг катта элементини сақлаш Нима учун цикл i=1 дан бошланяпди? max = A[0]; // ҳозирча A[0]– энг каттаси iMax = 0; for ( i=1; i < N; i++ ) // қолганларини текшир if ( A[i] > max ) { // янгисини топиш max = A[i]; //A[i] эслаб қолиш iMax = i; // i эслаб қолиш } Қўшимча: энг катта элементни номерини қандай топамиз? Қандай қилиб қисқартириш мумкин? iMax элементни рақами бўйича ҳар доим A[iMax] ни қийматини олиш мумкин. Шунинг учун ҳамма жойдани max ни A[iMax] га алмаштирамиз ва max ўзгарувчини олиб ташлаймиз. Тасодифий сонлар билан тўлдириш RAND_MAX – энг катта ихтиёрий бутун сон (одатда RAND_MAX = 32767) [0,RAND_MAX] интервалдаги бутун сонлар x = rand(); // биринчи сон x = rand(); // энди бошқа сон Кетма-кетликни бошланғич қийматини ўрнатиш : srand ( 345 ); // 345 дан бошланади Берилган интервалдаги бутун сонлар [0,N-1] интервалдаги бутун сонлар : Мисоллар: [a,b] интервалдаги сонлар : int random(int N) { return rand()% N; } x = random ( 100 ); // [0,99] интервал x = random ( z ); // [0,z-1] интервал x = random ( z ) + a; // [a,z-1+a] интервал x = random (b – a + 1) + a; // [a,b] интервал Тасодифий сонлар билан тўлдириш #include #include main() { const int N = 10; int A[N], i; printf(“Massiv:\n"); for (i = 0; i < N; i++ ) { A[i] = random(100) + 50; cout< } ... } int random(int N) { return rand() % N; } Функция 0 дан N-1 гача бўлга ихтиёрий сонларни чиқаради #include #include main() { const int N = 5; int A[N], i, iMax; // [100,150] ихтиёрий сонларни киритинг //энг катта элемент ва уни номерини топинг printf("\nEng katta element A[%d] = %d", iMax, A[iMax]); getch(); } «4»: Массивни [-10..10] оралиқдаги 10 та сон билан тўлдиринг. Энг катта ва энг кичик элементини ҳамда уларни номерини топинг. Мисол: Жорий массив: 4 -5 3 10 -4 -6 8 -10 1 0 энг каттаси a[4]=10 энг кичиги a[8]=-10 «5»: [-10..10] оралиқдаги 10 та сон билан тўлдиринг. Энг катта иккита элементи ва уни номерини топинг. Мисол: Жорий массив: 4 -5 3 10 -4 -6 8 -10 1 0 энг каттаси a[4]=10, a[7]=8 Масала: массив элементларини тескари тартибда чиқаринг (инверсияни қўлланг). Алгоритм: Жойларини алмаштир A[0] ва A[N-1] , A[1] ва A[N-2], … Псевдокод: for ( i = 0; i < N; i++ ) // A[i] ва A[N-1-i] ўринларини алмаштириш Қандай алмаштириш мумкин? Масала: Иккита пиёлани ўрнини алмаштириш. Масала: Иккита катакни хотирадаги жойини алмаштириш. C сиз ҳам амалга ошириш мумкин? main() { const int N = 10; int A[N], i, c; // Массивни тўлдириш // жорий массивни киритиш for ( i = 0; i < N/2; i++ ) { c = A[i]; A[i] = A[N-1-i]; A[N-1-i] = c; } // олинган массивни чиқариш } «4»: Массивни [-10..10] оралиқдаги ихтиёрий 10 сон билан тўлдиринг. Массивни иккига бўлган ҳолда 1-чи ва 2-чи ярмида инверция амални бажаринг. Масалан: Kiruvchi massiv: 4 -5 3 10 -4 -6 8 -10 1 0 Natija: -4 10 3 -5 4 0 1 -10 8 -6 «5»: Массивни [-12..12] оралиқдаги ихтиёрий 12 сон билан тўлдиринг. Ҳар бир тўртта элементи устида инверция амалини бажаринг. Масалан: Kiruvchi massiv: 4 -5 3 10 -4 -6 8 -10 1 0 5 7 Natija: 10 3 -5 4 -10 8 -6 -4 7 5 0 1 Масала: Массив элементларини битта катак чапга суринг, биринчи элемент охирги элемент ўрнига тушсин. Алгоритм: A[0]=A[1]; A[1]=A[2];… A[N-2]=A[N-1]; Цикл: for ( i = 0; i < N-1; i ++) A[i] = A[i+1]; main() { const int N = 10; int A[N], i, c; // Массивни киритинг // Жорий массивни чиқаринг c = A[0]; for ( i = 0; i < N-1; i ++) A[i] = A[i+1]; A[N-1] = c; // натижавий массивни чиқаринг } 4: Массивни [-10..10] оралиқдаги ихтиёрий 10 та сон билан тўлдиринг. Циклик равишда битта ЎНГга суринг. Мисол: Берилган массив: 4 -5 3 10 -4 -6 8 -10 1 0 Натижа: 0 4 -5 3 10 -4 -6 8 -10 1 5: Массивни [-12..12] оралиқдаги ихтиёрий 12 та сон билан тўлдиринг. Циклик равишда тўртта ЎНГга суринг.. Мисол: Берилган массив: 4 -5 3 10 -4 -6 8 -10 1 0 5 7 Натижа: 1 0 5 7 4 -5 3 10 -4 -6 8 -10 ҳар бир ўзгарувчининг номи (массив) бўлади, ўша ном воситасида унга мурожаат қилинади. ўлчами олдиндан маълум (дастур тузаётганда аниқланади) хотира эълон қилинганда ажратилади дастур ишлаш давомида ўлчамни ўзгартириш мумкин эмас. int x, y = 20; float z, A[10]; char str[80]; ўлчами олдиндан ноаниқ, дастур ишлаши давомида аниқланади. хотира дастур ишлаш давомида ажратилади. Муаммо: агар берилганларнинг номи бўлмаса уларга қандай мурожаат қиламиз? Ечим: хотирадаги адреси орқали. Муаммо: 1) қандай ўзгарувчиларда адресни сақлаш мумкин ? 2) адреслар билан қандай ишланади? Do'stlaringiz bilan baham: