Ma Tran Vuong

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 24

Square matrix

1
MA TRẬN VUÔNG
(Concepts and basic operations on the square matrix)

by Khoa Anh Tran - KTLT 2018


Square matrix

2 NỘI DUNG

Các tính chất


Các thao tác cơ bản

by Khoa Anh Tran - KTLT 2018


Square matrix

3 Khái niệm
 Ma trận vuông là một ma trận có bằng với

=> Ví dụ một ma trận vuông a gồm ,


a 0 1 2 3 4

0 a[0][0] <1 pt>


Một phần tử
1 của ma trận
2
vuông có thể
chứa một đối
3 a[3][0] tượng dữ liệu
bất kỳ.
4 a[4][2]

by Khoa Anh Tran - KTLT 2018


Square matrix

4 Khái niệm
 Cú pháp: Khai báo tĩnh
<KDL> <tên MT>[<Kích thước tối đa>][<Kích thước tối đa>];
int <kích thước thực sự>;

Khai báo ma trận số nguyên gồm tối đa Khai báo ma trận số thực gồm MAX dòng,
MAX dòng, MAX cột MAX cột

#define MAX 100 #define MAX 100


int a[MAX][MAX]; double a[MAX][MAX];

int n; //kích thước thực sự của ma trận int n; //kích thước thực sự của ma trận

by Khoa Anh Tran - KTLT 2018


Square matrix

5 Khái niệm
 Cách thức truy xuất tới một phần tử: <tên MT vuông>[<dòng>][<cột>]=?

a 0 1 2 3 4 5 6

0 a[0][0]

1 a[i][j]=?

3 a[3][0] a[3][6]

4 a[4][2]

6
by Khoa Anh Tran - KTLT 2018
Square matrix

6 Khái niệm
 Quy ước khi dùng ma trận vuông (hay dùng)
Tên ma trận vuông hay đặt là:
Kích thước tối đa:
Kích thước thực sự:

 Ký hiệu: (a, n*n) – ma trận vuông a, có kích thước n*n

by Khoa Anh Tran - KTLT 2018


Square matrix

7 NỘI DUNG

Khái niệm

Các thao tác cơ bản

by Khoa Anh Tran - KTLT 2018


Square matrix

8 Các tính chất


 Tính chất 01: Các phần tử trên đường chéo chính có =

a 0 1 2 3 4

0 a[0][0]

1 a[1][1] Ma trận vuông


2 kích thước n*n có
a[2][2] n phần tử  đường
3 chéo chính
a[3][3]

4 a[4][4]

by Khoa Anh Tran - KTLT 2018 Y/c: Tính tổng các phần tử nằm trên đường chéo chính
Square matrix

9 Các tính chất


 Tính chất 02: Tam giác trên/dưới của đường chéo chính (ĐCC)

a 0 1 2 3 4

0 a[0][0] x x x x
Tam giác trên của
1 o a[1][1] x x x ĐCC là các phần có
2 o o a[2][2] x x < – được
đánh dấu x
3 o o o a[3][3] x
4 o o o o a[4][4]

Tam giác dưới của ĐCC là


các phần có > –
được đánh dấu o
by Khoa Anh Tran - KTLT 2018
Square matrix

10 Các tính chất


 Tính chất 03: Các phần tử trên đường chéo phụ có + =

a 0 1 2 3 4

0 a[0][4]

1 a[1][3]
Ma trận vuông kích
2 thước n*n có n phần
a[2][2]
tử  đường chéo
3 phụ
a[3][1]

4 a[4][0]

by Khoa Anh Tran - KTLT 2018 Y/c: Đếm số phần tử chẵn trên đường chéo phụ
Square matrix

11 Các tính chất


 Tính chất 04: Tam giác trên/dưới của đường chéo phụ (ĐCP)
a 0 1 2 3 4

0 x x x x a[0][4]
Tam giác trên của ĐCP
1 x x x a[1][3] o
là các phần có +
< , được đánh 2 x x a[2][2] o o
dấu x
3 x a[3][1] o o o
4 a[4][0] o o o o

Tam giác dưới của ĐCP là


các phần có + >
được đánh dấu o
by Khoa Anh Tran - KTLT 2018
Square matrix

12 NỘI DUNG

Khái niệm
Các tính chất

by Khoa Anh Tran - KTLT 2018


Square matrix

13 Các thao tác cơ bản


Kỹ thuật nhập/xuất

Nhập ma trận – nhập bằng tay


