64
Khoa CNTT KTLT ThS. Nguyễn Tấn Trần Minh Chương 06 - 1 Chƣơng 6 MA TRẬN

1. Chương 06 - Ma Trận

Embed Size (px)

Citation preview

Page 1: 1. Chương 06 - Ma Trận

Khoa CNTT KTLT

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 1

Chƣơng 6MA TRẬN

Page 2: 1. Chương 06 - Ma Trận

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 2

Khoa CNTT KTLT

1. HÌNH ẢNH MA TRẬN

Hình vẽ

Ma trận là một bảng gồm nhiều dòng và nhiều cột.

Page 3: 1. Chương 06 - Ma Trận

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 3

Khoa CNTT KTLT

2. KHÁI NIỆM

Ma trận làcái quái gì?

Khái niệm: Ma trận là một tập hợp cácbiến có cùng kiểu dữ liệu và cùng tên.

Page 4: 1. Chương 06 - Ma Trận

Khoa CNTT KTLT

3. KHAI BÁO MA TRẬN

Cú phápKDL <TenBien>[SoDongToiDa][SoCotToiDa];

Ví dụ 1: int a[20][20];

Trong ví dụ trên ta nói a là ma trận cótối đa 20 dòng và tối đa 20 cột. Mỗiphần tử trong ma trận có kiểu là kiểu sốnguyên.

Ví dụ 2: float b[10][30];

Trong ví dụ trên ta nói b là ma trận cótối đa 10 dòng và tối đa 30 cột. Mỗiphần tử trong ma trận có kiểu là kiểu sốthực.

ThS. Nguyễn Tấn Trần Minh

Page 5: 1. Chương 06 - Ma Trận

KhangChương 06 - 4

Page 6: 1. Chương 06 - Ma Trận

Khoa CNTT KTLT

3. KHAI BÁO MA TRẬN

Cú phápKDL <TenBien>[SoDongToiDa][SoCotToiDa];

Ví dụ 3:

1. struct phanso

2. {

3. int tu;

4. int mau;

5. };

6. typedef struct phanso PHANSO;

7. PHANSO c[10][15];

Trong ví dụ trên ta nói c là ma trận có tối đa 10 dòng và tối đa 15 cột. Mỗi phần tử trong ma trận có kiểu là kiểuPHANSO.

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 5

Page 7: 1. Chương 06 - Ma Trận

Khoa CNTT KTLT

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 6

4. CHỈ SỐ

Qui ước: Các dòng và cột trong matrận của C được đánh chỉ số bắt buộctừ 0.

Như vậy trong ma trận có m dòng và ncột thì các dòng trong ma trận đánh sốtừ 0 cho đến m-1, các cột trong matrận đánh số từ 0 cho đến n-1.

Ví dụ 1: int a[15][20];

Trong ví dụ trên ta nói a là ma trận có tối đa 15 dòng và tối đa 20 cột. Các dòng trong ma trận được đánh chỉ sốtừ 0 cho đến 14, các cột được đánh

Page 8: 1. Chương 06 - Ma Trận

Khoa CNTT KTLT

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 7

chỉ số từ 0 cho đến 19.

Page 9: 1. Chương 06 - Ma Trận

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 8

Khoa CNTT KTLT

4. CHỈ SỐ

n

0

1

m …

m-2

m-1

0 1 2 … n-2 n-1

Page 10: 1. Chương 06 - Ma Trận

4. CHỈ SỐ

j

0

i 1

m—2

m-1

0 1 2 3 4 … n-2 n-1

Page 11: 1. Chương 06 - Ma Trận

5. KỸ THUẬT NHẬPMA

TRẬN

Vấn đề 1: Hãy định nghĩa hàm nhập ma trận các số nguyên.

Định nghĩa hàm

11. void Nhap(int a[][100], int &m,int &n)

12. {13. printf(“Nhap m: ”);14. scanf(“%d”,&m);15. printf(“Nhap n: ”);16. scanf(“%d”,&n);17. for(int i=0;i<m;i++)18. for(int j=0;j<n;j++)19. {20. printf(“Nhap a[%d][%d]: ”,i,j);21. scanf(“%d”,&a[i][j]);

Page 12: 1. Chương 06 - Ma Trận

22. }23. }

