Tải bản đầy đủ (.pdf) (30 trang)

(Tiểu luận) bài tập lớn giữa kì môn đại số tuyến tính cho công nghệ thông tin môn đại số tuyến tính cho công nghệ thông tin

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.68 MB, 30 trang )

TỔNG LIÊN ĐỒN LAO ĐỘNG VIỆT NAM
TRƯỜNG ĐẠI HỌC TƠN ĐỨC THẮNG
KHOA CƠNG NGHỆ THƠNG TIN

BÀI TẬP LỚN GIỮA KÌ MƠN ĐẠI SỐ TUYẾN TÍNH
CHO CƠNG NGHỆ THƠNG TIN

MƠN ĐẠI SỐ TUYẾN TÍNH
CHO CƠNG NGHỆ THƠNG TIN

Người hướng dẫn: ThS NGUYỄN THỊ DIỄM HẰNG
Người thực hiện: NGUYỄN VŨ GIA PHƯƠNG – 52200205
Lớp: 22050301
Khố: 26

THÀNH PHỐ HỒ CHÍ MINH, THÁNG 04, NĂM 2023


TỔNG LIÊN ĐỒN LAO ĐỘNG VIỆT NAM
TRƯỜNG ĐẠI HỌC TƠN ĐỨC THẮNG
KHOA CƠNG NGHỆ THƠNG TIN

BÀI TẬP LỚN GIỮA KÌ MƠN ĐẠI SỐ TUYẾN TÍNH
CHO CƠNG NGHỆ THƠNG TIN

MƠN ĐẠI SỐ TUYẾN TÍNH
CHO CƠNG NGHỆ THƠNG TIN

Người hướng dẫn: ThS NGUYỄN THỊ DIỄM HẰNG
Người thực hiện: NGUYỄN VŨ GIA PHƯƠNG – 52200205
Lớp: 22050301


Khố: 26

THÀNH PHỐ HỒ CHÍ MINH, THÁNG 04, NĂM 2023


i

LỜI CẢM ƠN
Lời đầu tiên, em xin gửi lời cảm ơn chân thành đến Trường Đại Học Tôn Đức
Thắng và khoa Công Nghệ Thông Tin đã đưa môn học Đại Số Tuyến Tính vào
chương trình giảng dạy. Đặc biệt là giảng viên bộ môn, cô Nguyễn Thị Diễm
Hằng, người đã truyền cảm hứng và những kiến thức bổ ích cho em, người đã
giải đáp những thắc mắc còn tồn đọng trong em.
Mơn Đại Số Tuyến Tính là mơn học thú vị, trường và khoa đã sắp xếp vô cùng
hợp lý giữa các tiết lý thuyết và thực hành, từ những kiến thức ở lớp lý thuyết,
cô Nguyễn Thị Diễm Hằng đã giúp em hiểu rõ trình tự thực thi của từng bài
tốn thơng qua lớp thực hành của cơ. Từ đó giúp nâng cao tư duy lập trình của
em, củng cố kiến thức tốn học mà em cịn mơ hồ. Mặc dù em đã cố gắng hết
sức nhưng chắc chắn bài làm khó có thể tránh khỏi những thiếu sót và nhiều chỗ
cịn chưa chính xác, kính mong cơ xem xét và góp ý để bài của em được hồn
thiện hơn.
Em xin chân thành cảm ơn!


ii

ĐỒ ÁN ĐƯỢC HỒN THÀNH
TẠI TRƯỜNG ĐẠI HỌC TƠN ĐỨC THẮNG
Tôi xin cam đoan đây là sản phẩm đồ án của riêng tôi và được sự hướng dẫn của
ThS Nguyễn Thị Diễm Hằng;. Các nội dung nghiên cứu, kết quả trong đề tài này là

