
Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và C++
1
PHẦN I. ĐẶT VẤN ĐỀ
I. LÝ DO CHỌN ĐỀ TÀI:
Trong thời đại 4.0 - xu hướng kết hợp giữa các hệ thống ảo và thực thể, vạn
vật kết nối internet - đang thách thức ý niệm của chúng ta về vai trò thực sự của
con người, trong đó có người thầy.Vai trò của người thầy trong thế kỉ XXI trở nên
phức tạp ở một thế giới thay đổi nhanh chóng, nơi mà tri thức hầu như vô tận. Dạy
học phân hóa là quan điểm phải được quan tâm đặc biệt. Người thầy phải quan tâm
đến từng người, nhu cầu họ rất khác nhau trong lớp học không đồng nhất, nhiệm
vụ chính của người thầy là tạo môi trường học tập, tạo điều kiện để họ có cơ hội
học tập theo phương pháp tích cực và sáng tạo.
Vai trò của người thầy sẽ là gì để giúp cho học sinh điều chỉnh những thay
đổi xã hội? Người thầy phải làm cho học sinh chủ động, hào hứng đón nhận như
một cơ hội đồng thời cũng là thách thức phải vượt qua. Người thầy xác định vấn đề
cần quan tâm, đặc biệt là đối tượng người học ngày nay rất khác trước, với động cơ
tình cảm và sự quan tâm rộng hơn về cả không gian lẫn thời gian. Nếu trước đây
học để tham gia một vài lĩnh vực thì ngày nay, người học quan tâm đến rất nhiều
lĩnh vực nếu không nói là tất cả -chính sự khôn ngoan này giúp họ tồn tại trong xã
hội thay đổi. Do vậy, phải có cách tiếp cận khác, không giống cách cũ.
Là một giáo viên Tin học, tôi nhận thấy chương trình giáo dục phổ thông
mới đã thay đổi để đáp ứng nhu cầu của thời đại mới. Giáo viên Tin học ngoài việc
dạy kiến thức phổ thông về tin học ứng dụng thì việc dạy học lập trình cũng hết
sức quan trọng; trách nhiệm của người giáo viên Tin học là giúp học sinh hiểu hơn
về sự hoạt động của máy tính, am hiểu về khoa học kỹ thuật, góp phần định hướng
những học sinh có năng lực và đam mê Tin học vào đội ngũ nhân lực CNTT chất
lượng cao của đất nước.
Tuy nhiên, theo tôi thấy hiện nay dạy lập trình chủ yếu người ta dùng ngôn
ngữ lập trình C++ và gần đây là ngôn ngữ lập trình Python mà hầu hết giáo viên
phổ thông đang dạy học trên ngôn ngữ lập trình Pascal. Trong quá trình tự học
ngôn ngữ lập trình C++ và Python , tôi nhận thấy những khó khăn gặp phải khi tiếp
cận với ngôn ngữ này. Chính vì vậy, để giúp giáo viên và học sinh tiếp cận được
ngôn ngữ Python và C++ một cách dễ dàng nhất. Tôi xin đưa ra SKKN “Chuyên
đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và C++”.
II. MỤC ĐÍCH NGHIÊN CỨU
- Trong phạm vi đề tài của mình, tôi muốn nghiên cứu, tìm tòi về cách sử dụng
ngôn ngữ lập trình C++ và Python để giải quyết các bài toán về dãy số trong tin
học. Nhằm giúp học sinh:
+ Biết sử dụng mảng một chiều một cách linh hoạt trên C++ và Python

Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và C++
2
+ Hiểu và vận dụng linh hoạt một số hàm có sãn trong ngôn ngữ lập trình.
+ Giúp học sinh tiếp cận dễ dàng hơn với C++ và Python
- Cũng qua đề tài, tôi muốn cùng đồng nghiệp trao đổi, trau dồi chuyên môn nhằm
góp phần nâng cao trình độ chuyên môn nghiệp vụ và khả năng mở rộng kiến thức.
III. ĐỐI TƯỢNG, THỜI GIAN NGHIÊN CỨU:
* Đối tượng nghiên cứu:
Nghiên cứu về mảng một chiều trong ngôn ngữ Python và C++ cho học sinh
từ trung bình trở lên.
* Thời gian nghiên cứu:
Sáng kiến được thực hiện từ tháng 8 năm 2020 đến tháng 3 năm 2021.
IV. PHƯƠNG PHÁP VÀ NHIỆM VỤ NGHIÊN CỨU:
* Phương pháp nghiên cứu:
Phương pháp Đặt vấn đề - giải quyết vấn đề
Phương pháp phân tích tổng hợp.
Phương pháp thực nghiệm, so sánh đối chiếu.
* Nhiệm vụ nghiên cứu:
- Giáo viên hoàn thành nội dung đề tài, báo cáo thành chuyên đề trong các
lần họp tổ chuyên môn để cùng đồng nghiệp bổ sung những thiếu sót của đề tài.
Giao lưu học hỏi, trao đổi kinh nghiệm với các đồng môn ở các trường lân cận.
- Thực nghiệm dạy học: Ở trường THPT tôi đang công tác từ năm học 2020-
2021 đánh giá hiệu quả của đề tài.
- Hướng dẫn học sinh nghiêm túc nghiên cứu và thực hiện đề tài trong quá
trình học tập nhằm nâng cao và phát triển khả năng lập trình của bản thân.

Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và C++
3
PHẦN II. NỘI DUNG NGHIÊN CỨU
I. CƠ SỞ LÝ LUẬN:
Để giải quyết các bài toán về mảng một cách tối ưu, học sinh phải biết khái
niệm về mảng một chiều, các thuật toán thông dụng trên mảng; Học sinh phải có
kỹ năng nhận dạng bài toán khi được phát biểu dưới nhiều dạng khác nhau và lựa
chọn thuật toán thích hợp để giải quyết.
II. THỰC TRẠNG CỦA VẤN ĐỀ:
Môn Tin học khá mới, việc tổ chức thi HSG tỉnh cho các trường THPT
không chuyên khoảng mười lăm năm trở lại đây. Nên đối với giáo viên việc tìm
tòi, học tập, nghiên cứu để nâng cao trình độ gặp rất nhiều khó khăn. Hầu hết, đội
ngũ giáo viên của các trường không chuyên đều quen với ngôn ngữ lập trình
Pascal, chưa mạnh dạn chuyển sang dạy ngôn ngữ C + + và Python bởi vì không
quen và chương trình mắc lỗi không biết khắc phục. Vì vậy, trong quá trình tập
huấn về ngôn ngữ lập trình C++ của sở Giáo dục Nghệ An, tự nghiên cứu về ngôn
ngữ lập trình Python tôi luôn trăn trở và tích cực trao đổi kinh nghiệm, thảo luận về
nội dung, phương pháp, kỹ thuật với đồng nghiệp cùng trường và một số ở trường
khác trong khu vực. Chúng tôi đều có nhận xét về những khó khăn khi dạy học và
bồi dưỡng học sinh giỏi bộ môn Tin học như sau:
- Tài liệu viết về C++, Python rất nhiều nhưng khi đi vào giải quyết những
bài toán cụ thể thường hay mắc lỗi và không biết cách xử lý.
- Cú pháp câu lệnh và hàm trong C++ , Python khác so với Pascal.
- Chưa hiểu hết các thư viện trong C++, Python.
- Tài liệu về bộ môn Tin học để bồi dưỡng HSG không nhiều, đặc biệt
chương trình chuẩn về C++ , Python rất hiếm cho nên việc tìm kiếm tài liệu dạy
học phù hợp trình độ học sinh rất vất vả.
- Hệ thống bài tập ít ỏi, rời rạc nên việc tổng hợp bài tập và đề thi thành các
dạng bài tập phục vụ dạy học mất rất nhiều thời gian.
- Các đề thi Tin học thường không có đáp án. Giáo viên và học sinh muốn
trao đổi với các bạn trường chuyên thì gặp trở ngại về ngôn ngữ lập trình. Thực tế,
qua các kỳ thi HSG tỉnh Nghệ An đã có rất nhiều học sinh, giáo viên khó hiểu khi
bài thi làm đúng nhưng điểm thi vẫn rất thấp và sự khó hiểu đó vẫn cứ kéo dài do
đáp án tham khảo và test chấm không được công bố.
III. GIẢI QUYẾT VẤN ĐỀ:
1. Khái quát về ngôn ngữ lập trình Python và C++
1.1. Khái quát về ngôn ngữ lập trình Python
Hiện nay với những đặc điểm, tính năng vượt trội thì đa phần lập trình viên
lựa chọn Python là ngôn ngữ lập trình. Vậy Python là gì? Là một ngôn ngữ lập

Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và C++
4
trình mã nguồn mở đa mục đích, một loại ngôn ngữ bậc cao, thông dịch và hướng
đối. Điều gì đặc biệt ở Python ? Đó là cú pháp của python khá dễ hiểu, dễ học và
trong việc phát triển ứng dụng thì ngôn ngữ này cũng rất linh hoạt. Python hỗ trợ
mẫu đa lập trình, bao gồm lập trình hướng đối tượng, lập trình hàm và mệnh lệnh
hoặc là các phong cách lập trình theo thủ tục.
Python không chỉ làm việc trên lĩnh vực đặc biệt như lập trình web mà còn
sử dụng với web, 3D CAD,.. Và nó là ngôn ngữ lập trình động nên bạn không cần
sử dụng các kiểu dữ liệu khai báo. Python giúp cho việc phát triển ứng dụng và
debug trở nên nhanh chóng hơn.
Là một ngôn ngữ có hình thức sáng sủa, cấu trúc rõ ràng, cú pháp ngắn gọn
Python với tốc độ xử lý cực nhanh, python có thể tạo ra những chương trình
từ những script siêu nhỏ tới những phần mềm cực lớn như Biender 3D.
1.2 . Khái quát về ngôn ngữ lập trình C++
C ++ là một ngôn ngữ lập trình đa năng thường tham gia vào việc phát triển
các hệ thống lớn và phức tạp. Ngôn ngữ này là ngôn ngữ di động nhất trong toàn bộ
vòng tròn của các ngôn ngữ lập trình.
Khi so sánh Python và C ++, Python tuân theo quy tắc “viết một lần, chạy ở
bất kỳ đâu”, có nghĩa là một mã sẽ hoạt động trên tất cả các hệ điều hành. Tuy
nhiên, mã C ++ cần được biên dịch trên mỗi hệ điều hành trước khi nó có thể thực
thi.
Sự khác biệt lớn nhất trong cuộc thảo luận về Python với C ++ là mã nguồn
C ++ cần trở thành mã máy. Python tuân theo một chiến thuật khác khi nó được
diễn giải. Tuy nhiên, việc giải mã thường chậm hơn so với chạy mã trực tiếp trên
phần cứng.
2. Kiểu mảng một chiều trên ngôn ngữ lập trình Python
Trong Python, mảng là một loại dữ liệu đặc biệt, nó gồm nhiều phần tử và
mỗi phần tử là một dữ liệu riêng biệt. Mảng một chiều còn gọi là List hoặc danh
sách
2.1. Khái niệm List một chiều
List một chiều là dãy hữu hạn các phần tử cùng kiểu. List được đặt tên và
mỗi phần tử của nó có một chỉ số. Để mô tả List một chiều cần xác định kiểu của
các phần tử và cách đánh số các phần tử của nó.
Để người lập trình có thể xây dựng và sử dụng kiểu List một chiều, các ngôn ngữ
lập trình có quy tắc cách thức cho phép xác định:
• Tên kiểu List một chiều;
• Số lượng phần tử;

Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và C++
5
• Kiểu dữ liệu của phần tử;
• Cách khai báo biến;
• Cách tham chiếu đến phần tử.
2.2. Khai báo kiểu List
Tổng quát, khai báo biến List một chiều có dạng:
<tên biến> = [] # khai báo List rỗng
<tên biến> = [<giá trị 1>, <giá trị 2>,<giá trị 3>,<giá trị 4>,…,<giá trị n>] # khai
báo List có giá trị
Trong đó:
<tên biến>: là tên do người lập trình đặt, tuân theo quy tắc đặt tên;
[<giá trị 1>, <giá trị 2>,<giá trị 3>,<giá trị 4>,…,<giá trị n>] : là một dãy giá trị
được viết cách nhau bởi dấu phẩy và bao hàm trong dấu ngoặc vuông [].
<tên biến> = [0]*10 # khai báo List có 10 giá trị bằng 0
<tên biến> = [0.5]*10 # khai báo List có 10 giá trị bằng 0.5
Ví dụ:
>>> A=[] #Tạo list rỗng
>>> B=[1,2,6,7,8] # Tạo List số nguyên
>>> C=[2.3,5.6,7.8] #Tạo List số thực
>>> D=[1,"ONE",4,5.7,"TWO"] #Tạo List hỗn hợp
*) List có khả năng chứa các kiểu dữ liệu khác nhau bao gồm cả chính nó.
Ví dụ 1:
>>> x=20; y="Nghệ An";z=True;
>>> E=[x,y,z,3.14,90]
>>> E
[20, 'Nghệ An', True, 3.14, 90]
Ví dụ 2:
>>> A=[1,2,[24,56,7],"Nghệ An"]
>>> A
[1, 2, [24, 56, 7], 'Nghệ An']
*) Tạo List có giá trị liên tục gồm n phần tử bắt đầu từ 0 bằng cấu trúc lặp for
Ví dụ:
>>> A=[i for i in range(20)] # Tạo List có giá trị liên tục từ 0 đến 19
>>> A