Page 13: 1. Chương 06 - Ma Trận

Khoa CNTT KTLT

5. KỸ THUẬT NHẬPMA

TRẬN

Vấn đề 2: Hãy định nghĩa hàm nhập ma trận các số thực.

Định nghĩa hàm

11. void Nhap(float a[][100], int &m,int &n)

12. {13. printf(“Nhap m: ”);14. scanf(“%d”,&m);15. printf(“Nhap n: ”);16. scanf(“%d”,&n);17. for(int i=0;i<m;i++)18. for(int j=0;j<n;j++)19. {20. printf(“Nhap a[%d][%d]: ”,i,j);21. scanf(“%f”,&a[i][j]);22. }23. }

Page 14: 1. Chương 06 - Ma Trận

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 10

Page 15: 1. Chương 06 - Ma Trận

Khoa CNTT KTLT

5. KỸ THUẬT NHẬPMA

TRẬN

Vấn đề 3: Hãy định nghĩa hàm nhập ma trận các số nguyên dài.

Định nghĩa hàm

11. void Nhap(long a[][100], int &m,int &n)

12. {13. printf(“Nhap m: ”);14. scanf(“%d”,&m);15. printf(“Nhap n: ”);16. scanf(“%d”,&n);17. for(int i=0;i<m;i++)18. for(int j=0;j<n;j++)19. {20. printf(“Nhap a[%d][%d]: ”,i,j);21. scanf(“%ld”,&a[i][j]);22. }23. }

Page 16: 1. Chương 06 - Ma Trận

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 11

Page 17: 1. Chương 06 - Ma Trận

Khoa CNTT KTLT

5. KỸ THUẬT NHẬPMA

TRẬN

Vấn đề 4: Hãy định nghĩa hàm nhập ma trận các số thực dài.

Định nghĩa hàm

11. void Nhap(double a[][100], int &m,int &n)

12. {13. printf(“Nhap m: ”);14. scanf(“%d”,&m);15. printf(“Nhap n: ”);16. scanf(“%d”,&n);17. for(int i=0;i<m;i++)18. for(int j=0;j<n;j++)19. {20. printf(“Nhap a[%d][%d]: ”,i,j);21. scanf(“%lf”,&a[i][j]);22. }23. }

Page 18: 1. Chương 06 - Ma Trận

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 12

Page 19: 1. Chương 06 - Ma Trận

Khoa CNTT KTLT

5. KỸ THUẬT NHẬPMA

TRẬN

Vấn đề 5: Hãy định nghĩa hàm nhập matrận các phân số.

Định nghĩa hàm

11. struct phanso12.{13. int tu;14. int mau;15.};16.typedef struct phanso PHANSO;17.void Nhap(PHANSO &x)18.{19. printf(“Nhap tu:”);20. scanf(“%d”,&x.tu);21. printf(“Nhap mau:”);22. scanf(“%d”,&x.mau);23.}

Page 20: 1. Chương 06 - Ma Trận

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 13

Page 21: 1. Chương 06 - Ma Trận

Khoa CNTT KTLT

5. KỸ THUẬT NHẬPMA

TRẬN

Định nghĩa hàm

11. void Nhap(PHANSO a[][100], int &m,int &n)

12.{13. printf(“Nhap m:”);14. scanf(“%d”,&m);15. printf(“Nhap n:”);16. scanf(“%d”,&n);17. for(int i=0;i<m;i++)18. for(int j=0;j<n;j++)19. {20. printf(“Nhap a[%d]][%d]:”,i,j);21. Nhap(a[i][j]);22. }

Page 22: 1. Chương 06 - Ma Trận

23.}

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 14

Page 23: 1. Chương 06 - Ma Trận

Khoa CNTT KTLT

6. KỸ THUẬT XUẤTMA

TRẬN

Vấn đề 1: Hãy định nghĩa hàm xuất ma trận các số nguyên.

Định nghĩa hàm

1. void Xuat(int a[][100], int m,int n)