trung thực và chưa công bố dưới bất kỳ hình thức nào trước đây. Những số liệu trong
các bảng biểu phục vụ cho việc phân tích, nhận xét, đánh giá được chính tác giả thu
thập từ các nguồn khác nhau có ghi rõ trong phần tài liệu tham khảo.
Ngồi ra, trong đồ án cịn sử dụng một số nhận xét, đánh giá cũng như số liệu
của các tác giả khác, cơ quan tổ chức khác đều có trích dẫn và chú thích nguồn gốc.
Nếu phát hiện có bất kỳ sự gian lận nào tơi xin hồn tồn chịu trách nhiệm
về nội dung đồ án của mình. Trường đại học Tôn Đức Thắng không liên quan đến
những vi phạm tác quyền, bản quyền do tôi gây ra trong q trình thực hiện (nếu có).
TP. Hồ Chí Minh, ngày 13 tháng 04 năm 2023
Tác giả
(ký tên và ghi rõ họ tên)

Nguyễn Vũ Gia Phương


iii

PHẦN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN
Phần xác nhận của GV hướng dẫn

_________________________________________________________
_________________________________________________________
_________________________________________________________
_________________________________________________________
_________________________________________________________
_________________________________________________________
_________________________________________________________
Tp. Hồ Chí Minh, ngày tháng năm
(kí và ghi họ tên)


Phần đánh giá của GV chấm bài

_________________________________________________________
_________________________________________________________
_________________________________________________________
_________________________________________________________
_________________________________________________________
_________________________________________________________
_________________________________________________________
Tp. Hồ Chí Minh, ngày tháng năm
(kí và ghi họ tên)


iv

TĨM TẮT
Vấn đề nghiên cứu: Xử lý các bài tốn về ma trận bằng cách sử dụng ngôn ngữ
Python.
Các hướng tiếp cận: Vận dụng các kiến thức toán học cơ bản kết hợp với các kiến
thức về các thư viện Numpy, Sympy trong Python để giải quyết các bài toán.
Cách giải quyết vấn đề:
-

Sử dụng một số hàm trong thư viện Numpy
• Module “linalg”. Module này cung cấp nhiều hàm để tính tốn các bài
tốn về ma trận, giúp rút ngắn thời gian code, tăng tính hiệu quả của
code. Điển hình là các hàm sau: numpy.linalg.matrix_power(), …
• Một số hàm khác của thư viện Numpy: numpy.dot(), numpy.zeros(),
numpy.random.randint(), np.vectorize(), …


-

Sử dụng một số hàm trong thư viện Sympy để đơn giản hóa code và tiết kiệm
thời gian như: sympy.isprime(), …

Một số kết quả đạt được:
-

Hồn thành các bài tốn về ma trận trong đề bài với trên dưới 100 dòng code;

-

Tiếp thu được nhiều kiến thức mới, mở rộng khả năng hiểu biết hơn về thư viện

-

Tư duy lập trình được nâng cao thơng qua việc suy nghĩ tính tốn các bài toán.

numpy, sympy;


Document continues below
Discover more
from:
Hệ
điều hành
HDH 502047
Đại học Tôn Đức…
166 documents


Go to course

Kiểm-tra-NMHĐH 23

dvsvcvdsfvf
Hệ điều
hành

100% (13)

Hđh - Hệ điều hành
5

câu hỏi trắc nghiệm…
Hệ điều
hành

100% (8)

Ontap HDH - Nội
17

dung ơn thi cuối kì
Hệ điều
hành

100% (6)

Final report
25


10

Operating System…
Hệ điều
hành

100% (6)

Noidung Chu YOntap
Thi GK


Hệ điều
hành

1

OS - Hệ điều hành
9

MỤC LỤC

100% (5)

câu hỏi trắc nghiệm…
Hệ điều
hành

100% (4)


