Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Mảng 2 chiều

15.327 visualizaciones

Publicado el

tìm hiểu sâu về mảng 2 chiều, một thành phần quan trong nhất trong C và C++

Publicado en: Educación
  • Inicia sesión para ver los comentarios

Mảng 2 chiều

  1. 1. 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;i<n;i++) for(int j=0;j<m;j++) { cout<<"nhap vao phan tu thu "<<i<<j<<": "; cin>>a[i][j]; } ­Xuất mảng for(int i=0;i<n;i++) { for(int j=0;j<m;j++) cout<<a[i][j]<<" "; cout<<endl; } *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;i<n;i++) cout<<a[i][i]; ­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<n;i++) for(int i=0;i<n;i++)      for(int j=0;j<i;j++) OR for(int j=i+1;j<n;j++) cout<<a[j][i]<<" "; cout<<a[i][j]<<" ";
  2. 2. ­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<n;i++)       for(int j=0;j<i;j++) cout<<a[i][j]<<" "; ­Xuất các phần tử nằm trên đường chéo phụ for(int i=0;i<n;i++) cout<<a[i][n­1­i)<<” “; ­Xuất các phần tử nằm phía trên đường chéo phụ for(int i=0;i<n;i++) for(int i=0;i<n;i++)     for(int j=0;j<n­1­i;j++) OR          for(int j=n­i;j<n;j++) cout<<a[i][j]<<" ";                                         cout<<a[n­1­j][n­1­i]<<" "; ­Xuất các phần tử nằm phía dưới đường chéo phụ for(int i=0;i<n;i++)    for(int j=n­i;j<n;j++) cout<<a[i][j]<<" "; 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<n;++i) { int S=0; for(int j=0;j<m;++j) S+=a[i][j]; cout<<"dong "<<i<<" la: "<<S<<endl;
  3. 3. } } 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<m;i++)   { int s=0; for(int j=0;j<n;j++)  s=s+a[j][i]; cout<<"cot "<<i<<" la: "<<s<<endl;  } } 3. viết hàm tính tổng các phần tử thuộ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<n;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) {
  4. 4.  int s=0; for(int i=0;i<n;i++)  {        int max=a[i][0];        for(int j=1;j<m;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<m;i++)  {   int min=a[0][i];   for(int j=1;j<n;j++)   if(a[j][i]<min)   min=a[j][i];   s=s+min; } return (float)s/m; }
  5. 5. 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<n;i++) { int m1=32768,m2=32768; for(int j=i;j<n;j++) { if(a[j][j­i]<m1) m1=a[j][j­i]; if(a[j­i][j]<m2) 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<n;i++) for(int j=1;j<m;j++) if(a[d][c]<a[i][j]) { d=i; c=j; } cout<<"dong thu "<<d<<" cot thu "<<c;
  6. 6. } 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 "<<i<<" ,cot thu "<<j; } 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<n;i++) for(int j=0;j<m;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<n;i++) for(int j=0;j<m;j++) if(a[i][j]>max && a[i][j]<0 && a[i][j]%2==­1 )
  7. 7. 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<n;i++) for(int j=0;j<m;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<n;i++) for(int j=0;j<m;j++) if(a[i][j]<min && 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];
  8. 8. for(int i=1;i<n;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<m)&&(c2>=0 && c2<m)) {      for(int i=0;i<n;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<n) &&(d2>=0 && d2<n))     { for(int j=0;j<m;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)
  9. 9. { if(c>=0 && c<m) { for(int i=0;i<n;i++) for(int j=c;j<m­1;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<n) { for(int i=d;i<n­1;i++) for(int j=0;j<m;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<m) { for(int i=0;i<n;i++) for(int j=m;j>c;j­­) a[i][j]=a[i][j­1]; m++; for(int i=0;i<n;i++) { cout<<"nhap phan tu dong "<<i<<" ";
  10. 10. cin>>a[i][c]; } } } void chendong(int a[][100],int &n,int m,int d) { if(d>=0 &&d<n) { for(int i=n;i>d;i­­) for(int j=0;j<m;j++) a[i][j]=a[i­1][j]; n++; for(int j=0;j<m;j++) { cout<<"nhap phan tu cot "<<j<<" "; 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<d;i++) for(j=0;j<c;j++) if(a[i][j]%2==0 && a[i][j]>0) { if(min==­1) min=a[i][j]; else if(a[i][j]<min) min=a[i][j];
  11. 11. } 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<d;i++) for(int j=0;j<c;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<c;j++) tong+=a[0][j]; max=tong; dong=0; for(int i=1;i<d;i++) { tong =0; for(int j=0;j<c;j++) tong+=a[i][j]; if(tong>max) { max=tong;
  12. 12. dong=i; } } for(int i=dong;i<d;i++) { for(int j=0;j<c;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<c*d­1;i++) for(int j=i+1;j<c*d;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<c*d­1;i++){ vtd=i/c;vtc=i%c; for(j=i+1;j<c*d;j++) if(a[vtd][vtc]>a[j/c][j%c]) {
  13. 13. 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<d;i++)                       for(int j=0;i<c;j++)                          {                            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];
  14. 14. }               } 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<d; i++) { for(int j=0; j<c; j++)             cout<<a[i][j]<<"t"; cout<<endl<<endl; } } // 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<<"nnTich cua 2 Ma tran la: nn"; for(i=0; i<da; i++) for(j=0; j<cb; j++) ab[i][j]=0; for(i=0; i<da; i++)
  15. 15. for(j=0; j<cb; j++) for(k=0; k<ca; 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<d; i++) { for(int j=0; j<c; j++)             cout<<a[i][j]<<"t"; cout<<endl<<endl; } } 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<<"nnTong cua 2 Ma tran la: nn"; for(int i=0; i<da; i++)             for(int j=0; j<ca; 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)
  16. 16. { long tong=0; for(int i=0;i<c;i++) { tong += a[0][i]; tong += a[d­1][i]; } for(int i=1;i<d­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<c;i++) { if(max<a[0][i]) max=a[0][i]; if(max<a[d­1][i])      max= a[d­1][i]; } for(int i=1;i<d­1;i++) { if(max<a[i][0]) max=a[i][0]; if(max<a[i][c­1]) max<a[i][c­1]; } return max;
  17. 17. } 21.Ma trận ZigZag ngang #include <iostream> 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<d;i++)      {              if(i%2==0)              for(int j=0;j<c;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<d;i++)      {        for(int j=0;j<c;j++)        if(a[i][j]>=10)            cout<<a[i][j]<<" ";            else            cout<<" "<<a[i][j]<<" ";            cout<<endl<<endl;      } } void main() {
  18. 18.     cout<<"Nhap dong: ";cin>>d;     cout<<"Nhap cot: ";cin>>c;     XuLy(a,d,c);     cout<<"Ma tran zigzag ngang la: nn";     Xuat(a,d,c); } 21.Ma trận xoắn ốc theo chiều kim đồng hồ #include <iostream> 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<soluong) { for(int i=trai;i<phai;i++) if(dem<soluong) a[tren][i]=dem++; tren++; for(int i=tren;i<duoi;i++) if(dem<soluong) a[i][phai­1]=dem++; phai­­; for(int i=phai­1;i>=trai;i­­) if(dem<soluong) a[duoi­1][i]=dem++; duoi­­; for(int i=duoi­1;i>=tren;i­­) if(dem<soluong) a[i][trai]=dem++; trai++; }
  19. 19. } void XuatMaTran() { for(int i=0;i<d;i++) { for(int j=0;j<c;j++) if(a[i][j]>=10) cout<<a[i][j]<<" "; else cout<<" "<<a[i][j]<<" "; cout<<endl<<endl; } } void  main() { cout<<"Nhap dong,cot: "; cin>>d>>c; TaoMaTran(); cout<<"Ma tran xoan oc la: n"; XuatMaTran(); }

×