Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và C++
1
PHN 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 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 đó người thầy.Vai trò của người thầy trong thế kỉ XXI trở 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 tạo môi trường học tập, tạo điều kiện để họ 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ẽ gì để giúp cho học sinh điều chỉnh những thay
đổi 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 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 tất cả -chính sự khôn ngoan này giúp họ tồn tại trong
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ũ.
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 năng lực đam 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 tnh C++ gần đây ngôn ngữ lập trình Python hầu hết giáo viên
phổ thông đang dy 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ậy, để giúp giáo viên học sinh tiếp cận được
ngôn ngữ Python 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 vcách sdụng
ngôn ngữ lập trình C++ 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++ 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 cu:
Nghiên cu v mng mt chiu trong ngôn ng Python và C++ cho hc sinh
t trung bình tr lên.
* Thi gian nghiên cu:
Sáng kiến được thc hin 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 đề - gii quyết vấn đ
Phương pháp phân tích tổng hp.
Phương pháp thực nghiệm, so sánh đối chiếu.
* Nhim v nghiên cu:
- Giáo viên hoàn thành nội dung đ tài, báo cáo thành chuyên đ trong các
ln hp t chuyên môn đ cùng đồng nghip b sung nhng thiếu sót ca đề 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.
- ng dn hc sinh nghiêm túc nghiên cu thc hiện đề tài trong quá
trình hc tp nhm nâng cao và phát trin kh năng lập trình ca bn 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
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 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 tờ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 + + Python bởi không
quen chương trình mắc lỗi không biết khắc phục. 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 một số trường
khác trong khu vực. Chúng tôi đều nhận xét về những khó khăn khi dạy học
bồi dưỡng học sinh giỏi bộ môn Tin học như sau:
- Tài liệu viết vC++, 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 đá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 đã 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 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 ngôn ngữ lập trình. Vậy Python gì? 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 nguồn mở đa mục đích, một loại ngôn ngữ bậc cao, thông dịch hướng
đối. Điều đặc biệt Python ? Đó là pháp của python khá dhiểu, dễ học
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 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 còn
sử dụng với web, 3D CAD,.. 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
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ử cực nhanh, python 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 ++ 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 C ++, Python tuân theo quy tắc “viết một lần, chạy
bất kỳ đâu”, nghĩa một sẽ hoạt động trên tất cả các hệ điều hành. Tuy
nhiên, C ++ cần được biên dịch trên mỗi hđiều hành trước khi 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 ++ nguồn
C ++ cần trở thành máy. Python tuân theo một chiến thuật khác khi được
diễn giải. Tuy nhiên, việc giải thường chậm hơn so với chạy 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, gồm nhiều phần tử
mỗi phần tử một dữ liệu riêng biệt. Mảng một chiều còn gọi List hoặc danh
sách
2.1. Khái niệm List một chiều
List một chiều dãy hữu hạn các phần tử cùng kiểu. List được đặt tên
mỗi phần tử của một chỉ số. Để 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 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