void NhapMT(int a[][MAX], int &m, int &n) void NhapMT(int a[][MAX], int &n)
{ {
cout << "\nNhap dong m= "; cin >> m; cout << "\nNhap kich thuoc n= "; cin >>
cout << "\nNhap cot n= "; cin >> n; n;
for (int i = 0; i < m; i++) for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++) for (int j = 0; j < n; j++)
{ {
cout << "a["<<i<<"]["<<j<<"]"; cout << "a["<<i<<"]["<<j<<"]= ";
cin >> a[i][j]; cin >> a[i][j];
} }
} }
//Mảng 2 chiều //Ma trận vuông
by Khoa Anh Tran - KTLT 2018
Square matrix

14 Các thao tác cơ bản


Kỹ thuật nhập/xuất

Xuất ma trận – xuất các phần tử ra màn hình


void XuatMT(const int a[][MAX], int m, int void XuatMT(const int a[][MAX], int n)
n) {
{ for (int i = 0; i < n; i++)
for (int i = 0; i < m; i++) {
{ for (int j = 0; j < n; j++)
for (int j = 0; j < n; j++) {
{ cout << a[i][j] << "\t";
cout << a[i][j] << "\t"; }
} cout << "\n";
cout << "\n"; }
} }
} //Ma trận vuông
//Mảng 2 chiều by Khoa Anh Tran - KTLT 2018
Square matrix

1 -3 8 9
15 Các thao tác cơ bản 3 -2 6 7
5 -1 -4 -16
Kỹ thuật tính tổng -6 4 8 -1

Tính tổng các phần tử chẳn trong ma trận


long long TongChan(const int a[][MAX], int m, long long TongChan(const int a[][MAX], int n)
int n) {
{ long long s=0;
long long s=0; for (int i = 0; i < n; i++)
for (int i = 0; i < m; i++) for (int j = 0; j < n; j++)
for (int j = 0; j < n; j++) if (a[i][j]%2==0)
if (a[i][j]%2==0) s += a[i][j];
s += a[i][j]; return s;
return s; }
} //Ma trận vuông
//Mảng 2 chiều

by Khoa Anh Tran - KTLT 2018


Square matrix

1 -3 8 9
16 Các thao tác cơ bản 3 -2 6 7
5 -1 -4 -16
Kỹ thuật đếm -6 4 8 -1

Đếm số phần tử chẵn trên cột k của ma trận


int DemChanCot(const int a[][MAX], int m, int int DemChanCot(const int a[][MAX], int n, int
k) k)
{ {
int d=0; int d=0;
for (int i = 0; i < m; i++) for (int i = 0; i < n; i++)
if (a[i][k]%2==0) if (a[i][k]%2==0)
d++; d++;
return d; return d;
} }
//Mảng 2 chiều //Ma trận vuông

by Khoa Anh Tran - KTLT 2018


Square matrix

17 Các thao tác cơ bản


Kỹ thuật tính tổng 1 -3 8 9
3 -2 6 7
Độ phức tạp 5 -1 -4 16
Độ phức tạp
O(n2) -6 4 8 -1 O(n)

Tính tổng các phần tử trên đường chéo chính long long TongDCC(const int a[][MAX], int
long long TongDCC(const int a[][MAX], int n)
n) {
{ long long s=0;
long long s=0; for (int i = 0; i < n; i++)
for (int i = 0; i < n; i++) s += a[i][i];
for (int j = 0; j < n; j++) return s;
if (i==j) }
s += a[i][j];
return s;
} by Khoa Anh Tran - KTLT 2018
Square matrix

18 Các thao tác cơ bản


1 -3 8 9
Kỹ thuật tính tổng 3 -2 6 7
5 -1 -4 -16
Độ phức tạp Độ phức tạp
O(n2) -6 4 8 -1 O(n2)/2

Tính tổng các phần tử thuộc tam giác trên long long TongDCC02(const int a[][MAX],
đường chéo chính int n)
long long TongT_DCC(const int a[][MAX], {
int n) long long s=0;
{ for (int i = 0; i < n-1; i++)
long long s=0; for (int j = i+1; j < n; j++)
for (int i = 0; i < n; i++) s += a[i][j];
for (int j = 0; j < n; j++) return s;
if (i<j) }
s += a[i][j];
return s;
}
by Khoa Anh Tran - KTLT 2018
Square matrix

19 Các thao tác cơ bản


1 -3 8 9
Kỹ thuật đếm 3 -2 6 7
5 -1 -4 -16
-6 4 8 -1
Đếm số phần tử âm trong tam giác dưới của
đường chéo chính
int DemAmDuoi_DCC(const int a[][MAX], int n) int DemAmDuoi_DCC(const int a[][MAX], int
{ n)
int d=0; {
for (int i = 0; i < n; i++) int d=0;
for (int j = 0; j < n; j++) for (int i = 1; i < n; i++)
if ((i>j) && (a[i][j]<0)) for (int j = 0; j < i; j++)
d++; if (a[i][j]<0)
return d; d++;
} return d;
}