2. {

3. for(int i=0;i<m;i++)

4. {

5. for(int j=0;j<n;j++)

6. printf(“%4d”,a[i][j]);

7. printf(“\n”);

8. }

Page 24: 1. Chương 06 - Ma Trận

9. }ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 15

Page 25: 1. Chương 06 - Ma Trận

Khoa CNTT KTLT

6. KỸ THUẬT XUẤTMA

TRẬN

Vấn đề 2: Hãy định nghĩa hàm xuất ma trận các số thực.

Định nghĩa hàm

1. void Xuat(float a[][100], int m,int n)

2. {

3. for(int i=0;i<m;i++)

4. {

5. for(int j=0;j<n;j++)

6. printf(“%8.3f”,a[i][j]);

7. printf(“\n”);

8. }

Page 26: 1. Chương 06 - Ma Trận

9. }ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 16

Page 27: 1. Chương 06 - Ma Trận

Khoa CNTT KTLT

6. KỸ THUẬT XUẤTMA

TRẬN

Vấn đề 3: Hãy định nghĩa hàm xuất ma trận các số nguyên dài.

Định nghĩa hàm

1. void Xuat(long a[][100], int m,int n)

2. {

3. for(int i=0;i<m;i++)

4. {

5. for(int j=0;j<n;j++)

6. printf(“%ld”,a[i][j]);

7. printf(“\n”);

8. }

Page 28: 1. Chương 06 - Ma Trận

9. }ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 17

Page 29: 1. Chương 06 - Ma Trận

Khoa CNTT KTLT

6. KỸ THUẬT XUẤTMA

TRẬN

Vấn đề 4: Hãy định nghĩa hàm xuất ma trận các số thực dài.

Định nghĩa hàm

1. void Xuat(double a[][100], int m,int n)

2. {

3. for(int i=0;i<m;i++)

4. {

5. for(int j=0;j<n;j++)

6. printf(“%lf”,a[i][j]);

7. printf(“\n”);

8. }

Page 30: 1. Chương 06 - Ma Trận

9. }ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 18

Page 31: 1. Chương 06 - Ma Trận

Khoa CNTT KTLT

6. KỸ THUẬT XUẤTMA

TRẬN

Vấn đề 5: Hãy địnhma trận các phân số.

nghĩa hàm xuất

1.

Định nghĩa hàm

struct phanso

2. {

3. int tu;

4. int mau;

5. };

6. typedef struct phanso PHANSO;

7. void Xuat(PHANSO x)

8. {

9. printf(“%d/%d”, x.tu,x.mau);

10.}

Page 32: 1. Chương 06 - Ma Trận

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 19

Page 33: 1. Chương 06 - Ma Trận

Khoa CNTT KTLT

6. KỸ THUẬT XUẤTMA

TRẬN

Định nghĩa hàm

1. void Xuat(PHANSO a[][100], int m,int n)

2. {

3. for(int i=0;i<m;i++)

4. {

5. for(int j=0;j<n;j++)

6. xuat(a[i][j]);

7. printf(“\n”);

8. }

9. }

Page 34: 1. Chương 06 - Ma Trận

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 20

Page 35: 1. Chương 06 - Ma Trận

Khoa CNTT KTLT

7. KỸ THUẬT ĐẾM

TRÊN MA TRẬN

Vấn đề 1: Hãy định nghĩa hàm đếm số lượng giá trị chẵn trong ma trận cácsố nguyên.

Định nghĩa hàm

1. int DemChan(int a[][100], int m,int n)

2. {

3. int dem=0;

4. for(int i=0;i<m;i++)

5. for(int j=0;j<n;j++)

6. if(a[i][j]%2==0)

7. dem++;

8. return dem;

9. }

Page 36: 1. Chương 06 - Ma Trận

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 21

Page 37: 1. Chương 06 - Ma Trận

Khoa CNTT KTLT

7. KỸ THUẬT ĐẾM

TRÊN MA TRẬN

Vấn đề 2: Hãy định nghĩa hàm đếm số lượng số nguyên tố trong ma trận cácsố nguyên.

Định nghĩa hàm

1. int ktnt(int k)

