logo

Ikki o’lchovli massivlar yechish dasturini tuzish.

Загружено в:

08.08.2023

Скачано:

0

Размер:

138.15234375 KB
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]<<" "; 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++) 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++)      { 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++)      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;
}  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;
}  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> 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++)      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;
} 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;
} 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"}. 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. #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.

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]<<" ";