SlideShare a Scribd company logo
1 of 32
LẬP TRÌNH NÂNG CAO
                                                  Vũ Minh Trí
                                     vmtri@fit.hcmuns.edu.vn




                                    MẢNG HAI CHIỀU




Lập trình nâng cao - Mảng 2 chiều
                                                                1
&
VC
     BB
          Nội dung


               1   Khái niệm


               2   Khai báo


               3   Truy xuất dữ liệu kiểu mảng



               4   Một số bài toán trên mảng 2 chiều




                                         Lập trình nâng cao - Mảng 2 chiều   2
&
VC
     BB
           Ma Trận




                0   1   … n-1              0   … n-1

           0                         0
 Am,n                           An
           …




                                      …
          m-1                        n-1




                                           Lập trình nâng cao - Mảng 2 chiều   3
&
VC
     BB
            Khai báo kiểu mảng 2 chiều

      Cú pháp
          typedef <kiểu cơ sở> <tên kiểu>[<N1>][<N2>];
        N1, N2: số lượng phần tử mỗi chiều
      Ví dụ
          typedef int MaTran[3][4];


                             0   1   2   3

                         0

           Kiểu MaTran   1

                         2

                                             Lập trình nâng cao - Mảng 2 chiều   4
&
VC
     BB
            Khai báo biến mảng 2 chiều

      Cú pháp
        Tường minh
          <kiểu cơ sở> <tên biến>[<N1>][<N2>];


           Không tường minh (thông qua kiểu)
          typedef <kiểu cơ sở> <tên kiểu>[<N1>][<N2>];

          <tên kiểu> <tên biến>;
          <tên kiểu> <tên biến 1>, <tên biến 2>;



                                        Lập trình nâng cao - Mảng 2 chiều   5
&
VC
     BB
            Khai báo biến mảng 2 chiều

      Ví dụ
        Tường minh
          int a[10][20], b[10][20];
          int c[5][10];
          int d[10][20];
           Không tường minh (thông qua kiểu)
          typedef int MaTran10x20[10][20];
          typedef int MaTran5x10[5][10];

          MaTran10x20 a, b;
          MaTran11x11 c;
          MaTran10x20 d;

                                        Lập trình nâng cao - Mảng 2 chiều   6
&
VC
     BB
            Truy xuất đến một phần tử

      Thông qua chỉ số
          <tên biến mảng>[<giá trị cs1>][<giá trị cs2>]

      Ví dụ                                              0     1     2      3

                                                    0
        Cho mảng 2 chiều như sau
                                                    1
          int a[3][4];
                                                    2
           Các truy xuất
             • Hợp lệ: a[0][0], a[0][1], …, a[2][2], a[2][3]
             • Không hợp lệ: a[-1][0], a[2][4], a[3][3]



                                              Lập trình nâng cao - Mảng 2 chiều   7
&
VC
     BB
            Gán dữ liệu kiểu mảng

      Không được sử dụng phép gán thông thường
       mà phải gán trực tiếp giữa các phần tử



      Ví dụ
          int a[5][10], b[5][10];

          b = a;       // Sai
          int i, j;
          for (i = 0; i < 5; i++)
                 for (j = 0; j < 10; j++)
                       b[i][j] = a[i][j];
                                            Lập trình nâng cao - Mảng 2 chiều   8
&
VC
     BB
            Truyền mảng cho hàm

      Truyền mảng cho hàm
         Tham số kiểu mảng trong khai báo hàm giống
          như khai báo biến mảng
          void NhapMaTran(int a[50][100]);

           Tham số kiểu mảng truyền cho hàm chính là địa
            chỉ của phần tử đầu tiên của mảng
             • Có thể bỏ số lượng phần tử chiều thứ 2 hoặc con trỏ.
             • Mảng có thể thay đổi nội dung sau khi thực hiện hàm.
          void NhapMaTran(int a[][100]);
          void NhapMaTran(int (*a)[100]);

                                          Lập trình nâng cao - Mảng 2 chiều   9
&
VC
     BB
            Truyền mảng cho hàm

      Truyền mảng cho hàm
         Số lượng phần tử thực sự truyền qua biến khác
          void XuatMaTran(int a[50][100], int m, int n);
          void XuatMaTran(int a[][100], int m, int n);
          void XuatMaTran(int (*a)[100], int m, int n);
      Lời gọi hàm
          void NhapMaTran(int a[][100], int &m, int &n);
          void XuatMaTran(int a[][100], int m, int n);
          void main()
          {
                int a[50][100], m, n;
                NhapMaTran(a, m, n);
                XuatMaTran(a, m, n);
          }                              Lập trình nâng cao - Mảng 2 chiều   10
&
VC
     BB
          Một số bài toán cơ bản

      Viết chương trình con thực hiện các yêu cầu sau
        Nhập mảng
        Xuất mảng
        Tìm kiếm một phần tử trong mảng
        Kiểm tra tính chất của mảng
        Tính tổng các phần tử trên dòng/cột/toàn ma
         trận/đường chéo chính/nửa trên/nửa dưới
        Tìm giá trị nhỏ nhất/lớn nhất của mảng
       …

                                   Lập trình nâng cao - Mảng 2 chiều   11