LỜI CẢM ƠN ................................................................................................................... i
PHẦN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN ......................................... iii
TÓM TẮT ....................................................................................................................... iv
MỤC LỤC ........................................................................................................................ 1
DANH MỤC CÁC HÌNH VẼ.......................................................................................... 3
CHƯƠNG 1 – PHƯƠNG PHÁP GIẢI QUYẾT BÀI TOÁN ......................................... 4
1.1 Khởi tạo ma trận .............................................................................................. 4
1.1.1 Những yêu cầu .................................................................................. 4
1.1.2 Phương pháp khởi tạo ma trận .......................................................... 4
1.2 Phương pháp giải quyết các bài toán .............................................................. 5
1.2.2 Bài toán “Lưu các số nguyên lẻ trong ma trận A vào một véc tơ
mới, in véc tơ kết quả ra màn hình.” .......................................................... 5
1.2.2 Bài toán “Lưu các số nguyên tố trong ma trận A vào một véc tơ
mới, in véc tơ kết quả ra màn hình.” .......................................................... 6
1.2.3 Bài tốn “Cho ma trận D = CB, đảo ngược các phần tử trong các
hàng lẻ của ma trận D và in ma trận kết quả ra màn hình.” ....................... 7
1.2.4 Bài tốn “Đối với ma trận A, hãy tìm các hàng có số nguyên tố
nhiều nhất và in các hàng đó ra màn hình.” ............................................... 8
1.2.5 Bài tốn “Đối với ma trận A, hãy tìm các hàng có dãy số lẻ liền kề
dài nhất và in các hàng đó ra màn hình.” ................................................... 9
CHƯƠNG 2 – HÌNH ẢNH MÃ NGUỒN VÀ ĐẦU RA .............................................. 10
2.1 Phần khởi tạo ma trận ................................................................................... 10
2.2 Phần mô tả hàm isprime() trong thư viện sympy .......................................... 11
2.3 Phần “tính biểu thức 𝐀^𝐓 + 𝑨 + 𝑪𝑩 + 𝑩^𝑻𝑪^𝑻 và in kết quả ra màn hình”
............................................................................................................................. 12


2


2.4 Phần “tính biểu thức 𝐀/𝟏𝟎 + (𝑨/𝟏𝟏)^𝟐 + (𝑨/𝟏𝟐)^𝟑 + ⋯ + (𝑨/𝟏𝟕)^𝟖 +
(𝑨/𝟏𝟖)^𝟗 + (𝑨/𝟗)^𝟏𝟎 và in kết quả ra màn hình” .......................................... 13
2.5 Phần “Lưu các hàng lẻ của ma trận A thành một ma trận mới và in ma trận
kết quả ra màn hình.” .......................................................................................... 15
2.6 Phần “Lưu các số nguyên lẻ trong ma trận A vào một véc tơ mới, in véc tơ
kết quả ra màn hình.” .......................................................................................... 15
2.6.1 Cách 1 ............................................................................................. 15
2.6.1 Cách 2 ............................................................................................. 16
2.7 Phần “Lưu các số nguyên tố trong ma trận A vào một véc tơ mới, in véc tơ
tổng ra màn hình.” ............................................................................................... 17
2.7.1 Cách 1 ............................................................................................. 17
2.7.1 Cách 2 ............................................................................................. 17
2.8 Phần “Cho ma trận D = CB, đảo ngược các phần tử trong các hàng lẻ của ma
trận D và in ma trận kết quả ra màn hình” .......................................................... 18
2.9 Phần “Đối với ma trận A, hãy tìm các hàng có số ngun tố nhiều nhất và in
các hàng đó ra màn hình.” ................................................................................... 19
2.10 Phần “Đối với ma trận A, hãy tìm các hàng có dãy số lẻ liền kề dài nhất và
in các hàng đó ra màn hình.”............................................................................... 20
TÀI LIỆU THAM KHẢO .............................................................................................. 23


3

