Khoa CNTT
KTLT
Chương 6
MA TRẬN
Trần Quốc Vinh
1
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.
Trần Quốc Vinh
2
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ác
biến có cùng kiểu dữ liệu và cùng tên.
Trần Quốc Vinh
3
Khoa CNTT
KTLT
3. KHAI BÁO MA TRẬN
Cú pháp
KDL <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ỗi
phầ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ỗi
phần tử trong ma trận có kiểu là kiểu số
thực.
Trần Quốc Vinh
4
Khoa CNTT
KTLT
3. KHAI BÁO MA TRẬN
Cú pháp
KDL <TenBien>[SoDongToiDa][SoCotToiDa];
1.
2.
3.
4.
5.
6.
7.
Ví dụ 3:
struct phanso
{
int tu;
int mau;
};
typedef struct phanso PHANSO;
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ểu
PHANSO.
Trần Quốc Vinh
5
Khoa CNTT
KTLT
4. CHỈ SỐ
Qui ước: Các dòng và cột trong ma
trận của C được đánh chỉ số bắt buộc
từ 0.
Như vậy trong ma trận có m dòng và n
cột thì các dòng trong ma trận đánh số
từ 0 cho đến m-1, các cột trong ma
trậ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
chỉ số từ 0 cho đến 19.
Trần Quốc Vinh
6
Khoa CNTT
KTLT
4. CHỈ SỐ
n
0
1
2
… n-2 n-1
0
1
m
…
m-2
m-1
Trần Quốc Vinh
7
Khoa CNTT
KTLT
4. CHỈ SỐ
j
0
1
2
3
4
… n-2 n-1
0
i
1
…
m—2
m-1
Trần Quốc Vinh
8
Khoa CNTT
KTLT
5. KỸ THUẬT NHẬP
MA 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
12. {
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23. }
Nhap(int a[][100],
int &m,int &n)
printf(“Nhap m: ”);
scanf(“%d”,&m);
printf(“Nhap n: ”);
scanf(“%d”,&n);
for(int i=0;i
for(int j=0;j
{
printf(“Nhap a[%d][%d]: ”,i,j);
scanf(“%d”,&a[i][j]);
}
Trần Quốc Vinh
9
Khoa CNTT
KTLT
5. KỸ THUẬT NHẬP
MA 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
12. {
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23. }
Nhap(float a[][100],
int &m,int &n)
printf(“Nhap m: ”);
scanf(“%d”,&m);
printf(“Nhap n: ”);
scanf(“%d”,&n);
for(int i=0;i
for(int j=0;j
{
printf(“Nhap a[%d][%d]: ”,i,j);
scanf(“%f”,&a[i][j]);
}
Trần Quốc Vinh
10
Khoa CNTT
KTLT
5. KỸ THUẬT NHẬP
MA 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
12. {
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23. }
Nhap(long a[][100],
int &m,int &n)
printf(“Nhap m: ”);
scanf(“%d”,&m);
printf(“Nhap n: ”);
scanf(“%d”,&n);
for(int i=0;i
for(int j=0;j
{
printf(“Nhap a[%d][%d]: ”,i,j);
scanf(“%ld”,&a[i][j]);
}
Trần Quốc Vinh
11
Khoa CNTT
KTLT
5. KỸ THUẬT NHẬP
MA 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
12. {
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23. }
Nhap(double a[][100],
int &m,int &n)
printf(“Nhap m: ”);
scanf(“%d”,&m);
printf(“Nhap n: ”);
scanf(“%d”,&n);
for(int i=0;i
for(int j=0;j
{
printf(“Nhap a[%d][%d]: ”,i,j);
scanf(“%lf”,&a[i][j]);
}
Trần Quốc Vinh
12
Khoa CNTT
KTLT
5. KỸ THUẬT NHẬP
MA TRẬN
Vấn đề 5: Hãy định nghĩa hàm nhập ma
trận các phân số.
Định nghĩa hàm
11. struct
phanso
12.{
int tu;
int mau;
13.
14.
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.}
Trần Quốc Vinh
13
Khoa CNTT
KTLT
5. KỸ THUẬT NHẬP
MA TRẬN
Định nghĩa hàm
11. void
Nhap(PHANSO a[][100],
int &m,int &n)
12.{
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
printf(“Nhap m:”);
scanf(“%d”,&m);
printf(“Nhap n:”);
scanf(“%d”,&n);
for(int i=0;i
for(int j=0;j
{
printf(“Nhap a[%d]][%d]:”,i,j);
Nhap(a[i][j]);
}
23.}
Trần Quốc Vinh
14
Khoa CNTT
KTLT
6. KỸ THUẬT XUẤT
MA 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
4.
{
for(int j=0;j
5.
printf(“%4d”,a[i][j]);
6.
printf(“\n”);
7.
}
8.
9.
}
Trần Quốc Vinh
15
Khoa CNTT
KTLT
6. KỸ THUẬT XUẤT
MA 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
4.
{
for(int j=0;j
5.
printf(“%8.3f”,a[i][j]);
6.
printf(“\n”);
7.
}
8.
9.
}
Trần Quốc Vinh
16
Khoa CNTT
KTLT
6. KỸ THUẬT XUẤT
MA 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
4.
{
for(int j=0;j
5.
printf(“%ld”,a[i][j]);
6.
printf(“\n”);
7.
}
8.
9.
}
Trần Quốc Vinh
17
Khoa CNTT
KTLT
6. KỸ THUẬT XUẤT
MA 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
4.
{
for(int j=0;j
5.
printf(“%lf”,a[i][j]);
6.
printf(“\n”);
7.
}
8.
9.
}
Trần Quốc Vinh
18
Khoa CNTT
KTLT
6. KỸ THUẬT XUẤT
MA TRẬN
Vấn đề 5: Hãy định nghĩa hàm xuất
ma trận các phân số.
Định nghĩa hàm
1.
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.}
Trần Quốc Vinh
19
Khoa CNTT
KTLT
6. KỸ THUẬT XUẤT
MA TRẬN
Định nghĩa hàm
1.
void Xuat(PHANSO a[][100],
int m,int n)
2.
{
3.
for(int i=0;i
4.
{
for(int j=0;j
5.
xuat(a[i][j]);
6.
printf(“\n”);
7.
}
8.
9.
}
Trần Quốc Vinh
20
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ác
số nguyên.
Định nghĩa hàm
1.
int DemChan(int a[][100],
int m,int n)
{
int dem=0;
for(int i=0;i
for(int j=0;j
if(a[i][j]%2==0)
dem++;
return dem;
}
2.
3.
4.
5.
6.
7.
8.
9.
Trần Quốc Vinh
21
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ác
số nguyên.
Định nghĩa hàm
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.}
1.
Trần Quốc Vinh
22
Khoa CNTT
KTLT
7. KỸ THUẬT ĐẾM
TRÊN MA TRẬN
Định nghĩa hàm
1.
int DemNguyenTo(int a[][100],
int m,int n)
2.
{
3.
int dem=0;
4.
for(int i=0;i
5.
for(int j=0;j
6.
if(ktnt(a[i][j])==1)
dem++;
7.
return dem;
8.
9.
}
Trần Quốc Vinh
23
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)
{
int s = 0;
for(int i=0;i
for(int j=0;j
if(a[i][j]%2!=0)
s=s+a[i][j];
return s;
}
2.
3.
4.
5.
6.
7.
8.
9.
Trần Quốc Vinh
24
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)
{
float s = 0;
for(int i=0;i
for(int j=0;j
if(a[i][j]>0)
s=s+a[i][j];
return s;
}
2.
3.
4.
5.
6.
7.
8.
9.
Trần Quốc Vinh
25