Mảng 2 Chiều

PHẦN 1: Các câu lệnh duyệt mảng 2 chiều thường gặp
    *Ghi chú: n là số dòng, m là số cột

-Nhập mảng
for(int i=0;ifor(int j=0;j{
        cout<<"nhap vao phan tu thu "<cin>>a[i][j];
        }

-Xuất mảng
for(int i=0;i{  
for(int j=0;jcout<        cout<    }
*Một số câu lệnh chỉ có trong ma trận vuông: ( số dòng bằng số cột n=m):
-Xuất các phần tử nằm trên đường chéo chính
    for(int i=0;icout<
-Xuất các phần tử nằm phía trên đường chéo chính(còn gọi là tam giác trên)
for(int i=0;i    for(int j=0;jcout<

-Xuất các phần tử nằm phía dưới đường chéo chính( còn gọi là tam giác dưới)
for(int i=0;i     for(int j=0;j    cout<
-Xuất các phần tử nằm trên đường chéo phụ
for(int i=0;icout<



-Xuất các phần tử nằm phía trên đường chéo phụ
for(int i=0;i   for(int j=0;j-Xuất các phần tử nằm phía dưới đường chéo phụ
for(int i=0;i        for(int j=n-i;j        cout<
PHẦN 2: Một số bài tập tham tham khảo
1. viết hàm tính tổng các phần tử trên cùng một dòng.
void tongpttrendong(int a[][100],int n,int m)
{
    for(int i=0;i    {
        int S=0;
        for(int j=0;j            S+=a[i][j];
        cout<<"dong "<    }
}






2. viết hàm tính tổng các phần tử trên cùng một cột
void tongpttrencot(int a[][100],int n,int m)
{
for(int i=0;i {
          int s=0;
        for(int j=0;j              s=s+a[j][i];
         cout<<"cot "<     }
}


3. viết hàm tính tổng các phần tử tuộc đường chéo chính trong ma trận
vuông.
   int tongptdcchinh(int a[][100],int n,int m)
{
  int s=0;
  for(int i=0;i          s=s+a[i][i];
       return s;
}
4.  Viết hàm tính tổng các giá trị lớn nhất trên mỗi dòng.
int maxdong(int a[][100],int n,int m)
{
int s=0;
        for(int i=0;i     {
                 int max=a[i][0];
                for(int j=1;j                                if(a[i][j]>max)
                                     max=a[i][j];
                 s=s+max;
                    }
       return s;
    }

5.  Viết hàm tính giá trị trung bình của các phần tử nhỏ nhất trên mỗi cột.
float tbmincot(int a[][100],int n,int m)
{
float s=0;
for(int i=0;i             {
              int min=a[0][i];
               for(int j=1;j                   if(a[j][i]                      min=a[j][i];
              s=s+min;
}
return (float)s/m;
}







6.  Viết hàm tính tổng các giá trị nhỏ nhất thuộc từng đường chéo song song với đường chéo chính
chính.
    int tongminssdcchinh(int a[][100],int n,int m)
{
             int s=0;
             for(int i=1;i             {
int m1=32768,m2=32768;
                 for(int j=i;j                  {
                       if(a[j][j-i]                            m1=a[j][j-i];
                      if(a[j-i][j]                            m2=a[j-i][j];
        }
                  s=s+m1+m2;
             }
             return s;
}
7. Viết hàm tìm vị trí phần tử lớn nhất trong ma trận số nguyên
void vtphantumax(int a[][100],int n,int m)
{
    int d=0,c=0;
for(int i=0;i    for(int j=1;j        if(a[d][c]        {
            d=i;
            c=j;
        }
cout<<"dong thu "<
}
8. Viết hàm tìm vị trí phần tử chẳn cuối cùng trong mảng
void vtchancuoicung(int a[][100],int n,int m)
{
    int i,j;
for( i=n-1;i>=0;i--)
{
        for(j=m-1;j>=0;j--)
            if(a[i][j]%2==0)
                break;
        break;
}
cout<<"dong thu "<
}
9. Viết hàm tìm phần tử âm lẻ và lớn nhất trong ma trận
int ptamle(int a[][100],int n,int m)
{
  
for(int i=0;i    for(int j=0;j        if((a[i][j])<0 && (a[i][j])%2==-1)
            return a[i][j];
    return 0;
}
int ptamlemax(int a[][100],int n,int m)
{
    int max=ptamle(a,n,n);
    if(max!=0)
    {
        for(int i=0;i            for(int j=0;j            if(a[i][j]>max && a[i][j]<0 && a[i][j]%2==-1 )
                max=a[i][j];
  
    }
    return max;
}
10. Viết hàm tìm phần tử chẳn dương và nhỏ nhất trong ma trận
int ptchanduong(int a[][100],int n,int m)
{
  
for(int i=0;i    for(int j=0;j        if((a[i][j])>0 && (a[i][j])%2==0)
            return a[i][j];
    return 0;
}
int ptchanduongmin(int a[][100],int n,int m)
{
    int min=ptchanduong(a,n,m);
    if(min!=0)
    {
        for(int i=0;i            for(int j=0;j            if(a[i][j]0 && a[i][j]%2==0 )
                min=a[i][j];
  
    }
    return min;
}
11. Viết hàm tìm phần tử lớn nhất trên đường chéo chính của ma trận vuông

int maxdcchinh( int a[],int n)
    {
    int max=a[0][0];
    for(int i=1;i        if(a[i][i]>max)
        max=a[i][i];
    return max;
     }
12. Viết hàm hoán vị 2 dòng, hoán vị 2 cột trong ma trận

void hoanvi(int &a,int &b)
{
    int t=a;
    a=b;
    b=t;
}
void hoanvicot(int a[][100],int n,int m,int c1,int c2)
{
    if((c1>=0 && c1=0 && c2        {
             for(int i=0;i            hoanvi(a[i][c1],a[i][c2]);
        }
xuat(a,n,m);
}
void hoanvidong(int a[][100],int n,int m,int d1,int d2)
{
    if((d1>=0 &&d1=0 && d2        {
        for(int j=0;j            hoanvi(a[d1][j],a[d2][j]);
       }
     xuat(a,n,m);
}
13. Viết hàm xóa một dòng, xóa một cột trong ma trận
void xoacot(int a[][100],int n,int &m,int c)
{
        if(c>=0 && c        {
            for(int i=0;i                for(int j=c;j                    a[i][j]=a[i][j+1];
            m--;
    }
xuat(a,n,m);
}
void xoadong(int a[][100],int &n,int m,int d)
{
    if(d>=0 &&d    {
        for(int i=d;i            for(int j=0;j                a[i][j]=a[i+1][j];
        n--;
    }
}
14. Viết hàm chèn  một dòng, chèn một cột trong ma trận

void chencot(int a[][100],int n,int &m,int c)
{
    if(c>=0 && c    {
    for(int i=0;i        for(int j=m;j>c;j--)
            a[i][j]=a[i][j-1];
            m++;
        for(int i=0;i        {
            cout<<"nhap phan tu dong "<            cin>>a[i][c];
        }
    }

}
void chendong(int a[][100],int &n,int m,int d)
{
    if(d>=0 &&d    {
        for(int i=n;i>d;i--)
            for(int j=0;j                a[i][j]=a[i-1][j];
        n++;
        for(int j=0;j        {
            cout<<"nhap phan tu cot "<            cin>>a[d][j];
        }
    }
}
15. Viết hàm tìm phần tử chẳn dương nhỏ nhất trong ma trận(Câu 10)
int ChanDuongMin(int a[][Max],int d, int c)
{
    int min=-1, i, j;
    for(i=0;i        for(j=0;j            if(a[i][j]%2==0 && a[i][j]>0)
            {
                if(min==-1)
                    min=a[i][j];
                else
                    if(a[i][j]                        min=a[i][j];
            }
    return min;
}
16 .Viết hàm tìm vị trí xuất hiện đầu tiên của x trong ma trận
void timx(float a[][100],int d,int c,float x,int &xd,int &xc)
{
    xd=xc=-1;
    for(int i=0;i        for(int j=0;j            if(a[i][j]==x)
            {
                xd=i;
                xc=j;
                return;
            }
17 .Viết hàm xóa dòng có tổng lớn nhất của ma trận số thực(Trường hợp chỉ có một dòng có tổng lớn nhất)
void xoadongtonglonnhat(float a[][100],int &d,int c)
{
    float max,tong;
    int dong;
    tong=0;
    for(int j=0;j        tong+=a[0][j];
    max=tong;
    dong=0;
    for(int i=1;i    {    tong =0;
        for(int j=0;j            tong+=a[i][j];
        if(tong>max)
        {
            max=tong;
            dong=i;
        }
    
    }
        
    for(int i=dong;i    {
        for(int j=0;j        
            a[i][j]=a[i+1][j];
            d--;
        
        }
}

18 .Viết hàm sắp xếp ma trận tăng dần từ trái sang phải từ trên xuống dưới
void Interchangersort(int a[][Max],int d,int c)
{
    for(int i=0;i        for(int j=i+1;j            if(a[i/c][i%c]>a[j/c][j%c])
                hoanvi(a[i/c][i%c],a[j/c][j%c]);
}
design by admin

void SapXep(int a[][Max],int d,int c)
{
    int vtd,vtc,i,j;
    for(i=0;i            vtd=i/c;vtc=i%c;
        for(j=i+1;j            if(a[vtd][vtc]>a[j/c][j%c])
            {
                vtd=j/c;
                vtc=j%c;    
            }
        Swap(a[i/c][i%c],a[vtd][vtc]);
        }
        
}
design by Trần văn cử

*HÀM KHỞI TẠO MẢNG 2 CHIỀU

Mảng Tăng:
  void nhap(int a[][max],int d,int c)
        {
               srand((unsigned) time(NULL));
               int t=abs(rand()%100);
               for(int i=0;i                     for(int j=0;i                        {
                          a[i][j]=t+abs(rand()%100);
                           t= a[i][j];
                           }
             }

Mảng Giảm:
  void nhap(int a[][max],int d,int c)
        {
               srand((unsigned) time(NULL));
               int t=abs(rand()%100);
               for(int i=d-1;i>=0;i--)
                     for(int j=c-1;i>=0;j--)
                        {
                          a[i][j]=t+abs(rand()%100);
                           t= a[i][j];
                           }
             }


19.Viết hàm tính tích 2 ma trận
void Output_Matrix(int a[][100], int d, int c)
{
for(int i=0; i {
     for(int j=0; j            cout<     cout< }
}

// A(m,n) x B(n,k) = C(m,k)
// A(da, ca) x B(db,cb) = C(da,cb)
void Tich_Matrix(int a[][100], int b[][100], int ab[][100], int da, int ca, int db, int cb)
{
int i, j, k;
if(ca != db)
     cout<<"Hai ma tran khong thoa tinh chat NHAN MA TRAN!";
else
{
     cout<<"\n\nTich cua 2 Ma tran la: \n\n";

     for(i=0; i         for(j=0; j             ab[i][j]=0;
      
     for(i=0; i         for(j=0; j             for(k=0; k                 ab[i][j]+=a[i][k]*b[k][j];
     Output_Matrix(ab, da, cb);
}
}  
20.Viết hàm tính tổng 2 ma trận
void Output_Matrix(int a[][100], int d, int c)
{
for(int i=0; i {
     for(int j=0; j            cout<     cout< }
}

void Sum_Matrix(int a[][100], int b[][100], int ab[][100], int da, int ca, int db, int cb)
{
if(da != db || ca != cb)
     cout<<"Hai ma tran khong thoa tinh chat cua CONG MA TRAN!";
else
{
     cout<<"\n\nTong cua 2 Ma tran la: \n\n";
     for(int i=0; i            for(int j=0; j             ab[i][j]=a[i][j]+b[i][j];
     Output_Matrix(ab, da, ca);
}
}  
20.Tính tổng các phần tử trên biên ma trận
long tong_bien(int a[][100],int d,int c)
{
  long tong=0;
  for(int i=0;i  {
          tong += a[0][i];
          tong += a[d-1][i];
  }
  for(int i=1;i  {
          tong += a[i][0];
          tong += a[i][c-1];
  }
  return tong;
}
21.Tìm phần tử có giá trị lớn nhất trên biên ma trận
long max_bien(int a[][100],int d,int c)
{
  int max=a[0][0];
  for(int i=0;i  {
          if(max          max=a[0][i];
          if(max          max= a[d-1][i];
  }
  for(int i=1;i  {
          if(max          max=a[i][0];
          if(max          max  }
  return max;
}
21.Ma trận ZigZag ngang
#include
using namespace std;
using namespace std;
int a[100][100],d,c;
void XuLy(int a[][100],int d,int c)
{
     int dem=1;
     for(int i=0;i     {
             if(i%2==0)
             for(int j=0;j               a[i][j]=dem++;
             else
             for(int j=c-1;j>=0;j--)
               a[i][j]=dem++;
     }
}
void Xuat(int a[][100],int d,int c)
{
     for(int i=0;i     {
       for(int j=0;j       if(a[i][j]>=10)
           cout<           else
           cout<<" "<           cout<     }
}
void main()
{
    cout<<"Nhap dong: ";cin>>d;
    cout<<"Nhap cot: ";cin>>c;
    XuLy(a,d,c);
    cout<<"Ma tran zigzag ngang la: \n\n";
    Xuat(a,d,c);
}  

21.Ma trận xoắn ốc theo chiều kim đồng hồ
#include
using namespace std;
int a[100][100],d,c;
void TaoMaTran()
{
  int trai=0,tren=0,phai=c,duoi=d,dem=0,soluong=c*d;
  while(dem  {
   for(int i=trai;i    if(dem       a[tren][i]=dem++;
           tren++;
   for(int i=tren;i    if(dem       a[i][phai-1]=dem++;
           phai--;
   for(int i=phai-1;i>=trai;i--)
    if(dem       a[duoi-1][i]=dem++;
            duoi--;
   for(int i=duoi-1;i>=tren;i--)
    if(dem       a[i][trai]=dem++;
         trai++;
  }
}
void XuatMaTran()
{
  for(int i=0;i  {
  for(int j=0;j    if(a[i][j]>=10)
       cout<  else
       cout<<" "<  cout<  }
}
void  main()
{
cout<<"Nhap dong,cot: ";
cin>>d>>c;
TaoMaTran();
cout<<"Ma tran xoan oc la: \n";
XuatMaTran();
}  
Đăng nhập
© Vannamit.Info