DANH MỤC CÁC HÌNH VẼ
DANH MỤC HÌNH
Hình 1 – Khởi tạo ma trận .............................................................................................. 10
Hình 2 – Kết quả khởi tạo .............................................................................................. 11
Hình 3 – mơ tả hàm isprime() ........................................................................................ 12
Hình 4 – Câu a ................................................................................................................ 12
Hình 5 – Kết quả code câu a .......................................................................................... 12

Hình 6 – Câu b ............................................................................................................... 13
Hình 7 - Kết quả code câu b ........................................................................................... 14
Hình 8 – Câu c ................................................................................................................ 15
Hình 9 - Kết quả code câu c ........................................................................................... 15
Hình 10 – Câu d cách 1 .................................................................................................. 16
Hình 11 – Kết quả code câu d cách 1 ............................................................................. 16
Hình 12 – Câu d cách 2 .................................................................................................. 16
Hình 13 - Kết quả code câu d cách 2 ............................................................................. 16
Hình 14 – Câu e cách 1 .................................................................................................. 17
Hình 15 - Kết quả code câu e cách 1 .............................................................................. 17
Hình 16 – Câu e cách 2 .................................................................................................. 18
Hình 17 - Kết quả code câu e cách 2 .............................................................................. 18
Hình 18 – Câu f .............................................................................................................. 19
Hình 19 – Kết quả code câu f ......................................................................................... 19
Hình 20 – Câu g ............................................................................................................. 20
Hình 21 – Kết quả code câu g ........................................................................................ 20
Hình 22 – Câu h ............................................................................................................. 21
Hình 23 – Kết quả code câu h ........................................................................................ 22


4

CHƯƠNG 1 – PHƯƠNG PHÁP GIẢI QUYẾT BÀI TOÁN
1.1 Khởi tạo ma trận
1.1.1 Những yêu cầu
-

Tạo các các trận với các phần tử là các số nguyên ngẫu nhiên:
• Ma trận A: kích thước: 10x10, các phần tử nguyên ngẫu nhiên thuộc
đoạn từ 1 đến 100.

• Ma trận B: kích thước: 2x10, các phần tử nguyên ngẫu nhiên thuộc đoạn
từ 1 đến 20.
• Ma trận C: kích thước: 10x2, các phần tử nguyên ngẫu nhiên thuộc đoạn
từ 1 đến 20.

-

Trong phần lập trình, chỉ được sử dụng các thư viện numpy, sympy, math,
matplotlib.

1.1.2 Phương pháp khởi tạo ma trận
Vì các yêu cầu trên, ta có thể khởi tạo ma trận bằng cách kết hợp 2 hàm: reshape
và randint. Tất cả các hàm trên đều thuộc thư viện Numpy.
-

Hàm reshape:
• Cú pháp: np.reshape( <Mảng cần thay đổi kích thước>, (của mảng>, <Số cột mới của mảng>) ). Từ đó, ta biến mảng A với kích
thước 1x100 thành mảng 2 chiều => Ma trận A. Tuy nhiên, trong lý
thuyết Đại Số Tuyến Tính, mảng 2 chiều và ma trận có một số khác biệt,
điển hình là phép nhân ma trận.
• Cơng dụng: Được sử dụng để thay đổi kích thước của mảng mà khơng
làm thay đổi dữ liệu của nó.

-

Hàm randint: là hàm có sẵn trong module random của thư viện Numpy
• Cú pháp: np.random.randint( gồm)>, <Giá trị cao nhất có thể được tạo ra (không bao gồm)>, size =



5

<kích thước>, dtype = <Kiểu dữ liệu>), nếu khơng có “dtype” thì mặc
định sẽ là kiểu “int”.
• Cơng dụng: Tạo ra mảng các số ngẫu nhiên có kiểu dữ liệu tùy thuộc
vào kiểu dữ liệu và số phần tử được khai báo trong cú pháp.
Để khởi tạo một ma trận với các phần tử ngẫu nhiên, ta cần sử dụng hàm randint
để khởi tạo mảng các số nguyên ngẫu nhiên và sử dụng hàm reshape để đưa mảng đã
được khởi tạo thành ma trận có size mà đề bài yêu cầu.

