Ikki o’lchovli massivlar yechish dasturini tuzish.

![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;](/data/documents/22977b9e-95c5-48fa-a14e-b514570d0177/page_2.png)
![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’;](/data/documents/22977b9e-95c5-48fa-a14e-b514570d0177/page_3.png)
![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;
}](/data/documents/22977b9e-95c5-48fa-a14e-b514570d0177/page_4.png)
![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]<<" ";](/data/documents/22977b9e-95c5-48fa-a14e-b514570d0177/page_5.png)
![return 0; }
Dastur natijasi:
Ikki o’lchovli massiv yelementlarini satr va ustunlar bo’yicha joylashgan matrisa
ko’rinishida chop yetish uchun har bir satr yelementlari chop yetilganda keyin ”\n”
belgidan ya’ni keyingi satrga o’tishdan foydalanish lozim:
# 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]<<" "; cout<<"\n"; }
return 0;
}
Dastur natijasi:
2-misol. 2 ta matrisa berilgan. Ularni o’zaro ko’payt masining yig’indisidan yangi
matrisa hosil qiling. Bu yerda 1-matrisaning ustunlar soni 2-matrisaning satrlar soniga
teng bo’lishi kerak.
#include <conio.h>
int main()
{ int a[3][3], b[3][3],c[3][3], i, j, k;
for (i=1; i<4; i++)
for (j=1; j<4; j++)
a[i][j] = i*j;
for (i=1; i<4; i++)
for (j=1; j<4; j++)](/data/documents/22977b9e-95c5-48fa-a14e-b514570d0177/page_6.png)
![b[i][j] = 2*i+j;
for (i=1; i<4; i++)
{ for (j=1; j<4; j++)
{ c[i][j] = 0;
for (k=1; k<4; k++)
c[i][j] = c[i][j] + a[i][k]*b[k][j]; }}
for (i=1; i<4; i++)
{ for (j=1; j<4; j++)
cout <<c[i][j]<<" "; cout<<"\n";}
return 0;
}
E ndi ikki o’lchovli massivlarga doir masalalarni ko’rib chiqamiz
Misol. a[3][3] massiv berilgan: int a[3][3]={8,-9,6,-5,-3,12,-13,16,17,-18}.
1) Shu massiv yelementlari yig’indisi va ko’paytmasini hisoblang:
#include <iostream.h>
#include <conio.h>
using namespacye std;
int main()
{ int a[3][3]={8,-9,6,-5,-3,12,-13,16,17},i,j;
float s,p,;
s=0; p=1;
for (i=0;i<3;i++)
for (j=0;j<3;j++)](/data/documents/22977b9e-95c5-48fa-a14e-b514570d0177/page_7.png)
![{ s=s+a[i][j]; p=p*a[i][j];}
cout << "s="<<s<<"\t"<<"p="<<p;
getch();
return 0;
}
2. Shu massiv yelementlarining yeng kattasi va kichigini toping:
#include <iostream.h>
#include <conio.h>
int main()
{ int a[3][3]={8,-9,6,-5,-3,12,-13,16,17},i,j;
int max,min;
max=a[0][0]; min=a[0][0];
for (i=0;i<3;i++)
for (j=0;j<3;j++)
{ if (a[i][j]>max) max=a[i][j];
if (a[i][j]<min) min=a[i][j];
}
cout << "max="<<max<<"\t"<<"min="<<min;
getch();
return 0;
}
3. Ikkita a(3,3) va b(3,3) massivlar berilgan: int a[3][3]={8,-9,6,-5,-3,12,-13,16,-
18}, b[3][3]={11,-2,4,-8,-1,13,-14,21,-23}; Shu masivlarning yig’indisi va
ko’paytmasidan hosil bo’lgan yangi ikkit masivni chop yetish dasturini tuzing:
#include <iostream.h>
#include <conio.h>
using namespacye std;
int main()
{ int a[3][3]={8,-9,6,-5,-3,12,-13,16,-18}, b[3][3]={11,-2,4,-8,-1,13,-14,21,-23};
int s[3][3],p[3][3],i,j;
s[0][0]=0; p[0][0]=0;
for (i=0;i<3;i++)](/data/documents/22977b9e-95c5-48fa-a14e-b514570d0177/page_8.png)
![for (j=0;j<3;j++)
{ s[i][j]= a[i][j]+b[i][j]; p[i][j]= a[i][j]*b[i][j];}cout<<"\n";
cout<<"\t"<<"Massiv yelementlari yigindisi";cout<<"\n";
for ( i=0; i<3; i++) {
for ( j=0; j<3; j++)
cout<<"\t "<<s[i][j]<<" ";
cout<<"\n";}cout<<"\n";
cout<<"\t"<<"Massiv yelementlari ko’paytmasi";cout<<"\n";
for ( i=0; i<3; i++)
{
for ( j=0; j<3; j++)
cout<<"\t "<<p[i][j]<<" ";
cout<<"\n";}
getch();
return 0;}
4. Shu massivning juft yelementlari yig’indisi va toq yelementlari
ko’paytmasini hisoblang.
#include <iostream.h>
#include <conio.h>
using namespacye std;
int main()
{ int a[3][3]={8,-9,6,-5,-3,12,-13,16,17},i,j;
float s,p,;
s=0; p=1;
for (i=0;i<3;i++)
for (j=0;j<3;j++)
{if (a[i][j]%2==0) s=s+a[i][j]; yelse p=p*a[i][j];}
cout << "s="<<s<<"\t"<<"p="<<p;
getch();
return 0;
}](/data/documents/22977b9e-95c5-48fa-a14e-b514570d0177/page_9.png)
![5. Shu massivning bosh diagonallari yelementlari yig’indisi va ko’paytmasini
hisoblang.
#include <iostream.h>
#include <conio.h>
using namespacye std;
int main()
{ int a[3][3]={8,-9,6,-5,-3,12,-13,16,17},i,j;
float s,p,;
s=0; p=1;
for (i=0;i<3;i++)
for (j=0;j<3;j++)
if (i==j) {s=s+a[i][j]; p=p*a[i][j];}
cout << "s="<<s<<"\t"<<"p="<<p;
getch();
return 0;
}
6. Shu massivning manfiy yelementlari yig’indisi va musbat yelementlari
ko’paytmasini hisoblang .
#include <iostream.h>
#include <conio.h>
using namespacye std;
int main()
{ int a[3][3]={8,-9,6,-5,-3,12,-13,16,17},i,j;
float s,p,;
s=0; p=1;
for (i=0;i<3;i++)
for (j=0;j<3;j++)
{if (a[i][j]<0) s=s+a[i][j]; yelse p=p*a[i][j];}
cout << "s="<<s<<"\t"<<"p="<<p;
getch();
return 0;
}](/data/documents/22977b9e-95c5-48fa-a14e-b514570d0177/page_10.png)
![7. Shu massivning satr yelementlari yig’indisi va ko’paytmasini hosil qiling va
ularni chop yeting.
#include <iostream.h>
#include <conio.h>
using namespacye std;
int main()
{ int a[3][3]={8,-9,6,-5,-3,12,-13,16,17},i,j;
float s,p,;
s=0; p=1;
for ( i=0; i<3; i++)
{ for ( j=0; j<3; j++)
cout<<" "<<a[i][j]<<" ";cout<<"\n";}
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{ s=s+a[i][j]; p=p*a[i][j];}
cout<<"\n"<<"\n"<<i<<"-satr yelementlari yig’indisi va ko’paytmasi"<<"\
n"<<"\n";
cout << "s="<<s<<"\t"<<"p="<<p;}
getch();
return 0;
}
8. Shu massivning ustun yelementlari yig’indisi va ko’paytmasini hosil qiling
va ularni chop yeting.
#include <iostream.h>
#include <conio.h>](/data/documents/22977b9e-95c5-48fa-a14e-b514570d0177/page_11.png)
![using namespacye std;
int main()
{ int a[3][3]={8,-9,6,-5,-3,12,-13,16,17},i,j;
float s,p,;
s=0; p=1;
for ( i=0; i<3; i++)
{ for ( j=0; j<3; j++)
cout<<"\t"<<a[i][j]<<" ";cout<<"\n";}
for (j=0;j<3;j++)
{
for (i=0;i<3;i++)
{ s=s+a[i][j]; p=p*a[i][j];}
cout<<"\n"<<"\n"<<"\t"<<j<<"-ustun yelementlari yig’indisi va
ko’paytmasi"<<"\n"<<"\n";
cout << "\t"<<"s="<<s<<"\t"<<"p="<<p;}
getch();
return 0;
}
9. Shu massivning yordamchi diagonallari yelementlari yig’indisi va
ko’paytmasini hisoblang.
#include <iostream.h>
#include <conio.h>
using namespacye std;
int main()
{ int a[3][3]={8,-9,6,-5,-3,12,-13,16,17},i,j;
float s,p,;
s=0; p=1;
for ( i=0; i<3; i++)
{ for ( j=0; j<3; j++)
cout<<"\t"<<a[i][j]<<" ";cout<<"\n";}
for (i=0;i<3;i++)](/data/documents/22977b9e-95c5-48fa-a14e-b514570d0177/page_12.png)
![for (j=0;j<3;j++)
if ((i+j)==2) {s=s+a[i][j]; p=p*a[i][j];}
cout << "Yordamchi diagonal yelementlari yigindisi va ko’paytmasi"<<"\n";
cout <<"\t"<< "s="<<s<<"\t"<<"p="<<p;
getch();
return 0;
}
10.. Shu massivning bosh diagonallari yelementlarining yeng kattasi va yeng
kichigini toping.
#include <iostream.h>
#include <conio.h>
using namespacye std;
int main()
{ int a[3][3]={8,-9,6,-5,-3,12,-13,16,17},c[3],i,j,k;
int max,min; float s,p;
s=0; p=1;k=0;
for ( i=0; i<3; i++)
{ for ( j=0; j<3; j++)
cout<<"\t"<<a[i][j]<<" ";cout<<"\n";}
for (i=0;i<3;i++)
for (j=0;j<3;j++)
if (i==j) {c[k]=a[i][j]; k=k+1;}
max=c[0]; min=c[0];
for (i=0;i<=k;i++)
{ if (c[i]>max) max=c[i];
if (c[i]<min) min=c[i];
}
cout<<"Bosh diagonal yelementlarining yeng katta va yeng kichik
yelementlari"<<"\n";
cout <<"\t "<< "max="<<max<<"\t"<<"min="<<min;
getch();
return 0;
}](/data/documents/22977b9e-95c5-48fa-a14e-b514570d0177/page_13.png)
![Simvolli massivlar .
Ci tilida satrlar simvolli massivlar sifatida ta’riflanadi. Simvolli massivlar
quyidagicha tasvirlanishi mumkin: Char pas [10]; Simvolli massivlar quyidagicha
inisializasiya kilinadi: Char capital[]="TAS’HKENT"; Bu xolda avtomatik ravishda
massiv yelementlari soni aniqlanadi va massiv oxiriga satr kuchirish „ \n’ simvoli
kushiladi. Yukoridagi inisializasiyani quyidagicha amalga oshirish mumkin: Char
capital[]={‘T’,’A’,’S’,’H’,’K’,’Ye’,’N’,’T’,’\n’}; Bu xolda so’z oxirida ‘\n’ simvoli
aniq ko’rsatilishi shart.
Misol uchun palindrom masalasini kurib chikamiz. Palindrom deb oldidan xam
oxiridan xam bir xil ukiladigan so’zlarga aytiladi. Misol uchun non. Dasturda kiritilgan
so’z palindrom yekanligi aniqlanadi:
#include <iostream.h>
{
void main()
ges(a); for( int j=0, a[j]!=‘\0’;j++); I=0;
while(I<j)
if (a[I++]!=a[j--]) break;
if ((j-I)>1) ^^«("Palindrom yemas") yelse ^^«("Palindrom");
Keyingi misolimizda kiritilgan so’zdan berilgan xarf olib tashlash dasturi berilgan:
#include <iostream.h>
void main() {
char s[100]; int c; cin>>s; int i, j;
for ( i = j = 0; s[i] != ‘\0’; i++)
if ( s[i] != c )
s[j++] = s[i];
s[j] = ‘\0’;
cout<<s;
}](/data/documents/22977b9e-95c5-48fa-a14e-b514570d0177/page_14.png)
![Har gal ‘s’ dan farkli simvol uchraganda , u J pozisiyaga yeziladi va fakat shundan
sung J qiymati 1 ga oshadi. Bu quyidagi yezuvna yekvivalent:
if ( s[i] != c )
s[j]
= s[i]
;
j++;
So’zlar massivlari.
Ci tilida so’zlar massivlari ikki o’lchovli simvolli massivlar sifatida ta’riflanadi.
Misol uchun: Char Name[4][5].
Bu ta’rif yerdamida xar biri 5 ta xarfdan iborat bulgan 4 ta so’zli massiv kiritiladi.
So’zlar massivlari quyidagicha inisializasiya kilinishi mumkin:
Char Name[3][8]={"Anvar","Mirkomil","Yusuf"}.
Bu ta’rifda xar bir so’z uchun xotiradan 8 bayt joy ajratiladi va xar bir so’z oxiriga
‘\0’ belgisi quyiladi.
So’zlar massivlari inisializasiya qilinganda so’zlar soni ko’rsatilmasligi mumkin.
Bu xolda so’zlar soni avtomatik aniqlanadi: Char comp[]
[9]={"kompyuter","printer","kartridj"}. Quyidagi dasturda berilgan xarf bilan
boshlanuvchi so’zlar ruyxati bosib chikariladi:
#include <iostream.h> void main() { char a[10][10]; char c;
for (int i=0;i<10;i++) cin>>a[i]; cin>>c;
for (i=0;i<10;i++) if (a[i][0]==c) cin>>a[i];
}
Quyidagi dasturda fan nomi, talabalar ruyxati va ularning baxolari kiritiladi. Dastur
bajarilganda ikki olgan talabalar ruyxati bosib chikariladi:
#include <iostream.h> void main() { char a[10][10]; char s[10]; int k[10];
cin>>s;
for (int i=0;i<10;i++) cin>>a[i];
for (i=0;i<10;i++) {Cin>>k[i]};
for (int i=0;i<10;i++) if (k[i]==2) cout<<a[i];
}
1.4. Ko’rsatkichlar massivlari.
Ko’rsatkichlar massivlari quyidagicha ta’riflanadi
<tip> *<nom>[<son>]
Misol uchun int *pt[6] ta’rif int tipidagi obektlarga olti yelementli massivni
kiritadi.
Ko’rsatkichlar massivlari satrlar masssivlarini tasvirlash uchun kulaydir.
Misol uchun familiyalar ruyxatini kiritish uchun ikki o’lchovli massivdan
foydalanish kerak.
Char
fam[][20]={"Olimov","Raximov","Yergashev"}
Xotirada 60 yelementdan iborat bo’ladi, chunki xar bir familiya gacha 0 lar bilan
tuldiriladi.
Ko’rsatkichlar massivi yerdamida bu massivni quyidagicha ta’riflash mumkin.
Char *pf[]= {"Olimov","Raximov","Yergashev"}.](/data/documents/22977b9e-95c5-48fa-a14e-b514570d0177/page_15.png)
![Bu xolda ruyxat xotirada 23 yelementdan iborat bo’ladi, chunki xar bir familiya
oxiriga 0 belgisi quyiladi
Ko’rsatkichlar massivlari murakkab yelemenlarni sodda usulda tartiblashga imkon
beradi.
Quyidagi misolda matrisa satrlari birinchi yelementlari usishi tartibida chikariladi.
Bu misolda yerdamchi ko’rsatkichlar massivi yaratilib shu massiv tartiblanadi va
massiv asosida matrisa yelementlari chikariladi.
# include <iostream.h> void main() {int n=2; int m=3;
array[][3]={(1,3,5),(3,1,4),(5,7,1)}; int *pa[n];
for (i=0;i<n;i++) pa[I]=(int *)&a[i];
for (i=0;i<n-1;i++) {for (int k=i=1;k<n;k++) if a[i][1]>a[k][1]
{ int *pp=pa[i]; p a[i]
=p a[k]
;p a[k]
=pp; }
;
for (i=0;i<n;i++)
{Cout<<‘\n’<<i+1;
for (int j=0;j<magistr;j++)
Cout<<pa[i][j];} };
Ko’rsatkichlar massivlari funksiyalarda matrisalar qiymatlarini uzgartirish uchun
mumkin. Quyidagi misolda matrisani transponirlash funksiyasi ishlatiladi.
Void trans(int n,double *p[]); { double x;
for (int i=0;i<n
Ikki o‗lchovli massiv elementlari ichidan eng kattasi va kichigini aniqlash
uchun ichma-ich ikkita sikldan foydalanib aniqlaymiz. Ikki o‗lchovli massiv
elementlari ichidan eng kattasi va kichigini aniqlash uchun xuddi bir o‗lchovli
massiv elementlari ichidan eng kattasi va kichigini aniqlash algoritmidan
foydalanamiz.
Ikki o‗lchovli massiv elementlari ichidan eng kattasi va kichigini aniqlash
uchun massivning birinchi elementini eng katta(max) va eng kichik(min) sifatida
qaraymiz. Tanlangan eng katta(max) va eng kichik(min) elementlar qolganlari
bilan solishtiriladi agar ulardan mos ravishda katta va kichik elementlar topilsa
ular eng katta(max) va eng kichik(min) element sifatida qabul qilinadi.
Yuqoridagi algoritm bo‗yicha ikki o‗lchovli massiv elementlari ichidan
eng kattasi va kichigini aniqlash uchun C++ dasturlash tilida quyidagi algoritmni
tavsiya etamiz.](/data/documents/22977b9e-95c5-48fa-a14e-b514570d0177/page_16.png)
![#include <iostream.h>
using namespace std; int
main()
{ int a[20];int n,t; cout<< n= ; ‖ ‖
cin>>n;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>a[j][i];
max=a[1][1]; for(int
i=1;i<n;i++) for(int
j=0;j<n;j++)
if(max<a[j][i]) max=a[j][i];
cout<< max= <<max; min=a[1];
‖ ‖
for(int i=1;i<n;i++)
for(int j=0;j<n;j++)
if(min>a[j][i]) min=a[j][i];
cout<< min= <<min;
‖ ‖
return 0;
}
Kiritish uchun ma‘lumot n=3
3 5 1
0 6 4
7 9 2 Dastur natijasi
max=9
min=0
Demak, massiv elementlari ichidan eng kattasi va kichigini aniqlash uchun
yuqorida keltirilgan algoritm bo‗yicha aniqlanadi. Ikki o‗lchovli massivning har
bir satri yoki ustuni uchun eng katta va eng kichik elementlarini aniqlash mumkin.
Agar ikki o‗lchovli massivning har bir satri yoki ustuni uchun eng katta va eng
kichik elementlarini aniqlash uchun faqat sikllarni to‗g‘ri ifodalab yuqoridagi
algoritm bo‗yicha aniqlash mumkin.](/data/documents/22977b9e-95c5-48fa-a14e-b514570d0177/page_17.png)
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]<<" ";