&
VC
     BB
            Một số quy ước

      Kiểu dữ liệu
          #define MAXD 50
          #define MAXC 100

      Các chương trình con
        Hàm void HoanVi(int x, int y): hoán vị giá trị
         của hai số nguyên.
        Hàm int LaSNT(int n): kiểm tra một số có phải
         là số nguyên tố. Trả về 1 nếu n là số nguyên
         tố, ngược lại trả về 0.

                                    Lập trình nâng cao - Mảng 2 chiều   12
&
VC
     BB
          Thủ tục HoanVi & Hàm LaSNT




                            Lập trình nâng cao - Mảng 2 chiều   13
&
VC
     BB
           Nhập Ma Trận

      Yêu cầu
           Cho phép nhập mảng a, m dòng, n cột
      Ý tưởng
           Cho trước một mảng 2 chiều có dòng tối đa là MAXD,
            số cột tối đa là MAXC.
           Nhập số lượng phần tử thực sự m, n của mỗi chiều.
           Nhập từng phần tử từ [0][0] đến [m-1][n-1].




                                         Lập trình nâng cao - Mảng 2 chiều   14
&
VC
     BB
              Hàm Nhập Ma Trận

          void NhapMaTran(int a[][MAXC], int &m, int &n)
          {
                printf(“Nhap so dong, so cot cua ma tran: ”);
                scanf(“%d%d”, &m, &n);

                int i, j;
                for (i=0; i<m; i++)
                      for (j=0; j<n; j++)
                      {
                            printf(“Nhap a[%d][%d]: ”, i, j);
                            scanf(“%d”, &a[i][j]);
                      }
          }



                                        Lập trình nâng cao - Mảng 2 chiều   15
&
VC
     BB
           Xuất Ma Trận

      Yêu cầu
           Cho phép nhập mảng a, m dòng, n cột
      Ý tưởng
           Xuất giá trị từng phần tử của mảng 2 chiều từ dòng
            có 0 đến dòng m-1, mỗi dòng xuất giá giá trị của cột 0
            đến cột n-1 trên dòng đó.




                                           Lập trình nâng cao - Mảng 2 chiều   16
&
VC
     BB
              Hàm Xuất Ma Trận

          void XuatMaTran(int a[][MAXC], int m, int n)
          {
                int i, j;
                for (i=0; i<m; i++)
                {
                      for (j=0; j<n; j++)
                            printf(“%d ”, a[i][j]);

                     printf(“n”);
                }
          }




                                        Lập trình nâng cao - Mảng 2 chiều   17
&
VC
     BB
           Tìm kiếm một phần tử trong Ma Trận

      Yêu cầu
           Tìm xem phần tử x có nằm trong ma trận a kích
            thước mxn hay không?
      Ý tưởng
           Duyệt từng phần của ma trận a. Nếu phần tử đang
            xét bằng x thì trả về có (1), ngược lại trả về không có
            (0).




                                            Lập trình nâng cao - Mảng 2 chiều   18
&
VC
     BB
            Hàm Tìm Kiếm

          int TimKiem(int a[][MAXC], int m, int n, int x)
          {
                int i, j;
                for (i=0; i<m; i++)
                      for (j=0; j<n; j++)
                            if (a[i][j] == x)
                                  return 1;
                return 0;
          }




                                        Lập trình nâng cao - Mảng 2 chiều   19
&
VC
     BB
           Kiểm tra tính chất của mảng

      Yêu cầu
           Cho trước ma trận a kích thước mxn. Ma trận a có
            phải là ma trậntoàn các số nguyên tố hay không?
      Ý tưởng
           Cách 1: Đếm số lượng số ngtố của ma trận. Nếu số
            lượng này bằng đúng mxn thì ma trận toàn ngtố.
           Cách 2: Đếm số lượng số không phải ngtố của ma
            trận. Nếu số lượng này bằng 0 thì ma trận toàn ngtố.
           Cách 3: Tìm xem có phần tử nào không phải số ngtố
            không. Nếu có thì ma trận không toàn số ngtố.


                                           Lập trình nâng cao - Mảng 2 chiều   20