1.2 Phương pháp giải quyết các bài toán
1.2.2 Bài toán “Lưu các số nguyên lẻ trong ma trận A vào một véc tơ mới, in
véc tơ kết quả ra màn hình.”
1.2.1.1 Vấn đề của bài tốn
-

Xác định số nào là số lẻ có trong ma trận.
Thêm các số lẻ đó vào trong một vecto mới.
In kết quả vecto ra màn hình.

1.2.1.2 Cách giải quyết
-

Cách 1: Sử dụng mảng boolean để tìm các giá trị chẵn trong ma trận A.
Cụ thể, ta sử dụng cú pháp sau: “array = A[A%2 == 0]”. Trong đó:
• “A%2 == 0” sẽ trả về một mảng boolean (mảng chỉ có các giá trị “True”
và “False”) có cùng kích thước với mảng A. Trong đó phần tử hàng i và
cột j trong ma trận là một số chia hết cho 2 thì sẽ trả về “True”, ngược lại,
sẽ trả về “False”.

• Sau đó A[A%2 == 0] sẽ trả về mảng một chiều mà tại đó, có giá trị
“True” như đã nói ở trên.
• Ví dụ: Ta có ma trận A = [ [1, 2],
[4, 3] ]
Thì biểu thức “A%2 == 0” sẽ trả về mảng boolean như sau:


6

[ [False, True],
[True, False] ]
Từ đó “A[A%2 == 0]” sẽ lấy các phần tử mà tại đó, mảng boolen trả về
“True”

-

-

• Ưu và nhược điểm:
Ưu điểm: Giúp tiết kiệm thời gian code, rút ngắn code, chạy nhanh hơn với
một số trường hợp ma trận có kích thước khơng q lớn.
Nhược điểm: Nếu cần tác động đến một phần tử cụ thể trong mảng thì
đoạn code trên hồn tồn khơng thể; Nếu mảng có kích thước q lớn,
việc tạo ra một mảng boolean mới sẽ khiến bộ nhớ bị đầy, dẫn đến làm
chậm thời gian thực thi code.
Cách 2: Sử dụng 2 vòng lặp for để duyệt qua từng phần tử của ma trận (mảng 2
chiều), sau đó thêm các phần tử thỏa điều kiện vào một mảng mới
• Sử dụng hàm len() giúp xác định số phần tử có trong mảng 1 chiều, hàm
range là hàm chạy từ 1 đến vị trí được chỉ định và khơng bao gồm len(A)
và len(A[i]).

• Ưu và nhược điểm:
Ưu điểm: Nếu muốn lấy giá trị của phần tử tại vị trí nhất định thì điều này
hoàn toàn khả thi; Tốc độ chạy của code tùy thuộc vào mảng, điều này có
lợi với mảng có kích thước lớn vì nếu như duyệt qua từng phần tử sẽ
không tốn nhiều bộ nhớ như ở cách 1.
Nhược điểm: So với cách 1, cách này sẽ tốn thời gian hơn so với một
mảng có kích thước nhỏ.
Kết luận: đối với ma trận có size 10x10 thì cách 1 hồn tồn nhanh hơn, vì vậy
ta nên sử dụng cách 1 đối với bài toán này và một bài toán xử lý mảng nhỏ, còn
cách 2, ta nên sử dụng đối với bài toán xử lý mảng lớn.

1.2.2 Bài toán “Lưu các số nguyên tố trong ma trận A vào một véc tơ mới, in
véc tơ kết quả ra màn hình.”
1.2.2.1 Vấn đề của bài tốn
-

Tìm được các số ngun tố trong ma trận A.
…Số nguyên tố là số chỉ chia hết cho 1 và chính nó…
Thêm các số lẻ đó vào trong một vecto mới.