2. {

3. int dem=0;

4. for(int i=1;i<=k;i++)

5. if (k%i==0)

6. dem++;

7. if(dem==2)

8. return 1;

9. return 0;

10.}

Page 38: 1. Chương 06 - Ma Trận

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 22

Page 39: 1. Chương 06 - Ma Trận

Khoa CNTT KTLT

7. KỸ THUẬT ĐẾM

TRÊN MA TRẬN

Định nghĩa hàm

1. int DemNguyenTo(int int

a[][100], m,int n)

2. {

3. int dem=0;

4. for(int i=0;i<m;i++)

5. for(int j=0;j<n;j++)

6. if(ktnt(a[i][j])==1)

7. dem++;

8. return dem;

9. }

Page 40: 1. Chương 06 - Ma Trận

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 23

Page 41: 1. Chương 06 - Ma Trận

Khoa CNTT KTLT

8. KỸ THUẬT TÍNH TOÁN

TRÊN MA TRẬN

Vấn đề 1: Hãy định nghĩa hàm tính tổng các giá trị lẻ trong ma trận các số nguyên.

Định nghĩa hàm

1. int TongLe(int a[][100], int m,int n)

2. {

3. int s = 0;

4. for(int i=0;i<m;i++)

5. for(int j=0;j<n;j++)

6. if(a[i][j]%2!=0)

7. s=s+a[i][j];

8. return s;

9. }

Page 42: 1. Chương 06 - Ma Trận

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 24

Page 43: 1. Chương 06 - Ma Trận

Khoa CNTT KTLT

8. KỸ THUẬT TÍNH TOÁN

TRÊN MA TRẬN

Vấn đề 2: Hãy định nghĩa hàm tính tổng các giá trị dương trong ma trận các số thực.

Định nghĩa hàm

1. float TongDuong(float a[][100], int m,int n)

2. {

3. float s = 0;

4. for(int i=0;i<m;i++)

5. for(int j=0;j<n;j++)

6. if(a[i][j]>0)

7. s=s+a[i][j];

8. return s;

9. }

Page 44: 1. Chương 06 - Ma Trận

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 25

Page 45: 1. Chương 06 - Ma Trận

6. if(ktnt(a[i][j])==1)

7. s=s+a[i][j]

8. return s;

9. }

Khoa CNTT KTLT

8. KỸ THUẬT TÍNH TOÁN

TRÊN MA TRẬN

Vấn đề 3: Hãy định nghĩa hàm tính tổng các giá trị nguyên tố trong ma trận các số nguyên.

Định nghĩa hàm

1. int TongNguyenTo(int a[][100],

int m,int n)

2. {

3. int s = 0;

4. for(int i=0;i<m;i++)

5. for(int j=0;j<n;j++)

;

Page 46: 1. Chương 06 - Ma Trận

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 26

Page 47: 1. Chương 06 - Ma Trận

7.

8. return lc;

9. }

Khoa CNTT KTLT

9. KỸ THUẬT ĐẶT

LÍNH CANH

Vấn đề 1: Hãy định nghĩa hàm tìm giátrị lớn nhất trong ma trận các số thực.

Định nghĩa hàm

1. float LonNhat(float a[][100],

int m,int n)