&
VC
     BB
              Hàm Kiểm Tra (Cách 1)

          int KiemTra_C1(int a[][MAXC], int m, int n)
          {
                int i, j, dem = 0;

                for (i=0; i<m; i++)
                      for (j=0; j<n; j++)
                            if (LaSNT(a[i][j]==1)
                                  dem++;

                if (dem == m*n)
                      return 1;
                return 0;
          }



                                        Lập trình nâng cao - Mảng 2 chiều   21
&
VC
     BB
              Hàm Kiểm Tra (Cách 2)

          int KiemTra_C2(int a[][MAXC], int m, int n)
          {
                int i, j, dem = 0;

                for (i=0; i<m; i++)
                      for (j=0; j<n; j++)
                            if (LaSNT(a[i][j]==0)
                                  dem++;

                if (dem == 0)
                      return 1;
                return 0;
          }



                                        Lập trình nâng cao - Mảng 2 chiều   22
&
VC
     BB
              Hàm Kiểm Tra (Cách 3)

          int KiemTra_C3(int a[][MAXC], int m, int n)
          {
                int i, j, dem = 0;

                for (i=0; i<m; i++)
                      for (j=0; j<n; j++)
                            if (LaSNT(a[i][j]==0)
                                  return 0;

                return 1;
          }




                                        Lập trình nâng cao - Mảng 2 chiều   23
&
VC
     BB
           Tính tổng các phần tử

      Yêu cầu
           Cho trước ma trận a, kích thước mxn. Tính tổng các
            phần tử trên:
             •   Dòng d, cột c
             •   Đường chéo chính, đường chéo phụ (ma trận vuông)
             •   Nửa trên/dưới đường chéo chính (ma trận vuông)
             •   Nửa trên/dưới đường chéo phụ (ma trận vuông)
      Ý tưởng
           Duyệt ma trận và cộng dồn các phần tử có tọa độ (dòng,
            cột) thỏa yêu cầu.


                                                Lập trình nâng cao - Mảng 2 chiều   24
&
VC
     BB
              Hàm tính tổng trên dòng

          int TongDong(int a[][MAXC], int m, int n, int d)
          {
                int j, tong;

                tong = 0;

                for (j=0; j<n; j++)     // Duyệt các cột
                      tong = tong + a[d][j];

                return tong;
          }




                                        Lập trình nâng cao - Mảng 2 chiều   25
&
VC
     BB
              Hàm tính tổng trên cột

          int TongCot(int a[][MAXC], int m, int c)
          {
                int i, tong;

                tong = 0;

                for (i=0; i<m; i++)     // Duyệt các dòng
                      tong = tong + a[i][c];

                return tong;
          }




                                        Lập trình nâng cao - Mảng 2 chiều   26
&
VC
     BB
              Hàm tính tổng đường chéo chính

          int TongDCChinh(int a[][MAXC], int n)
          {
                int i, tong;

                tong = 0;

                for (i=0; i<n; i++)
                      tong = tong + a[i][i];

                return tong;
          }




                                        Lập trình nâng cao - Mảng 2 chiều   27
&
VC
     BB
              Hàm tính tổng trên đường chéo chính

          int TongTrenDCChinh(int a[][MAXC], int n)
          {
                int i, j, tong;

                tong = 0;

                for (i=0; i<n; i++)
                      for (j=0; j<n; j++)
                            if (i < j)
                                  tong = tong + a[i][j];

                return tong;
          }



                                        Lập trình nâng cao - Mảng 2 chiều   28
&
VC
     BB
              Hàm tính tổng dưới đường chéo chính

          int TongTrenDCChinh(int a[][MAXC], int n)
          {
                int i, j, tong;

                tong = 0;

                for (i=0; i<n; i++)
                      for (j=0; j<n; j++)
                            if (i > j)
                                  tong = tong + a[i][j];

                return tong;
          }



                                        Lập trình nâng cao - Mảng 2 chiều   29
&
VC
     BB
              Hàm tính tổng trên đường chéo phụ

          int TongDCPhu(int a[][MAXC], int n)
          {
                int i, tong;

                tong = 0;

                for (i=0; i<n; i++)
                      tong = tong + a[i][n-i-1];

                return tong;
          }




                                        Lập trình nâng cao - Mảng 2 chiều   30
&
VC
     BB
           Tìm giá trị lớn nhất của Ma Trận

      Yêu cầu
           Cho trước ma trận a, kích thước mxn. Tìm giá trị lớn
            nhất trong ma trận a (gọi là max)
      Ý tưởng
           Giả sử giá trị max hiện tại là giá trị phần tử đầu tiên a[0]
            [0]
           Lần lượt kiểm tra các phần tử còn lại để cập nhật max.




                                              Lập trình nâng cao - Mảng 2 chiều   31
&
VC
     BB
              Hàm tìm Max

          int TimMax(int a[][MAXC], int m, int n)
          {
                int i, j, max;

                max = a[0][0];

                for (i=0; i<m; i++)
                      for (j=0; j<n; j++)
                            if (a[i][j] > max)
                                  max = a[i][j];

                return max;
          }



                                        Lập trình nâng cao - Mảng 2 chiều   32

More Related Content

What's hot

Nmlt c13 con_tronangcao_in
Nmlt c13 con_tronangcao_inNmlt c13 con_tronangcao_in
Nmlt c13 con_tronangcao_inHuy Nguyễn
 
Giải bài toán markowitz tối ưu hóa danh mục đầu tư chứng khoán bằng vba for ...
Giải bài toán markowitz  tối ưu hóa danh mục đầu tư chứng khoán bằng vba for ...Giải bài toán markowitz  tối ưu hóa danh mục đầu tư chứng khoán bằng vba for ...
Giải bài toán markowitz tối ưu hóa danh mục đầu tư chứng khoán bằng vba for ...Nguyen Hau
 
Phần 10: Dữ liệu kiểu cấu trúc
Phần 10: Dữ liệu kiểu cấu trúcPhần 10: Dữ liệu kiểu cấu trúc
Phần 10: Dữ liệu kiểu cấu trúcHuy Rùa
 
Nmlt c07 mang1_chieu_in
Nmlt c07 mang1_chieu_inNmlt c07 mang1_chieu_in
Nmlt c07 mang1_chieu_inHuy Nguyễn
 
Phần 6: Hàm
Phần 6: HàmPhần 6: Hàm
Phần 6: HàmHuy Rùa
 
Images compression using huffman algorithm matlab
Images compression using huffman algorithm matlabImages compression using huffman algorithm matlab
Images compression using huffman algorithm matlabTan Hoang Luu
 
Nmlt c08 mang2_chieu_in
Nmlt c08 mang2_chieu_inNmlt c08 mang2_chieu_in
Nmlt c08 mang2_chieu_inHuy Nguyễn
 
Nmlt C07 Mang1 Chieu
Nmlt C07 Mang1 ChieuNmlt C07 Mang1 Chieu
Nmlt C07 Mang1 ChieuCuong
 
Phần 11: Tập tin
Phần 11: Tập tinPhần 11: Tập tin
Phần 11: Tập tinHuy Rùa
 
Nmlt C06 Ham
Nmlt C06 HamNmlt C06 Ham
Nmlt C06 HamCuong
 
Nmlt C03 Cac Kieu Du Lieu Co So
Nmlt C03 Cac Kieu Du Lieu Co SoNmlt C03 Cac Kieu Du Lieu Co So
Nmlt C03 Cac Kieu Du Lieu Co SoCuong
 
Nmlt c16 ky_thuatlaptrinhdequy
Nmlt c16 ky_thuatlaptrinhdequyNmlt c16 ky_thuatlaptrinhdequy
Nmlt c16 ky_thuatlaptrinhdequyMinh Ngoc Tran
 
4 matlab ly-thuyet_dohoa_
4 matlab ly-thuyet_dohoa_4 matlab ly-thuyet_dohoa_
4 matlab ly-thuyet_dohoa_Phi Phi
 
Lttt matlab chuong 5
Lttt matlab chuong 5Lttt matlab chuong 5
Lttt matlab chuong 5Hoa Cỏ May
 
Session 4
Session 4Session 4
Session 4pnanhvn
 

What's hot (19)

Nmlt c10 cau_truc
Nmlt c10 cau_trucNmlt c10 cau_truc
Nmlt c10 cau_truc
 
Nmlt c13 con_tronangcao_in
Nmlt c13 con_tronangcao_inNmlt c13 con_tronangcao_in
Nmlt c13 con_tronangcao_in
 
Giải bài toán markowitz tối ưu hóa danh mục đầu tư chứng khoán bằng vba for ...
Giải bài toán markowitz  tối ưu hóa danh mục đầu tư chứng khoán bằng vba for ...Giải bài toán markowitz  tối ưu hóa danh mục đầu tư chứng khoán bằng vba for ...
Giải bài toán markowitz tối ưu hóa danh mục đầu tư chứng khoán bằng vba for ...
 
Phần 10: Dữ liệu kiểu cấu trúc
Phần 10: Dữ liệu kiểu cấu trúcPhần 10: Dữ liệu kiểu cấu trúc
Phần 10: Dữ liệu kiểu cấu trúc
 
Nmlt c07 mang1_chieu_in
Nmlt c07 mang1_chieu_inNmlt c07 mang1_chieu_in
Nmlt c07 mang1_chieu_in
 
Phần 6: Hàm
Phần 6: HàmPhần 6: Hàm
Phần 6: Hàm
 
Images compression using huffman algorithm matlab
Images compression using huffman algorithm matlabImages compression using huffman algorithm matlab
Images compression using huffman algorithm matlab
 
Nmlt c08 mang2_chieu_in
Nmlt c08 mang2_chieu_inNmlt c08 mang2_chieu_in
Nmlt c08 mang2_chieu_in
 
Nmlt C07 Mang1 Chieu
Nmlt C07 Mang1 ChieuNmlt C07 Mang1 Chieu
Nmlt C07 Mang1 Chieu
 
Phần 11: Tập tin
Phần 11: Tập tinPhần 11: Tập tin
Phần 11: Tập tin
 
Nmlt C06 Ham
Nmlt C06 HamNmlt C06 Ham
Nmlt C06 Ham
 
Nmlt c08 mang2_chieu
Nmlt c08 mang2_chieuNmlt c08 mang2_chieu
Nmlt c08 mang2_chieu
 
Nmlt c07 mang1_chieu
Nmlt c07 mang1_chieuNmlt c07 mang1_chieu
Nmlt c07 mang1_chieu
 
Nmlt C03 Cac Kieu Du Lieu Co So
Nmlt C03 Cac Kieu Du Lieu Co SoNmlt C03 Cac Kieu Du Lieu Co So
Nmlt C03 Cac Kieu Du Lieu Co So
 
Dieukhientuyentin hmoi
Dieukhientuyentin hmoiDieukhientuyentin hmoi
Dieukhientuyentin hmoi
 
Nmlt c16 ky_thuatlaptrinhdequy
Nmlt c16 ky_thuatlaptrinhdequyNmlt c16 ky_thuatlaptrinhdequy
Nmlt c16 ky_thuatlaptrinhdequy
 
4 matlab ly-thuyet_dohoa_
4 matlab ly-thuyet_dohoa_4 matlab ly-thuyet_dohoa_
4 matlab ly-thuyet_dohoa_
 
Lttt matlab chuong 5
Lttt matlab chuong 5Lttt matlab chuong 5
Lttt matlab chuong 5
 
Session 4
Session 4Session 4
Session 4
 

Viewers also liked

ฟรอยด์
ฟรอยด์ฟรอยด์
ฟรอยด์nurul027
 
Urbanization and economy complexity. Kazakhstan's case
Urbanization and economy complexity. Kazakhstan's caseUrbanization and economy complexity. Kazakhstan's case
Urbanization and economy complexity. Kazakhstan's caseAnuar Buranbayev
 
Presentatie Nico de Boer
Presentatie Nico de BoerPresentatie Nico de Boer
Presentatie Nico de Boerpieterdestefano
 
Smarthones 2012 - 5 main trends
Smarthones 2012 - 5 main trendsSmarthones 2012 - 5 main trends
Smarthones 2012 - 5 main trendsSergey Ezyk
 
A Day in the Life As : Radiation Therapy Technologist in IndiA
A Day in the Life As : Radiation Therapy Technologist in IndiAA Day in the Life As : Radiation Therapy Technologist in IndiA
A Day in the Life As : Radiation Therapy Technologist in IndiATeekendra Singh Faujdar
 
Powerpoint97 2003
Powerpoint97 2003Powerpoint97 2003
Powerpoint97 2003heatherhess
 
5 основных тенденций индустрии смартфонов 2013 / 5 main smartphones trends in...
5 основных тенденций индустрии смартфонов 2013 / 5 main smartphones trends in...5 основных тенденций индустрии смартфонов 2013 / 5 main smartphones trends in...
5 основных тенденций индустрии смартфонов 2013 / 5 main smartphones trends in...Sergey Ezyk
 

Viewers also liked (9)

ฟรอยด์
ฟรอยด์ฟรอยด์
ฟรอยด์
 
Urbanization and economy complexity. Kazakhstan's case
Urbanization and economy complexity. Kazakhstan's caseUrbanization and economy complexity. Kazakhstan's case
Urbanization and economy complexity. Kazakhstan's case
 
Lesson06
Lesson06Lesson06
Lesson06
 
Presentatie Nico de Boer
Presentatie Nico de BoerPresentatie Nico de Boer
Presentatie Nico de Boer
 
Smarthones 2012 - 5 main trends
Smarthones 2012 - 5 main trendsSmarthones 2012 - 5 main trends
Smarthones 2012 - 5 main trends
 
A Day in the Life As : Radiation Therapy Technologist in IndiA
A Day in the Life As : Radiation Therapy Technologist in IndiAA Day in the Life As : Radiation Therapy Technologist in IndiA
A Day in the Life As : Radiation Therapy Technologist in IndiA
 
Lesson04
Lesson04Lesson04
Lesson04
 
Powerpoint97 2003
Powerpoint97 2003Powerpoint97 2003
Powerpoint97 2003
 
5 основных тенденций индустрии смартфонов 2013 / 5 main smartphones trends in...
5 основных тенденций индустрии смартфонов 2013 / 5 main smartphones trends in...5 основных тенденций индустрии смартфонов 2013 / 5 main smartphones trends in...
5 основных тенденций индустрии смартфонов 2013 / 5 main smartphones trends in...
 

Similar to c3 mang2 chieu

NMLT_C07_Mang1Chieu.pptx
NMLT_C07_Mang1Chieu.pptxNMLT_C07_Mang1Chieu.pptx
NMLT_C07_Mang1Chieu.pptxTngNguyn371609
 
Nmlt c03 cac_kieudulieucoso_in
Nmlt c03 cac_kieudulieucoso_inNmlt c03 cac_kieudulieucoso_in
Nmlt c03 cac_kieudulieucoso_inHuy Nguyễn
 
Nmlt c03 cac_kieudulieucoso
Nmlt c03 cac_kieudulieucosoNmlt c03 cac_kieudulieucoso
Nmlt c03 cac_kieudulieucosoMinh Ngoc Tran
 
Bai thi Nghiem ky thuat dien tu
Bai thi Nghiem ky thuat dien tuBai thi Nghiem ky thuat dien tu
Bai thi Nghiem ky thuat dien tuBrand Xanh
 
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modulesLocal sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modulesTrần Văn Nam
 
Nmlt c15 ham_nangcao_phan2_in
Nmlt c15 ham_nangcao_phan2_inNmlt c15 ham_nangcao_phan2_in
Nmlt c15 ham_nangcao_phan2_inHuy Nguyễn
 
Tai lieu thi nghiem mon ly thuyet dieu khien tu dong 1
Tai lieu thi nghiem mon ly thuyet dieu khien tu dong 1Tai lieu thi nghiem mon ly thuyet dieu khien tu dong 1
Tai lieu thi nghiem mon ly thuyet dieu khien tu dong 1TUNG0908
 
Ngôn ngữ lập trình và ứng dụng B - Bộ môn đo lường điện tử
Ngôn ngữ lập trình và ứng dụng B - Bộ môn đo lường điện tửNgôn ngữ lập trình và ứng dụng B - Bộ môn đo lường điện tử
Ngôn ngữ lập trình và ứng dụng B - Bộ môn đo lường điện tửChia sẻ tài liệu học tập
 
Nmlt c15 ham_nangcao_phan1_in
Nmlt c15 ham_nangcao_phan1_inNmlt c15 ham_nangcao_phan1_in
Nmlt c15 ham_nangcao_phan1_inHuy Nguyễn
 
Pplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09a
Pplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09aPplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09a
Pplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09aPix Nhox
 
Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433
Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433
Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433Muoivy Wm
 

Similar to c3 mang2 chieu (20)

NMLT_C07_Mang1Chieu.pptx
NMLT_C07_Mang1Chieu.pptxNMLT_C07_Mang1Chieu.pptx
NMLT_C07_Mang1Chieu.pptx
 
Nmlt c03 cac_kieudulieucoso_in
Nmlt c03 cac_kieudulieucoso_inNmlt c03 cac_kieudulieucoso_in
Nmlt c03 cac_kieudulieucoso_in
 
Nmlt c06 ham_in
Nmlt c06 ham_inNmlt c06 ham_in
Nmlt c06 ham_in
 
Chuong1 c
Chuong1 c Chuong1 c
Chuong1 c
 
Nmlt c06 ham
Nmlt c06 hamNmlt c06 ham
Nmlt c06 ham
 
Nmlt c03 cac_kieudulieucoso
Nmlt c03 cac_kieudulieucosoNmlt c03 cac_kieudulieucoso
Nmlt c03 cac_kieudulieucoso
 
344444
344444344444
344444
 
Chapter 6
Chapter 6Chapter 6
Chapter 6
 
Bai thi Nghiem ky thuat dien tu
Bai thi Nghiem ky thuat dien tuBai thi Nghiem ky thuat dien tu
Bai thi Nghiem ky thuat dien tu
 
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modulesLocal sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
 
Lesson07
Lesson07Lesson07
Lesson07
 
Nmlt c15 ham_nangcao_phan2_in
Nmlt c15 ham_nangcao_phan2_inNmlt c15 ham_nangcao_phan2_in
Nmlt c15 ham_nangcao_phan2_in
 
Tai lieu thi nghiem mon ly thuyet dieu khien tu dong 1
Tai lieu thi nghiem mon ly thuyet dieu khien tu dong 1Tai lieu thi nghiem mon ly thuyet dieu khien tu dong 1
Tai lieu thi nghiem mon ly thuyet dieu khien tu dong 1
 
Tut6 solution
Tut6 solutionTut6 solution
Tut6 solution
 
Tut5 solution
Tut5 solutionTut5 solution
Tut5 solution
 
Ngôn ngữ lập trình và ứng dụng B - Bộ môn đo lường điện tử
Ngôn ngữ lập trình và ứng dụng B - Bộ môn đo lường điện tửNgôn ngữ lập trình và ứng dụng B - Bộ môn đo lường điện tử
Ngôn ngữ lập trình và ứng dụng B - Bộ môn đo lường điện tử
 
Nmlt c15 ham_nangcao_phan1_in
Nmlt c15 ham_nangcao_phan1_inNmlt c15 ham_nangcao_phan1_in
Nmlt c15 ham_nangcao_phan1_in
 
Lập trình hướng đối tượng - p2
Lập trình hướng đối tượng - p2Lập trình hướng đối tượng - p2
Lập trình hướng đối tượng - p2
 
Pplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09a
Pplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09aPplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09a
Pplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09a
 
Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433
Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433
Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433
 

More from Cau Chu Nho

More from Cau Chu Nho (6)

Lesson08
Lesson08Lesson08
Lesson08
 
Lesson05
Lesson05Lesson05
Lesson05
 
Lesson02
Lesson02Lesson02
Lesson02
 
Lesson01
Lesson01Lesson01
Lesson01
 
Lesson00
Lesson00Lesson00
Lesson00
 
Chuong 05 de quy
Chuong 05 de quyChuong 05 de quy
Chuong 05 de quy
 

c3 mang2 chieu

  • 1. LẬP TRÌNH NÂNG CAO Vũ Minh Trí vmtri@fit.hcmuns.edu.vn MẢNG HAI CHIỀU Lập trình nâng cao - Mảng 2 chiều 1
  • 2. & VC BB Nội dung 1 Khái niệm 2 Khai báo 3 Truy xuất dữ liệu kiểu mảng 4 Một số bài toán trên mảng 2 chiều Lập trình nâng cao - Mảng 2 chiều 2
  • 3. & VC BB Ma Trận 0 1 … n-1 0 … n-1 0 0 Am,n An … … m-1 n-1 Lập trình nâng cao - Mảng 2 chiều 3
  • 4. & VC BB Khai báo kiểu mảng 2 chiều  Cú pháp typedef <kiểu cơ sở> <tên kiểu>[<N1>][<N2>];  N1, N2: số lượng phần tử mỗi chiều  Ví dụ typedef int MaTran[3][4]; 0 1 2 3 0 Kiểu MaTran 1 2 Lập trình nâng cao - Mảng 2 chiều 4
  • 5. & VC BB Khai báo biến mảng 2 chiều  Cú pháp  Tường minh <kiểu cơ sở> <tên biến>[<N1>][<N2>];  Không tường minh (thông qua kiểu) typedef <kiểu cơ sở> <tên kiểu>[<N1>][<N2>]; <tên kiểu> <tên biến>; <tên kiểu> <tên biến 1>, <tên biến 2>; Lập trình nâng cao - Mảng 2 chiều 5
  • 6. & VC BB Khai báo biến mảng 2 chiều  Ví dụ  Tường minh int a[10][20], b[10][20]; int c[5][10]; int d[10][20];  Không tường minh (thông qua kiểu) typedef int MaTran10x20[10][20]; typedef int MaTran5x10[5][10]; MaTran10x20 a, b; MaTran11x11 c; MaTran10x20 d; Lập trình nâng cao - Mảng 2 chiều 6
  • 7. & VC BB Truy xuất đến một phần tử  Thông qua chỉ số <tên biến mảng>[<giá trị cs1>][<giá trị cs2>]  Ví dụ 0 1 2 3 0  Cho mảng 2 chiều như sau 1 int a[3][4]; 2  Các truy xuất • Hợp lệ: a[0][0], a[0][1], …, a[2][2], a[2][3] • Không hợp lệ: a[-1][0], a[2][4], a[3][3] Lập trình nâng cao - Mảng 2 chiều 7
  • 8. & VC BB Gán dữ liệu kiểu mảng  Không được sử dụng phép gán thông thường mà phải gán trực tiếp giữa các phần tử  Ví dụ int a[5][10], b[5][10]; b = a; // Sai int i, j; for (i = 0; i < 5; i++) for (j = 0; j < 10; j++) b[i][j] = a[i][j]; Lập trình nâng cao - Mảng 2 chiều 8
  • 9. & VC BB Truyền mảng cho hàm  Truyền mảng cho hàm  Tham số kiểu mảng trong khai báo hàm giống như khai báo biến mảng void NhapMaTran(int a[50][100]);  Tham số kiểu mảng truyền cho hàm chính là địa chỉ của phần tử đầu tiên của mảng • Có thể bỏ số lượng phần tử chiều thứ 2 hoặc con trỏ. • Mảng có thể thay đổi nội dung sau khi thực hiện hàm. void NhapMaTran(int a[][100]); void NhapMaTran(int (*a)[100]); Lập trình nâng cao - Mảng 2 chiều 9
  • 10. & VC BB Truyền mảng cho hàm  Truyền mảng cho hàm  Số lượng phần tử thực sự truyền qua biến khác void XuatMaTran(int a[50][100], int m, int n); void XuatMaTran(int a[][100], int m, int n); void XuatMaTran(int (*a)[100], int m, int n);  Lời gọi hàm void NhapMaTran(int a[][100], int &m, int &n); void XuatMaTran(int a[][100], int m, int n); void main() { int a[50][100], m, n; NhapMaTran(a, m, n); XuatMaTran(a, m, n); } Lập trình nâng cao - Mảng 2 chiều 10
  • 11. & VC BB Một số bài toán cơ bản  Viết chương trình con thực hiện các yêu cầu sau  Nhập mảng  Xuất mảng  Tìm kiếm một phần tử trong mảng  Kiểm tra tính chất của mảng  Tính tổng các phần tử trên dòng/cột/toàn ma trận/đường chéo chính/nửa trên/nửa dưới  Tìm giá trị nhỏ nhất/lớn nhất của mảng … Lập trình nâng cao - Mảng 2 chiều 11
  • 12. & VC BB Một số quy ước  Kiểu dữ liệu #define MAXD 50 #define MAXC 100  Các chương trình con  Hàm void HoanVi(int x, int y): hoán vị giá trị của hai số nguyên.  Hàm int LaSNT(int n): kiểm tra một số có phải là số nguyên tố. Trả về 1 nếu n là số nguyên tố, ngược lại trả về 0. Lập trình nâng cao - Mảng 2 chiều 12
  • 13. & VC BB Thủ tục HoanVi & Hàm LaSNT Lập trình nâng cao - Mảng 2 chiều 13
  • 14. & VC BB Nhập Ma Trận  Yêu cầu  Cho phép nhập mảng a, m dòng, n cột  Ý tưởng  Cho trước một mảng 2 chiều có dòng tối đa là MAXD, số cột tối đa là MAXC.  Nhập số lượng phần tử thực sự m, n của mỗi chiều.  Nhập từng phần tử từ [0][0] đến [m-1][n-1]. Lập trình nâng cao - Mảng 2 chiều 14
  • 15. & VC BB Hàm Nhập Ma Trận void NhapMaTran(int a[][MAXC], int &m, int &n) { printf(“Nhap so dong, so cot cua ma tran: ”); scanf(“%d%d”, &m, &n); int i, j; for (i=0; i<m; i++) for (j=0; j<n; j++) { printf(“Nhap a[%d][%d]: ”, i, j); scanf(“%d”, &a[i][j]); } } Lập trình nâng cao - Mảng 2 chiều 15
  • 16. & VC BB Xuất Ma Trận  Yêu cầu  Cho phép nhập mảng a, m dòng, n cột  Ý tưởng  Xuất giá trị từng phần tử của mảng 2 chiều từ dòng có 0 đến dòng m-1, mỗi dòng xuất giá giá trị của cột 0 đến cột n-1 trên dòng đó. Lập trình nâng cao - Mảng 2 chiều 16
  • 17. & VC BB Hàm Xuất Ma Trận void XuatMaTran(int a[][MAXC], int m, int n) { int i, j; for (i=0; i<m; i++) { for (j=0; j<n; j++) printf(“%d ”, a[i][j]); printf(“n”); } } Lập trình nâng cao - Mảng 2 chiều 17
  • 18. & VC BB Tìm kiếm một phần tử trong Ma Trận  Yêu cầu  Tìm xem phần tử x có nằm trong ma trận a kích thước mxn hay không?  Ý tưởng  Duyệt từng phần của ma trận a. Nếu phần tử đang xét bằng x thì trả về có (1), ngược lại trả về không có (0). Lập trình nâng cao - Mảng 2 chiều 18
  • 19. & VC BB Hàm Tìm Kiếm int TimKiem(int a[][MAXC], int m, int n, int x) { int i, j; for (i=0; i<m; i++) for (j=0; j<n; j++) if (a[i][j] == x) return 1; return 0; } Lập trình nâng cao - Mảng 2 chiều 19
  • 20. & VC BB Kiểm tra tính chất của mảng  Yêu cầu  Cho trước ma trận a kích thước mxn. Ma trận a có phải là ma trậntoàn các số nguyên tố hay không?  Ý tưởng  Cách 1: Đếm số lượng số ngtố của ma trận. Nếu số lượng này bằng đúng mxn thì ma trận toàn ngtố.  Cách 2: Đếm số lượng số không phải ngtố của ma trận. Nếu số lượng này bằng 0 thì ma trận toàn ngtố.  Cách 3: Tìm xem có phần tử nào không phải số ngtố không. Nếu có thì ma trận không toàn số ngtố. Lập trình nâng cao - Mảng 2 chiều 20
  • 21. & VC BB Hàm Kiểm Tra (Cách 1) int KiemTra_C1(int a[][MAXC], int m, int n) { int i, j, dem = 0; for (i=0; i<m; i++) for (j=0; j<n; j++) if (LaSNT(a[i][j]==1) dem++; if (dem == m*n) return 1; return 0; } Lập trình nâng cao - Mảng 2 chiều 21
  • 22. & VC BB Hàm Kiểm Tra (Cách 2) int KiemTra_C2(int a[][MAXC], int m, int n) { int i, j, dem = 0; for (i=0; i<m; i++) for (j=0; j<n; j++) if (LaSNT(a[i][j]==0) dem++; if (dem == 0) return 1; return 0; } Lập trình nâng cao - Mảng 2 chiều 22
  • 23. & VC BB Hàm Kiểm Tra (Cách 3) int KiemTra_C3(int a[][MAXC], int m, int n) { int i, j, dem = 0; for (i=0; i<m; i++) for (j=0; j<n; j++) if (LaSNT(a[i][j]==0) return 0; return 1; } Lập trình nâng cao - Mảng 2 chiều 23
  • 24. & VC BB Tính tổng các phần tử  Yêu cầu  Cho trước ma trận a, kích thước mxn. Tính tổng các phần tử trên: • Dòng d, cột c • Đường chéo chính, đường chéo phụ (ma trận vuông) • Nửa trên/dưới đường chéo chính (ma trận vuông) • Nửa trên/dưới đường chéo phụ (ma trận vuông)  Ý tưởng  Duyệt ma trận và cộng dồn các phần tử có tọa độ (dòng, cột) thỏa yêu cầu. Lập trình nâng cao - Mảng 2 chiều 24
  • 25. & VC BB Hàm tính tổng trên dòng int TongDong(int a[][MAXC], int m, int n, int d) { int j, tong; tong = 0; for (j=0; j<n; j++) // Duyệt các cột tong = tong + a[d][j]; return tong; } Lập trình nâng cao - Mảng 2 chiều 25
  • 26. & VC BB Hàm tính tổng trên cột int TongCot(int a[][MAXC], int m, int c) { int i, tong; tong = 0; for (i=0; i<m; i++) // Duyệt các dòng tong = tong + a[i][c]; return tong; } Lập trình nâng cao - Mảng 2 chiều 26
  • 27. & VC BB Hàm tính tổng đường chéo chính int TongDCChinh(int a[][MAXC], int n) { int i, tong; tong = 0; for (i=0; i<n; i++) tong = tong + a[i][i]; return tong; } Lập trình nâng cao - Mảng 2 chiều 27
  • 28. & VC BB Hàm tính tổng trên đường chéo chính int TongTrenDCChinh(int a[][MAXC], int n) { int i, j, tong; tong = 0; for (i=0; i<n; i++) for (j=0; j<n; j++) if (i < j) tong = tong + a[i][j]; return tong; } Lập trình nâng cao - Mảng 2 chiều 28
  • 29. & VC BB Hàm tính tổng dưới đường chéo chính int TongTrenDCChinh(int a[][MAXC], int n) { int i, j, tong; tong = 0; for (i=0; i<n; i++) for (j=0; j<n; j++) if (i > j) tong = tong + a[i][j]; return tong; } Lập trình nâng cao - Mảng 2 chiều 29
  • 30. & VC BB Hàm tính tổng trên đường chéo phụ int TongDCPhu(int a[][MAXC], int n) { int i, tong; tong = 0; for (i=0; i<n; i++) tong = tong + a[i][n-i-1]; return tong; } Lập trình nâng cao - Mảng 2 chiều 30
  • 31. & VC BB Tìm giá trị lớn nhất của Ma Trận  Yêu cầu  Cho trước ma trận a, kích thước mxn. Tìm giá trị lớn nhất trong ma trận a (gọi là max)  Ý tưởng  Giả sử giá trị max hiện tại là giá trị phần tử đầu tiên a[0] [0]  Lần lượt kiểm tra các phần tử còn lại để cập nhật max. Lập trình nâng cao - Mảng 2 chiều 31
  • 32. & VC BB Hàm tìm Max int TimMax(int a[][MAXC], int m, int n) { int i, j, max; max = a[0][0]; for (i=0; i<m; i++) for (j=0; j<n; j++) if (a[i][j] > max) max = a[i][j]; return max; } Lập trình nâng cao - Mảng 2 chiều 32