7

-

In kết quả vecto ra màn hình.

1.2.2.2 Cách giải quyết
-


-

-

Cách 1: Duyệt qua từng phần tử của mảng, sử dụng hàm isprime có sẵn trong
thư viện sympy để kiểm tra xem số đó có phải là số nguyên tố hay khơng.
• Hàm append() là hàm thêm phần tử vào trong mảng. Nếu giá trị hàm
isprime trả về là “True” thì phần tử số nguyên tố sẽ được thêm vào mảng.
• Cách này giúp duyệt qua từng phần tử trong mảng, nó sẽ dễ tiếp cận hơn
đối với người mới bắt đầu học những kiến thức cơ bản trong mảng lập
trình.
Cách 2: Sử dụng hàm numpy.vectorize:
• Hàm numpy.vectorize là một hàm trong thư viện NumPy dùng để biến đổi
một hàm đơn giản thành một hàm có thể xử lý từng phần tử của mảng.
Hàm này trả về một hàm vectorized được định nghĩa để xử lý các phần tử
của mảng. [1]
• Đầu tiên, định nghĩa hàm checkPrime(num) với đầu vào là số nguyên num,
trả về “-1” nếu đầu vào không phải là số nguyên tố, ngược lại, trả về đầu
vào “num”. Hàm này duyệt từ số 2 đến nửa giá trị của số nguyên “num”.
Tiếp theo, temp = np.vectorize(checkPrime) để tạo một hàm mới (temp) để
áp dụng lên từng phần tử của mảng, gọi temp1 = temp(A) để tạo một ma
trận có kích thước giống với ma trận A, trong đó, mỗi phần tử của ma trận
A sẽ được áp dụng hàm checkPrime(). Cuối cùng thêm cách giá trị khác
“-1” trong “temp1” bằng phép so sánh “temp1[temp1 != -1]” và lưu kết
quả vào vecto “ex_e”. In kết quả ra màn hình bằng câu lệnh “print”.
• Hàm numpy.vectorize được cung cấp chủ yếu cho tính tiện lợi, khơng phải
hiệu suất. Hiện thực của nó về cơ bản là một vịng lặp.
Kết luận: Hàm numpy.vectorize cũng tương tự như vòng lặp vậy, để dễ tiếp cận
hơn với mảng chiều, ta nên sử dụng cách 1.


1.2.3 Bài toán “Cho ma trận D = CB, đảo ngược các phần tử trong các hàng
lẻ của ma trận D và in ma trận kết quả ra màn hình.”
1.2.3.1 Vấn đề của bài tốn
-

Nhân 2 ma trận.
Lấy được các phần tử trong các hàng lẻ của ma trận D.


8

-

Đảo ngược các phần tử trong ma trận vừa lấy được.
Gán giá trị bằng ma trận vừa được đảo ngược vào trong ma trận D.

1.2.3.2 Cách giải quyết
-

-

-

-

Để nhân 2 ma trận, ta có nhiều cách, nhưng để đơn giản hóa thì ta có thể sử
dụng: A@B hoặc np.dot(A, B) - với A, B là 2 ma trận có thể nhân được, để
nhân 2 ma trận – tính tích vơ hướng của 2 mảng. Dấu “*” trong python dùng để
nhân từng phần tử của 2 mảng với nha, chính vì thế nên nó khơng phù hợp để
nhân 2 ma trận.

Để lấy được các phần tử trong các hàng lẻ của ma trận D, ta sử dụng slice (lát
cắt): “D[1::2]”. Slice này giúp tạo ra một ma trận mới, ma trận này có các hàng
là các hàng có thứ tự lẻ trong ma trận D.
Sử dụng hàm “np.flip(D, axis = 1)” để đảo ngược các phần tử trong từng hàng
của ma trận
• axis là các trục được xác định cho các mảng có nhiều hơn một chiều. Mảng
2 chiều có hai trục tương ứng: trục thứ nhất chạy dọc xuống dưới qua các
hàng (axis 0) và trục thứ hai chạy ngang qua các cột (axis 1).
Sau khi có được một ma trận đảo ngược các phần tử của các hàng lẻ của ma
trận, ta tiếp hành gán nó vào lại trong ma trận D.