2. {

3. float lc = a[0][0];

4. for(int i=0;i<m;i++)

5. for(int j=0;j<n;j++)

6. if(a[i][j]>lc)

lc=a[i][j];

ThS. Nguyễn Tấn Trần Minh

Page 48: 1. Chương 06 - Ma Trận

KhangChương 06 - 27

Page 49: 1. Chương 06 - Ma Trận

Khoa CNTT

10. KỸ THUẬT ĐẶT CỜ HIỆU

KTLT

Vấn đề 1: Hãy định nghĩa hàm kiểmtra trong ma trận các số thực có tồn tại giá trị dương hay ko?

Định nghĩa hàm

1. int TonTaiDuong(float a[][100],

int m,int n)

2. {

3. int flag = 0;

4. for(int i=0;i<m;i++)

5. for(int j=0;j<n;j++)

6. if(a[i][j]>0)

7. flag = 1;

8. return flag;

9. }

ThS. Nguyễn Tấn Trần Minh

Page 50: 1. Chương 06 - Ma Trận

KhangChương 06 - 28

Page 51: 1. Chương 06 - Ma Trận

Khoa CNTT KTLT

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 29

11. KỸ THUẬT SẮP XẾP

Vấn đề 1: Hãy định nghĩa hàm sắp xếp

ma trận các số thực tăng dần?

Định nghĩa hàm11. void SapTang(float a[][100],

int m,int n)12.{13. for(int i=0;i<=m*n-2;i++)14. for(int j=i+1;j<=m*n-1;j++)15. if(a[i/n][i%n]>a[j/n][j%n])16. {17. float temp=a[i/n][i%n];18. a[i/n][i%n]=a[j/n][j%n];19. a[j/n][j%n]=temp;20. }21.}

Page 52: 1. Chương 06 - Ma Trận

89 88 13 -7 34 12

89 88 13 -7 34 12

89 88 13 -7 34 12

89 88 13 -7 34 12

89 88 13 -7 34 12

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 30

Khoa CNTT KTLT

11. KỸ THUẬT SẮP XẾP

6

0 1 2 3 4 5

0

1

5 2

3

4

Page 53: 1. Chương 06 - Ma Trận

0 1 2 3 4 5

6 7 8 9 10 11

12 13 14 15 16 17

18 19 20 21 22 23

24 25 26 27 28 29

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 31

Khoa CNTT KTLT

11. KỸ THUẬT SẮP XẾP

6

0 1 2 3 4 5

0

1

5 2

3

4

Page 54: 1. Chương 06 - Ma Trận

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 32

Khoa CNTT KTLT

12. CHƢƠNG TRÌNH

ĐẦU TIÊN

Bài toán: Viết chương trìnhthực hiện các yêu cầu sau:

Nhập ma trận các số nguyên.

Xuất ma trận

Tính tổng các số chẵn cótrong ma trận.

Page 55: 1. Chương 06 - Ma Trận

Khoa CNTT KTLT

12. CHƢƠNG TRÌNHĐẦU TIÊN

11. #include <stdio.h>12. #include <conio.h>13. void Nhap(int [][100],

int &,int &);14. void Xuat(int [][100],

int,int);15. int TongChan(int [][100],

int,int);16. void main()17. {18. int b[50][50];19. int k,l;20. Nhap(b,k,l);21. Xuat(b,k,l);22. int kq=TongChan(b,k,l);23. printf(“\n…: %d”, kq);24. }

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 33

Page 56: 1. Chương 06 - Ma Trận

Khoa CNTT KTLT

12. CHƢƠNG TRÌNHĐẦU TIÊN

1. void Nhap(int a[][100], int &m,int &n)

2. {3. printf(“Nhap m: ”);4. scanf(“%d”,&m);5. printf(“Nhap n: ”);6. scanf(“%d”,&n);7. for(int i=0;i<m;i++)8. for(int j=0;j<n;j++)9. {10. printf(“Nhap a[%d][%d]: ”,i,j);11. scanf(“%d”,&a[i][j]);12. }13. }

Page 57: 1. Chương 06 - Ma Trận

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 34

Page 58: 1. Chương 06 - Ma Trận

Khoa CNTT KTLT

12. CHƢƠNG TRÌNHĐẦU TIÊN

1. void Xuat(int a[][100], int m,int n)

2. {

3. for(int i=0;i<m;i++)

4. {

5. for(int j=0;j<n;j++)

6. printf(“%4d”,a[i][j]);

7. printf(“\n”);

8. }

9. }

Page 59: 1. Chương 06 - Ma Trận

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 35

Page 60: 1. Chương 06 - Ma Trận

7.

8. return s;

9. }

Khoa CNTT KTLT

12. CHƢƠNG TRÌNHĐẦU TIÊN

1. int TongChan(int a[][100], int m,int n)

2. {

3. int s = 0;

4. for(int i=0;i<m;i++)

5. for(int j=0;j<n;j++)

6. if(a[i][j]%2==0)

s=s+a[i][j];

Page 61: 1. Chương 06 - Ma Trận

ThS. Nguyễn TấnTrần Minh Khang

Chương 06 - 36