by Khoa Anh Tran - KTLT 2018


Square matrix

20 Các thao tác cơ bản


1 -3 8 9
Kỹ thuật cờ hiệu 3 -2 6 7
5 -1 -4 -16
-6 4 8 -1
Kiểm tra xem ma trận có đối xứng qua đường
chéo chính?
int KTDoiXung_DCC(const int a[][MAX], int n) int KTDoiXung_DCC(const int a[][MAX],
{ int n)
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) for (int i = 1; i < n; i++)
if ((i>j) && (a[i][j]!=a[j][i])) for (int j = 0; j < i; j++)
return -1; if(a[i][j]!=a[j][i])
return 1; return -1;
} return 1;
Không đẹp! }
Khi thay (i>j) bằng (i<j) hoặc (i!=j) theo anh/chị
hàm trên còn đúng yêu cầu?
by Khoa Anh Tran - KTLT 2018
Square matrix

21 Bài tập 01 – thực hành


 Cho ma trận vuông, kích thước n: int a[MAX][MAX]; short n;
 Viết chương trình thực hiện các yêu cầu dưới đây:
1. Nhập/xuất ma trận
2. Tính tổng các phần tử trong ma trận
3. Tính tổng các phần tử chẵn, nguyên tố trong ma trận
4. Tính tổng các phần tử chẵn trên cột k của ma trận
5. Đếm số phần tử âm trong ma trận
6. Đếm số phần tử âm trên dòng k
7. Đếm số phần tử là số nguyên tố trong ma trận
8. Đếm số phần tử cực đại, biết phần tử cực đại là những phần tử lớn
hơn những phần tử sung quanh nó
by Khoa Anh Tran - KTLT 2018
Square matrix

22 Bài tập 02 – thực hành


 Cho ma trận vuông, kích thước n: int a[MAX][MAX]; short n;
 Viết chương trình thực hiện các yêu cầu dưới đây:
1. Nhập ngẫu nhiên ma trận  [k1,k2]
2. Xuất ma trận
3. Tính tổng các phần tử trên ĐCC, ĐCP
4. Tính tổng các phần tử trong tam giác trên của ĐCC
5. Đếm số phần tử âm, nguyên tố trong tam giác trên/dưới của ĐCP
6. Đếm số phần tử cực đại không thuộc ĐCC và ĐCP của ma trận
7. Liệt kê các phần tử chẵn trên đường biên của ma trận
8. Liệt kê các phần tử chẵn trên dòng k
9. Kiểm tra xem trên ĐCC có tồn tại phần tử là số nguyên tố hay không, nếu có hàm trả
về 1, ngược lại hàm trả về -1
10. Hoán đổi các phần tử ở 2 dòng bất kỳ của ma trận, cột của các phần tử không thay đổi
by Khoa Anh Tran - KTLT 2018
Square matrix

THUẬT TOÁN GỢI Ý


23 Bài tập 03 – thực hành B1: Biến đổi MT về mảng 1C
B2: Sort tăng mảng 1C
 Cho ma trận: int a[MAX][MAX]; short n; B3: Đổ ngược trở lại theo các
 Viết chương trình thực hiện các yêu cầu dưới đây: hình phía dưới

1. Nhập ngẫu nhiên ma trận  [k1,k2] Các ma trận đích,


2. Xuất ma trận các phần tử theo
3. Biến đổi ma trận thỏa: đúng thứ tự (có 4
biến đổi từ ma trận
Ma trận ban 9 4 3 ban đầu)
đầu, các 8 1 7
phần tử ngẫu
2 6 5
nhiên

1 2 3 1 2 3 1 2 6 1 3 6
8 9 4 4 5 6 3 5 7 2 5 8
7 6 5 7 8 9 4 8 9 4 7 9
by Khoa Anh Tran - KTLT 2018
Square matrix

24 Bài tập 04 – Thực hành


Bài toán: KCUO - Viên kim cương Ví dụ
Nam được tặng một viên kim cương quý giá. Viên kim cương là một input
hình vuông có kích thước n x n (n lẻ và n>1). Trong hình vuông đó 3
khắc một hình vuông con như hình bên dưới output
*D*
DDD
*D*
input
Cho một số nguyên n, bạn hãy giúp Nam vẽ lại viên kim cương trên,
5
phần màu đen biểu thị bằng ký tự *, phần màu trắng biểu thị bằng ký tự
D (xem thêm ví dụ). output
**D**
Dữ liệu vào: *DDD*
DDDDD
Là số nguyên n (3<=n<=100), đề bài cho n lẻ. *DDD*
**D**
Dữ liệu ra:
Gồm n dòng biểu
BY KHOA TRAN thị
ANH - viên
KTLT 2018 kim cương.

You might also like