1.2.4 Bài toán “Đối với ma trận A, hãy tìm các hàng có số ngun tố nhiều
nhất và in các hàng đó ra màn hình.”
1.2.4.1 Vấn đề của bài tốn
-

Tìm các hàng có số ngun tổ.
Xác định hàng có số nguyên tố nhiều nhất?
In các hàng đó ra màn hình.

1.2.4.2 Cách giải quyết
-

Tạo 2 mảng, 1 mảng để lưu các biến đếm số nguyên tố của mỗi hàng, 1
mảng để lưu các hàng có số nguyên tố nhiều nhất.
Sử dụng 2 vòng lặp for để duyệt qua từng phần tử của mảng, tiếp theo, sử
dụng hàm isprime trong thư viện sympy, nếu phần tử tại (i, j) là số nguyên tố
thì biến đếm sẽ tăng lên. Sau khi kết thúc hàng i, ta thêm giá trị của biến đếm
vào mảng đếm đã được tạo ở trên và reset giá trị của biến đếm về bằng 0.



9

-

-

Sử dụng hàm max(<mảng>) để tìm giá trị lớn nhất có trong mảng và gán nó
cho biến nào đó để đi so sánh.
Sử dụng vòng lặp for với len của vòng lặp là len của mảng biến đếm, nếu
như giá trị của mảng biến đếm tại vị trí i bằng giá trị max, ta append tất cả
phần tử của ma trận A tại hàng i vào mảng có các hàng chứa nhiều số
nguyên tố nhất.
Nếu chiều dài của mảng biến đếm khác 0 – tức là ma trận có chứa số ngun
tố thì ta tiến hành in mảng có các hàng chứa nhiều số ngun tố nhất ra màn
hình, cịn nếu chiều dài của mảng biến đếm bằng 0 tức là ma trận khơng có
số ngun tố, vậy ta in ma trận ra màn hình.

1.2.5 Bài tốn “Đối với ma trận A, hãy tìm các hàng có dãy số lẻ liền kề dài
nhất và in các hàng đó ra màn hình.”
1.2.5.1 Vấn đề của bài tốn
-

Tìm các số lẻ.
Đếm số lẻ liền nhau.
Xác định hàng nào là hàng có số lẻ liền nhau nhiều nhất.
In các hàng đó ra màn hình

1.2.4.2 Cách giải quyết
-


-

Tương tự bài 1.2.4, tạo 2 mảng, 1 mảng để lưu các biến đếm số lẻ liền kề của
mỗi hàng, 1 mảng để lưu các hàng có số lẻ liền kề nhiều nhất.Tạo thêm biến tạm
có giá trị bằng 0 để so sánh và lưu giá trị.
Sử dụng 2 vòng lặp for để duyệt qua từng phần tử của mảng, tiếp theo, sử dụng
thuật toán “A[i][j] % 2 == 0” nếu phần tử tại (i, j) là số lẻ thì biến đếm sẽ tăng
lên, tiếp tục, nếu phần tử kế sau, tứ A[i][j+1] là số lẻ thì biến đếm sẽ tăng lên,
cịn nếu là số chẵn thì tiến hành so sánh biến tạm với biến đếm, nếu biến đếm
lớn hơn biến tạm thì ta gán biến đếm cho biến tạm đồng thời ta reset giá trị của
biến đếm về 0 ở ngồi vịng if nhỏ. Sau khi kết thúc hàng i, ta thêm giá trị của
biến tạm vào mảng đếm đã được tạo ở trên và reset giá trị của biến đếm và giá
trị của biến tạm về bằng 0.


10

-

-

Sử dụng hàm max(<mảng>) để tìm giá trị lớn nhất có trong mảng và gán nó cho
biến nào đó để đi so sánh.
Sử dụng vòng lặp for với len của vòng lặp là len của mảng biến đếm, nếu như
giá trị của mảng biến đếm tại vị trí i bằng giá trị max, ta append tất cả phần tử
của ma trận A tại hàng i vào mảng có các hàng chứa nhiều số lẻ liền kề nhất.
Nếu chiều dài của mảng biến đếm khác 0 – tức là ma trận có chứa số lẻ thì ta
tiến hành in mảng có các hàng chứa nhiều số lẻ liền kề nhau nhất ra màn hình,
cịn nếu chiều dài của mảng biến đếm bằng 0 tức là ma trận khơng có số lẻ, vậy

ta in ma trận ra màn hình.

CHƯƠNG 2 – HÌNH ẢNH MÃ NGUỒN VÀ ĐẦU RA
2.1 Phần khởi tạo ma trận
-

Mã nguồn:

Hình 1 – Khởi tạo ma trận
-

Kết quả đầu ra:


11

Hình 2 – Kết quả khởi tạo

2.2 Phần mơ tả hàm isprime() trong thư viện sympy
-

Mã nguồn:


12

Hình 3 – mơ tả hàm isprime()

2.3 Phần “tính biểu thức 𝐀𝐓 + 𝑨 + 𝑪𝑩 + 𝑩𝑻 𝑪𝑻 và in kết quả ra màn hình”
-


Mã nguồn:

Hình 4 – Câu a
-

Kết quả đầu ra:

Hình 5 – Kết quả code câu a


13

2.4 Phần “tính biểu thức

𝐀

𝟏𝟎

𝑨 𝟐

+( ) +(
𝟏𝟏

𝑨

𝟏𝟐

𝟑


) + ⋯+ (

và in kết quả ra màn hình”
-

Mã nguồn:

-

Kết quả đầu ra:

Hình 6 – Câu b

𝑨

𝟏𝟕

𝟖

) +(

𝑨

𝟏𝟖

𝟗

𝑨 𝟏𝟎

) +( )

𝟏𝟗


14

Hình 7 - Kết quả code câu b


15

2.5 Phần “Lưu các hàng lẻ của ma trận A thành một ma trận mới và in ma
trận kết quả ra màn hình.”
-

Mã nguồn:

-

Kết quả đầu ra:

Hình 8 – Câu c

Hình 9 - Kết quả code câu c

2.6 Phần “Lưu các số nguyên lẻ trong ma trận A vào một véc tơ mới, in véc
tơ kết quả ra màn hình.”
2.6.1 Cách 1
-

Mã nguồn:



16

Hình 10 – Câu d cách 1
-

Kết quả đầu ra:

Hình 11 – Kết quả code câu d cách 1

2.6.1 Cách 2
-

Mã nguồn:

Hình 12 – Câu d cách 2
-

Kết quả đầu ra:

Hình 13 - Kết quả code câu d cách 2


17

2.7 Phần “Lưu các số nguyên tố trong ma trận A vào một véc tơ mới, in véc
tơ tổng ra màn hình.”
2.7.1 Cách 1
-


Mã nguồn:

-

Kết quả đầu ra:

Hình 14 – Câu e cách 1

Hình 15 - Kết quả code câu e cách 1

2.7.1 Cách 2
-

Mã nguồn:


18

Hình 16 – Câu e cách 2
-

Kết quả đầu ra:

Hình 17 - Kết quả code câu e cách 2

2.8 Phần “Cho ma trận D = CB, đảo ngược các phần tử trong các hàng lẻ
của ma trận D và in ma trận kết quả ra màn hình”
-


Mã nguồn:


×