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

Một số giải pháp nâng cao chất lượng bồi dưỡng học sinh giỏi môn tin học cấp trung học phổ thông

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 (1.41 MB, 26 trang )

SỞ GIÁO DỤC VÀ ĐÀO TẠO YÊN BÁI
TRƯỜNG THPT CHUYÊN NGUYỄN TẤT THÀNH

BÁO CÁO SÁNG KIẾN CẤP TỈNH
Lĩnh vực: Tin học trung học phổ thông

MỘT SỐ GIẢI PHÁP NÂNG CAO CHẤT LƯỢNG
BỒI DƯỠNG HỌC SINH GIỎI MÔN TIN HỌC
CẤP TRUNG HỌC PHỔ THƠNG

Tác giả: Nguyễn Hồng Nhung
Trình độ chun mơn: Thạc sĩ Công nghệ thông tin
Chức vụ: Giáo viên
Đơn vị cơng tác: Tổ Tốn Tin - Trường THPT Chun Nguyễn Tất Thành

Yên Bái, tháng 1 năm 2022


MỤC LỤC

I. THÔNG TIN CHUNG VỀ SÁNG KIẾN ...................................................... 2
II. MƠ TẢ SÁNG KIẾN:.................................................................................... 2
1. Tình trạng các giải pháp đã biết .............................................................................. 2
2. Nội dung giải pháp đề nghị cơng nhận là sáng kiến .............................................. 4

2.1. Mục đích của sáng kiến .......................................................................... 4
2.2. Nội dung giải pháp ................................................................................. 4
2.2.1. Đối với giáo viên ................................................................................. 4
a. Sinh test tự động bằng tiện ích .............................................................. 4
b. Thiết lập hệ thống chấm bài online qua mạng LAN ............................. 5
c. Thiết lập hệ thống chấm bài online trên mạng WAN ........................... 7


d. Tổ chức hoặc liên hệ cho học sinh tham gia các kì thi trực tuyến. ....... 9
2.2.2. Đối với học sinh ................................................................................ 10
a. Có kế hoạch học tập của bản thân. ...................................................... 10
b. Làm thật nhiều bài để rèn luyện các kĩ năng ...................................... 10
c. Tiếp thu những kinh nghiệm khi đi thi ................................................ 14
3. Khả năng áp dụng của giải pháp ........................................................................... 16
4. Hiệu quả, lợi ích thu được hoặc dự kiến có thể thu được do áp dụng giải pháp
........................................................................................................................................ 16
5. Những người tham gia tổ chức, áp dụng sáng kiến lần đầu ................................ 17
6. Các điều kiện cần thiết để áp dụng sáng kiến ....................................................... 17
7. Tài liệu gửi kèm ........................................................................................................ 17

III. Cam kết không sao chép hoặc vi phạm bản quyền ................................. 17
PHỤ LỤC ........................................................................................................... 18
1. Cách sinh test bằng tiện ích sinh test của thầy Tơ Sơn....................................... 18
2. Cách sinh test bằng Test Maker ............................................................................ 21
3. Hướng dẫn thiết lập hệ thống chấm bài online qua LAN sử dụng Themis Web
........................................................................................................................................ 23

1


I. THÔNG TIN CHUNG VỀ SÁNG KIẾN
1. Tên sáng kiến: Một số giải pháp nâng cao chất lượng bồi dưỡng học sinh giỏi môn
Tin học cấp trung học phổ thông.
2. Lĩnh vực áp dụng sáng kiến: Tin học.
3. Phạm vi áp dụng sáng kiến: Cấp trung học phổ thông.
4. Thời gian áp dụng sáng kiến: Kế hoạch thực hiện sáng kiến bắt đầu từ đầu năm học
2020-2021, được thử nghiệm trong năm học 2020-2021, đầu năm học 2021-2022.
5. Tác giả:

Họ và tên: Nguyễn Hồng Nhung.
Năm sinh: 1986.
Trình độ chun mơn: Thạc sĩ Công nghệ thông tin.
Chức vụ công tác: Giáo viên.
Nơi làm việc: Tổ Toán Tin – Trường THPT Chuyên Nguyễn Tất Thành, TP. Yên
Bái, Tỉnh Yên Bái.
Địa chỉ liên hệ: Tổ Toán Tin – Trường THPT Chuyên Nguyễn Tất Thành, TP. Yên
Bái, Tỉnh Yên Bái.
Điện thoại: 0387.511.185.
II. MÔ TẢ SÁNG KIẾN:
1. Tình trạng các giải pháp đã biết
Cơng tác phát hiện và bồi dưỡng học sinh giỏi các môn từ trước tới nay luôn là
nỗi trăn trở của nhiều giáo viên. Giáo viên phải đầu tư rất nhiều thời gian, công sức trong
việc lên kế hoạch, soạn bài, lên lớp cho học sinh đội tuyển.
Qua khảo sát và thực tế chấm bài thi học sinh giỏi cấp tỉnh môn Tin học nhiều
năm, tôi nhận thấy học sinh vẫn mắc những sai sót khơng đáng dẫn đến kết quả khơng
như mong đợi.
Hiện tại, giáo viên các trường trong Tỉnh đều áp dụng chung một số biện pháp
sau cho công tác bồi dưỡng học sinh giỏi như:
1. Tìm kiếm nguồn học sinh.
2. Xây dựng kế hoạch bồi dưỡng đội tuyển học sinh giỏi. Soạn bài, lên lớp, thực
hiện kế hoạch linh hoạt để đạt đúng tiến độ.
3. Phối kết hợp với giáo viên chủ nhiệm, giáo viên các môn, phụ huynh học sinh
để tìm hiểu, động viên, khích lệ học sinh học tập.

2


Ngồi các biện pháp chung ở trên, mỗi mơn lại áp dụng các biện pháp đặc thù riêng.
Với môn Tin học, chúng tơi đang áp dụng:

1. Đối với giáo viên:
• Thường xuyên rèn luyện các kĩ năng lập trình; tìm kiếm, phân loại các bài
tập theo chủ đề, theo cấp độ khó; sinh test cho các bài làm để phục vụ việc chấm thi tự
động bằng phần mềm Themis của thầy Lê Minh Hồng.
• Trước buổi học 1 ngày, giáo viên sẽ gửi bài để học sinh nghiên cứu và lập
trình. Trong buổi học, các em sẽ nộp bài, giáo viên chấm bài offline, dựa vào kết quả nộp
bài, giáo viên sẽ chữa những bài sai điển hình, những bài mà học sinh chưa làm được.
2. Đối với học sinh: Học sinh được học lý thuyết, được giao bài trước mỗi buổi
học với mức độ khó tăng dần và sẽ được các thầy cô, bạn bè giúp đỡ sửa lỗi. Xong mỗi
chủ đề sẽ làm bài kiểm tra để khảo sát.
Với những biện pháp mà giáo viên tại trường tôi nói riêng và giáo viên trong tỉnh
nói chung đã áp dụng, tơi nhận thấy vẫn cịn có những hạn chế cần phải khắc phục như:
• Việc sinh test cho các bài làm bằng phương pháp thủ công sẽ rất mất thời
gian, test yếu, không phủ hết phạm vi giới hạn đề bài.
• Ngồi ra, số lượng các bài tập học sinh giải quyết được chưa nhiều do thời
gian để chờ học sinh code và chấm offline ở buổi học rất mất thời gian (giáo viên phải
copy bài của học sinh vào USB, sau đó đem về máy tính của mình để chấm, nếu bài lỗi,
chưa đạt 100% điểm, giáo viên phản hồi để học sinh sửa. Việc này lặp đi lặp lại sẽ tốn rất
nhiều thời gian của cả cô trò và học sinh cũng rất ngại khi phải nộp lại bài cho giáo viên
nhiều lần).
• Có nhiều trang web cho phép chấm bài lập trình online, nhiều giáo viên
chưa biết khai thác, giao cho học sinh tự học để tăng kĩ năng lập trình.
• Trong tình hình dịch bệnh covid-19 diễn biến phức tạp, khi phải học tập
online qua các phần mềm như zoom, teamlink, k12online... việc nộp code và chấm bài
theo kiểu offline cũng gặp nhiều khó khăn. Nếu chỉ dựa nguyên vào các trang web chấm
bài online thì giáo viên cũng mất sự chủ động, khơng kiểm soát được việc làm và nộp bài
của học sinh.
Với những hạn chế này mà bản thân luôn thôi thúc tôi tìm hiểu, giải quyết để đem
lại chất lượng bồi dưỡng đội tuyển học sinh giỏi ngày càng cao hơn, giúp giáo viên dễ


3


dàng hơn trong việc tìm bài, tạo code, test, giúp học sinh giải quyết được nhiều bài hơn
để rèn luyện các kĩ năng cần thiết.
Sáng kiến được xây dựng không thể tránh khỏi thiếu sót, kinh nghiệm của bản
thân cũng cịn hạn chế nên tơi rất mong nhận được sự đóng góp ý kiến từ các đồng
nghiệp để sáng kiến này hoàn thiện hơn.
2. Nội dung giải pháp đề nghị cơng nhận là sáng kiến
2.1. Mục đích của sáng kiến
Kết quả thi học sinh giỏi của học sinh không chỉ là cơng sức của giáo viên mà
cịn là sự nỗ lực học tập, tự học tập và rèn luyện không ngừng của học sinh. Đặc biệt,
với môn Tin học, do đặc thù thi lập trình trên máy tính, học sinh cần phải có kỹ năng
lập trình, kỹ năng nộp và chấm bài trên phần mềm chuyên dụng. Vì vậy, trong sáng kiến
này tơi trình bày một số giải pháp đặc thù nhằm nâng cao chất lượng bồi dưỡng học sinh
giỏi mơn Tin học như sau:
• Đối với giáo viên: Biết cách sinh test tự động; biết thiết lập hệ thống chấm
bài online qua mạng cục bộ LAN và WAN.
• Đối với học sinh: Biết cách rèn luyện kĩ năng lập trình và các kĩ năng cần thiết
khác khi thi học sinh giỏi môn Tin học.
2.2. Nội dung giải pháp
2.2.1. Đối với giáo viên
a. Sinh test tự động bằng tiện ích
Hai tiện ích sau có thể sử dụng để sinh test một cách nhanh chóng, tiện lợi, phạm
vi Test được điều chỉnh dễ dàng để phù hợp với các giới hạn mà đề bài ra.


Tiện ích sinh test của thầy Tơ Sơn.




Tiện ích sinh test Test Maker.

Chú ý:
• Chỉ có thể sinh test đúng khi có sẵn bài code chuẩn, chạy đúng. Nếu giáo viên
quen sử dụng ngơn ngữ Pascal thì dùng Tiện ích sinh test của thầy Tơ Sơn sẽ
dễ dàng hơn; nếu dùng C++ thì nên sử dụng Test Maker.
• Các tiện ích trên là hồn tồn miễn phí (tải về theo đường link tại mục 7)
• Hướng dẫn sử dụng có thể xem phần phụ lục hoặc theo đường link.

4


b. Thiết lập hệ thống chấm bài online qua mạng LAN
Có một số Web server được sử dụng để giao và chấm bài qua mạng LAN như:
JUDGER, Themis Web... Tôi xin trình bày về JUDGER vì cài đặt và sử dụng đơn giản
hơn, đối với Themis Web có thể tham khảo thêm ở phần phụ lục.
• Đầu tiên, giáo viên cần chuẩn bị:
- Đề bài, chương trình và test của mỗi bài tập.
- Cài đặt sẵn phần mềm chấm Themis.
• Tải về JUDGER (theo đường link ở mục 7) và bung nén vào ổ C hoặc D
• Cấu hình JUGDER và Themis
- Thêm tài khoản học sinh: Trong thư mục JUDGER đã giải nén được, mở
thư mục www, mở thư mục data, mở file account.xml, sau đó nhập thơng tin tài khoản
cho học sinh như hình sau:

Hình 1. Thơng tin tài khoản học sinh
- Cấu hình thư mục chứa bài làm trực tuyến của học sinh: Trong thư mục
JUDGER đã giải nén được, mở thư mục www, mở file config.php và cấu hình
theo nhu cầu hoặc theo hình sau:


Hãy nhớ địa chỉ thư mục này

Hình 2. File config.php cấu hình JUDGER

5


Lưu ý: Một vài thơng số ví dụ như: $contestName, $description, $problemsFile...
có thể sửa theo thực tế người dùng, cịn các thơng số khác khơng khuyến khích thay đổi.
- Cấu hình thư mục chấm bài trực tuyến trên Themis: Vào phần cài đặt của
Themis, nhập đường dẫn thư mục lưu bài trực tuyến của học sinh đã cấu hình trong file
config.php của JUDGER như hình sau:

1

2

3
Hình 3. Cấu hình Themis
• Cách chấm bài Online qua LAN:
- Trong thư mục JUDGER đã giải nén được, khởi động UniController.exe,
nhấn chọn Start Apache để biến máy tính giáo viên thành Server.
- Khởi động Themis, nạp danh sách bài thi, thí sinh như chấm thi Offline.
- Cung cấp địa chỉ IP máy giáo viên cho học sinh.
- Trên máy tính của mình, học sinh khởi động trình duyệt web, nhập địa chỉ IP
của máy giáo viên, đăng nhập theo tài khoản đã được cấp sẵn, lấy đề bài, làm, nộp bài,
nhận kết quả và xem thứ hạng.

Hình 4. Học sinh đăng nhập vào hệ thống chấm bài


6


Hình 5. Các thơng tin trên hệ thống chấm bài online qua LAN

Hình 6. Bảng Rank trên hệ thống chấm bài online qua LAN
c. Thiết lập hệ thống chấm bài online trên mạng WAN
Có nhiều cách để thiết lập hệ thống chấm bài online qua mạng WAN, nhưng
đơn giản và dễ thực hiện nhất là cách sau:
- Sử dụng phần mềm Radmin VPN tạo mạng riêng ảo. Chương trình này cho
phép thiết lập kết nối bảo mật giữa các máy tính qua Internet cứ như thể các máy tính
này kết nối với nhau trên mạng LAN.
- Cả máy giáo viên và máy học sinh cùng cài đặt Radmin VPN.
- Máy giáo viên: Tạo phòng học trên Radmin VPN

7


Hình 7. Giáo viên tạo phịng học trên Radmin VPN
- Máy học sinh:
+ Học sinh gia nhập phòng học trên Radmin VPN theo thơng tin phịng
mà giáo viên cấp.

Hình 8. Học sinh đăng nhập phòng học trên Radmin VPN
+ Trên trình duyệt, gõ địa chỉ IP phịng học Radmin máy giáo viên để
vào trang web làm bài tập như với mạng LAN.

8



Học sinh dùng IP này
để đăng nhập vào
web bài tập

Danh sách thí sinh trong
phịng học

Hình 9. Học sinh đăng nhập vào Web server chấm bài online qua WAN
d. Tổ chức hoặc liên hệ cho học sinh tham gia các kì thi trực tuyến.
Cách này sẽ giúp các em rèn luyện kĩ năng làm bài theo thời gian thực. Có cảm
nhận về áp lực thời gian, đầu óc sẽ trở nên nhanh nhẹn hơn nhiều. Hơn nữa, khi thật sự
thi đấu với những người khác, các em cũng sẽ có cảm xúc luyện tập hơn. Hiện nay, có
các kì thi trực tuyến như (Codeforces, TopCoder, Hackerrank, USACO, COCI), hoặc
các em cũng có thể tham gia các contest nhỏ do giáo viên thực hiện.
Ngồi ra, giáo viên có thể giới thiệu với học sinh đăng ký tài khoản trên các trang
uy tín cho phép chấm bài online để rèn luyện kĩ năng lập trình như:
1. o/
2. />3. />
9


2.2.2. Đối với học sinh
Giáo viên cần hướng dẫn học sinh xây dựng kế hoạch học tập và rèn luyện các
kĩ năng cần thiết trong q trình ơn tập và thi học sinh giỏi mơn Tin học.
a. Có kế hoạch học tập của bản thân.
Đầu tiên, muốn việc học thật sự có hiệu quả thì mục đích, nhiệm vụ và kế hoạch
học tập phải được xây dựng cụ thể, rõ ràng.
Học sinh phải xác định được mình học lập trình để làm gì? Học chỉ vì đam mê,
học để biết, học để đi thi học sinh giỏi cấp Tỉnh hay học để đi thi học sinh giỏi Tin cấp

Quốc gia hay với mục đích cao hơn…
• Nếu học với mục đích thi cấp Tỉnh: các em có thể tham khảo khung
chương trình thi học sinh giỏi Tin cấp tỉnh hàng năm.
• Nếu học với mục đích thi cấp Quốc gia: nội dung thi khá nhiều. Tuy nhiên,
có một số nội dung thường gặp trong các thì thi VOI những năm gần đây như: Duyệt
toàn bộ, chia để trị, tham lam, quy hoạch động, đồ thị, toán học, xử lý xâu, hình học tính
tốn… Ngồi ra cịn một số kĩ thuật khác rất quan trọng như: kĩ thuật sắp xếp, kĩ thuật
quay lui nhánh cận, kĩ thuật sử dụng các cấu trúc dữ liệu đặc biệt, các kĩ thuật khó và
hiếm gặp…
Sau khi xác định được mục đích và nội dung kiến thức cần học, học sinh sẽ lựa
chọn cho mình một ngơn ngữ lập trình để học tập và rèn luyện.
• Nếu học với mục đích thi cấp Quốc gia hoặc cao hơn: Các em có thể sử
dụng ngơn ngữ lập trình C++, C++ đưa ra ưu thế rõ rệt về tốc độ, bao gồm cả tốc độ
chạy của chương trình và tốc độ lập trình ra chương trình đó. Đặc biệt, khi học C++ các
em có thể tham gia được rất nhiều kỳ thi lập trình trực tuyến trên mạng. Đây là mấu chốt
thành công trong kỳ thi quốc gia.
• Nếu học với mục đích thi cấp Tỉnh: các em có thể học ngơn ngữ lập trình
Pascal/C++, theo chương trình Tin học của nhà trường.
Từ đó, kết hợp với kế hoạch của giáo viên học sinh lên kế hoạch tự học, nhưng
kế hoạch vạch ra phải thực tế và linh hoạt. Sắp xếp hợp lý, đề ra thời gian học từng nội
dung và phải tuân thủ nghiêm túc.
b. Làm thật nhiều bài để rèn luyện các kĩ năng
• Kĩ năng đọc đề

10


Đọc hiểu đề là kĩ năng đầu tiên cần sử dụng khi nhìn vào một bài tốn. Khi đọc
đề cần đọc kĩ từng câu, từng chữ trong các đoạn văn bản chính thức, các ví dụ hay hình
vẽ minh họa chỉ để làm rõ thêm ý trong văn bản. Trường hợp ví dụ minh họa có chỗ

khơng khớp với văn bản, người giải bài cần phải làm theo những gì mô tả trong văn bản
- cái dành cho mô tả mọi trường hợp bài tốn mà khơng nên làm theo ví dụ minh họa cái mà chỉ đại diện cho một trường hợp ví dụ.
Cấu trúc đề bài thường bao gồm các phần theo trình tự sau:
✓ Kiến thức cơ sở của bài toán;
✓ Các dữ kiện và yêu cầu của bài tốn;
✓ Mơ tả khn dạng dữ liệu vào và ra;
✓ Ví dụ khn dạng vào ra;
✓ Các hạn chế cho các test của bài toán.
Nhiều bài toán, việc đọc kĩ từng câu, từng chữ, từng định nghĩa, từng mơ tả là rất
quan trọng, bỏ sót hoặc nhầm ý nào đó có thể sẽ dẫn đến sai tồn bộ bài.
• Kĩ năng phân loại bài tốn
Sau khi đã hiểu đề, cơng việc tiếp theo là phải nhanh chóng phân loại được bài
tốn thuộc dạng nào. Thơng thường mỗi bài tốn thuộc vào một dạng chính nhất định.
Tuy nhiên có nhiều bài là sự kết hợp của nhiều dạng khác nhau.
✓ Một người giải bài sau khi đọc đề sẽ gặp phải một trong ba tình huống sau:
✓ Loại A: Đã giải quyết loại bài toán này trước đây;
✓ Loại B: Đã gặp loại bài toán này nhưng chưa giải quyết được;
✓ Loại C: Chưa bao giờ gặp loại bài tốn này.
Vậy để có thể xác định nhanh được loại bài tốn, từ đó rút ra được thuật tốn tối
ưu, học sinh nên luyện tập để:
✓ Tăng số lần rơi vào trường hợp loại A, giảm số lần rơi vào trường hợp B;
✓ Luyện tập với các bài toán mang tính cổ điển để tăng khả năng tư duy
thuật tốn;
✓ Phát triển khả năng phân tích bài tốn để phát hiện những điểm đặc biệt,
mấu chốt của bài tốn.
• Kĩ năng phân tích thuật tốn

11



Khi thiết kế thuật toán giải bài, điều quan trọng là phải đánh giá được chi phí của
thuật tốn về thời gian và bộ nhớ, đồng thời kiểm tra chi phí đó có thỏa mãn u cầu đề
bài hay khơng.
Nếu có nhiều cách để giải bài tốn thì hãy chọn thuật toán mà bản thân thấy cài
đặt đơn giản nhất mà vẫn đủ thỏa mãn yêu cầu, nghĩa là đúng và đủ nhanh trong giới
hạn thời gian của đề bài. Tuy nhiên, trong quá trình luyện tập, khi mà thời gian làm bài
khơng bị giới hạn, thì hãy cố gắng tìm cách giải bài tốn bằng thuật tốn tốt nhất. Đó là
cách chuẩn bị hiệu quả thực sự cho tương lai khi phải đối mặt với bài tốn khó hơn.
Ví dụ 1.
Bình thường lời giải với độ phức tạp là O(n4) là một thuật toán tồi. Tuy nhiên nếu
bài toán có giới hạn kích thước đầu vào n ≤ 50 thì số lượng phép tính thực hiện tối đa là
cx504 = cx6.25 triệu phép tính, với c là hệ số lập trình thơng thường rất nhỏ. Thuật tốn
này là chấp nhận được, thời gian chạy của nó sẽ dưới 1 giây vì đa phần máy tính hiện
nay có thể thực hiện được ít nhất 100 triệu phép tính trong 1 giây.
Ví dụ 2.
Bài tốn có giới hạn kích thước đầu vào n ≤ 106, hạn chế thời gian là 2 giây. Có
hai thuật tốn A và B giải đúng bài với độ phức tạp khác nhau:
Thuật tốn A: có độ phức tạp O(n2), số lượng phép tính ước lượng thực hiện tối
đa là cx102 và sẽ mất hàng trăm giây để thực hiện, không thể thỏa mãn yêu cầu đề bài.
Thuật tốn B: có độ phức tạp O(nlogn), số lượng phép tính ước lượng thực hiện tối
đa là cx106xlog(106) ≈ cx1.7x106, thời gian chạy test lớn nhất sẽ dưới 1 giây.
Tuy nhiên, ngồi độ phức tạp thuật tốn, cần phải lưu ý một số loại độ phức tạp
khác không trực tiếp liên quan đến thời gian tính của thuật tốn chính như: tính tốn
lượng lớn các phép tốn dấu phẩy động, có số lượng lớn các vịng lặp con, hoặc có quá
nhiều truy xuất vào ra... Trong các trường hợp đó thì chương trình sẽ mất nhiều thời
gian hơn dự kiến.
• Kĩ năng làm chủ ngơn ngữ lập trình
Lợi ích sử dụng Pascal và C++ gần như tương đương nhau nếu như khơng sử
dụng thư viện lập trình chuẩn.
Thư viện lập trình giúp cho người lập trình hồn thiện chương trình nhanh và ít

lỗi hơn. Các thư viện chuẩn đã được cộng đồng lập trình dùng rất nhiều nên có thể nói

12


việc sử dụng trực tiếp là tương đối dễ dàng, khơng có lỗi và kĩ thuật cài đặt tối ưu, việc
vận hành chỉ cần gọi một dòng lệnh đơn giản là xong.
Mặt hạn chế của việc dùng thư viện chuẩn đó là khả năng tùy biến của thư viện
khơng linh hoạt. Rất nhiều kỹ thuật xử lý thuật tốn khơng thể gọi trực tiếp thư viện mà
phải tùy biến đi.
Ví dụ: Nếu gọi hàm sắp xếp của thư viện thì sau khi sắp xếp, thông tin về chỉ số vị trí
ban đầu các phần tử trong mảng sẽ bị mất, muốn lưu giữ lại thơng tin này thì phải tùy
biến hàm sắp xếp với kiểu dữ liệu cấu trúc struct sử dụng thêm một trường để lưu giữ
lại thông tin về vị trí ban đầu và phải sửa lại tốn tử so sánh cho trường chính của biến
cấu trúc.

Vì vậy, nếu khơng thành thạo từng thư viện lập trình thì khi sử dụng rất dễ gặp
phải lỗi và khó debug do khơng hiểu kĩ và khó can thiệp được vào phần code thuật tốn
chính của thư viện đó. Ngồi ra, nếu thường xuyên dùng thư viện mà quên mất các thuật
tốn cơ bản và kĩ thuật cài đặt của nó thì sẽ rất khó khăn khi phải tự cài đặt lại thuật tốn
đó. Rất nhiều tình huống trong khi giải bài không thể dùng trực tiếp thư viện mà buộc
phải tự cài đặt lại các thuật tốn cơ bản.
• Kĩ năng gõ nhanh
Hãy tập luyện để đánh máy nhanh và chính xác, đừng để tốc độ gõ code là điểm
yếu của bản thân. Đây là kĩ năng dễ dàng luyện tập thành thục nhất trong tất cả các kĩ
năng. Luyện tập sao cho khi đánh máy khơng nhìn vào bàn phím, mắt nhìn vào màn
hình kiểm tra ln tính đúng đắn của việc gõ, trong lúc đó đầu vẫn có thể suy nghĩ song
song các vấn đề tiếp theo.
• Kĩ năng test chương trình
Sau khi viết code chương trình xong, vấn đề tiếp theo rất quan trọng là kiểm

nghiệm tính đúng đắn của chương trình. Một trong những kĩ thuật quan trọng để làm

13


điều đó là viết chương trình kèm với tạo bằng tay bộ test kiểm tra chương trình. Dưới
đây là một số kinh nghiệm test chương trình:
✓ Bộ test nên bao gồm cả ví dụ đầu vào và đầu ra trong đề bài để đảm bảo chương
trình đưa ra kết quả với khn dạng chính xác.
✓ Với bộ dữ liệu nhiều test (multi test), hãy thêm trường hợp bộ dữ liệu vào có 2
bộ test giống hệt nhau và kiểm tra kết quả ra có giống nhau khơng nhằm loại bỏ
trường hợp quên khởi tạo lại trong chương trình.
✓ Bộ test xây dựng nên bao gồm những test khó và những test biên như những trường
hợp kích thước dữ liệu vào nhỏ nhất, ví dụ n = 0, n = 1 hoặc những trường hợp kích
thước dữ liệu đạt giá trị lớn nhất để kiểm tra các lỗi tràn bộ nhớ, quá giới hạn.
✓ Quan sát kĩ đến định dạng kết quả ra của chương trình, vì có thể những trường hợp
như dấu cách hay dấu xuống dịng cũng có thể làm chương trình ra kết quả sai.
c. Tiếp thu những kinh nghiệm khi đi thi
Trong những năm bồi dưỡng học sinh giỏi Tin học, có những học sinh có q
trình học tập rất tốt, nhưng khi đi thi kết quả khơng tốt, thậm chí cịn bị mất hết điểm.
Vì thi học sinh giỏi Tin cấp Tỉnh hay Quốc gia đều chấm bài tự động bằng phần mềm
Themis do thầy Lê Minh Hồng và Đỗ Đức Đơng phát triển, nên trong quá trình học các
em cũng phải tìm hiểu về phần mềm này, thậm chí phải hiểu rõ và sử dụng thành thạo
để có thể tự chấm cho mình hoặc cho nhóm bạn. Ví dụ, các em khơng bỏ dấu // ở phần
mở đóng file, sai tên file hay khai báo tràn mảng... những trường hợp này Themis sẽ
không cho điểm.
Để đạt kết quả thi tốt, việc học tập và rèn luyện tốt các kĩ năng giải bài là đương
nhiên, nhưng kinh nghiệm phịng thi cũng quyết định khơng nhỏ tới kết quả này. Sau
đây là một số kinh nghiệm các em cần biết trước khi đi thi:
• Cố gắng tạo một tâm lý thoải mái nhất trước và trong khi thi.

• Khi đã ổn định vị trí ngồi thi, làm các thủ tục trước thi, chờ đến giờ bóc và phát
đề, các em có thể code trước cấu trúc form cho chương trình.
• Khi cầm một tờ đề, các em cần đọc kĩ, hiểu đề một cách chính xác, suy nghĩ tất
cả các bài trước khi làm, sau đó mới quyết định sẽ làm bài nào trước. Mỗi đề thi gồm 3
bài, bài đầu tiên thường là dễ để học sinh có thể kiếm điểm. Nguyên tắc làm bài: “Bài
dễ làm trước, khó làm sau”, “Làm bài nào chắc bài đó”, “Giữ chắc điểm các subtask dễ
cịn quan trọng hơn làm được bài khó”.

14


• Với mỗi bài, các em có thể dành 10-15 phút để tìm thuật tốn tốt nhất mình có thể
cài đặt, sau đó nếu cịn dư thời gian có thể quay lại cải tiến tiếp, phải luôn luôn cải tiến
chương trình cho đến khi nào hết thời gian. Sau khi làm xong mỗi bài, cần phải kiểm tra
lại chương trình trước khi chuyển sang bài khác. Để kiểm tra chương trình, cách tốt nhất
là test thật nhiều, cố gắng ăn nhiều test, đúng càng nhiều trường hợp càng tốt. Lúc này kĩ
năng test chương trình mà các em đã rèn luyện phải được phát huy hiệu quả.
• Suy nghĩ thì phải cẩn thận, nhưng khi đặt tay xuống làm bài thì phải làm bài thật
nhanh, khơng chần chừ do dự.
• Khi chương trình chạy cho ra kết quả sai, cần sửa lỗi (debug) chương trình. Hãy
tận dụng hiệu quả các công cụ debug của CodeBlocks như watches, breakpoint, sử dụng
tốt các phím tắt F4, F7, F8. Thơng thường chương trình sẽ bị một vài lỗi nhỏ như viết sai
tên biến trong một biểu thức, thiếu một đoạn xử lý,… Có thể xảy ra trường hợp phát hiện
cả thuật toán sai, nhất là đối với những bài có thuật tốn đúng đắn thì điều này là hồn
tồn có thể. Khi đó cần bình tĩnh tính tốn xem xác suất đúng đắn của chương trình có
cao khơng, có nên làm tiếp bài tốn đó hay khơng? Đừng bao giờ để bị vướng vào một
bài tốn q lâu, nếu thấy lo lắng vì đã dành nhiều thời gian cho một bài mà vẫn cho kết
quả sai, hãy tạm thời chuyển sang bài khác. Trong trường hợp cần thay đổi tồn bộ chương
trình, nhớ backup chương trình cũ vào một bản khác, phịng khi cần sử dụng lại.
• Đặc biệt chú ý đến việc đặt tên file chương trình và file INPUT, OUTPUT. Nên

làm những việc này trước khi tiến hành lập trình. Chú ý các giới hạn của đề bài để khai
báo mảng hay biến số, tránh các lỗi như tràn mảng hay tràn bộ nhớ, không đặt giới hạn
mảng bé hơn ràng buộc của đề bài và không dùng mảng quá 1GB. Và khi thời gian thi
còn lại 10 phút, nên kiểm tra lại mọi thứ để đảm bảo khơng có sai sót đáng tiếc nào về
những file sắp ghi lên đĩa. Ví dụ như: freopen chứ khơng phải froepen hay //freopen,
debug đã được xóa sạch và test ví dụ đã đúng.
• Thỉnh thoảng hãy sao lưu bài vào nhiều thư mục, nhiều ổ đĩa khác nhau phịng khi
có sự cố kĩ thuật. Lưu các bài nộp vào một nơi riêng, tránh nộp nhầm bài.
• Khi có hiệu lệnh trống hết giờ làm bài, tắt ngay màn hình, copy bài làm ra đĩa
CD và in code ra giấy theo hướng dẫn của giám thị coi thi.
Tóm lại, với mỗi bài tốn trong kì thi lập trình, đầu tiên ta phải đọc hiểu đề một
cách chính xác, sau đó tìm cách thiết kế, phân tích thuật tốn và cấu trúc dữ liệu cần sử
dụng. Bước tiếp theo là chuyển lời giải thành chương trình càng nhanh càng tốt dưới áp

15


lực thời gian và kết quả, đồng thời chương trình chạy cần không sinh lỗi và phải ra kết
quả đúng trong thời gian hạn chế. Để làm tốt điều đó, kinh nghiệm của những lập trình
viên đạt giải cao trong các kì thi lập trình là phải đam mê luyện tập tất cả các kĩ năng
nêu trên ở càng nhiều bài toán càng tốt. Cần phải rèn luyện thường xuyên để giữ được
cảm hứng và phát triển các kĩ năng lập trình giải bài. Cuối cùng, giữ được tâm lý tốt và
có được may mắn trong các kì thi cũng là một vấn đề quan trọng.
3. Khả năng áp dụng của giải pháp
Sáng kiến có thể áp dụng cho giáo viên Tin học tại các trường Trung học phổ
thông của tỉnh Yên Bái trong công tác bồi dưỡng học sinh giỏi cấp tỉnh mơn Tin học.
4. Hiệu quả, lợi ích thu được hoặc dự kiến có thể thu được do áp dụng giải pháp
Sáng kiến này được tôi tiến hành áp dụng ở trường THPT Chuyên Nguyễn Tất
Thành từ đầu năm học 2020-2021, đến nay đã thu được các kết quả khá tốt:
- Giáo viên tạo test cho các bài tập đơn giản hơn, các bài tập chất lượng hơn.

- Vì thời gian làm bài được rút ngắn nên số lượng bài tập giải quyết được ngày
càng nhiều hơn. Ví dụ, với 100 bài tập lập trình cơ bản:
+ Với học sinh đội tuyển 10 (2017-2018): Khi chưa áp dụng sáng kiến thì phải
mất 20 buổi học mới giải quyết hết.
+ Với học sinh đội tuyển 10 (2020 - 2021): Khi áp dụng sáng kiến thì chỉ mất
10 buổi học đã giải quyết hết.
- Học sinh có hướng, có cơ sở nên có thể chủ động bổ sung cho mình những phần
kiến thức chưa vững hoặc tự làm các bài tập cùng dạng để rèn luyện kĩ năng, thậm chí
tự học những phần kiến thức mở rộng mà vì điều kiện thời gian giáo viên chưa thể đề
cập tới… Các em được rèn luyện và truyền đạt những kinh nghiệm phịng thi, nên giảm
đáng kể những sai sót đáng tiếc xảy ra trên bài làm của mình.
- Khi áp dụng cho đội tuyển của trường THPT chuyên Nguyễn Tất Thành: Giải
học sinh đạt được cao hơn cả về số lượng và chất lượng.
Năm học

Giải cấp Tỉnh

Giải QG

Số giải

Nhất

Nhì

Ba

KK

KK


2020-2021

8

01

02

01

4

01

2021-2022

10

01

03

01

5

03 (dự kiến)

16



5. Những người tham gia tổ chức, áp dụng sáng kiến lần đầu
Họ và tên

Nơi cơng tác (hoặc
nơi thường trú)

Chức
danh

Trình độ
chuyên
môn

Nội dung
công việc hỗ
trợ

Nguyễn Thị Thu Hiền

Trường THPT Lý
Thường Kiệt

Giáo
viên

Đại học

Thử nghiệm


2

Nguyễn Đức Hiếu

Trường PT dân tộc
nội trú THPT tỉnh
Yên Bái

Giáo
viên

Đại học

Thử nghiệm

3

Phạm Thị Quyên

Trường THPT Chu
Văn An

Giáo
viên

Đại học

Thử nghiệm


Số
TT
1

6. Các điều kiện cần thiết để áp dụng sáng kiến
Để áp dụng tốt sáng kiến này, giáo viên cần tâm huyết với cơng tác bồi dưỡng
học sinh giỏi, cịn học sinh thì đam mê học lập trình. Giáo viên là người luôn luôn đồng
hành cùng các em, định hướng, giảng dạy, quan sát, kiểm soát và giúp đỡ các em vượt
qua những giai đoạn khó khăn trong q trình học tập.
Các phần mềm và tiện ích áp dụng cần phải được cài đặt. Nếu giáo viên muốn
chấm bài online qua mạng LAN thì các máy tính phải được kết nối mạng LAN, chấm
bài online qua mạng WAN thì các máy tính phải được kết nối mạng Internet.
Máy tính của học sinh cũng nên được kết nối mạng Internet để các em có thể tự
học, tự rèn luyện kĩ năng lập trình trên các trang chấm bài online.
7. Tài liệu gửi kèm
Các tiện ích, phần mềm, hướng dẫn cài đặt và sử dụng được áp dụng trong sáng
kiến; quyết định công nhận học sinh giỏi cấp tỉnh năm 2021-2022 được đặt trong thư
mục theo đường link sau:
/>III. Cam kết không sao chép hoặc vi phạm bản quyền
Tôi xin cam kết không sao chép hoặc vi phạm bản quyền.
Yên Bái, ngày 17 tháng 1 năm 2022
Người viết báo cáo

Nguyễn Hồng Nhung

17


PHỤ LỤC
1. Cách sinh test bằng tiện ích sinh test của thầy Tơ Sơn


Hình 1. Giao diện tiện ích sinh test của thầy Tô Sơn
Bước 1, phải đảm bảo chắc chắn là máy tính đã cài đặt phần mềm Free Pascal
(với C++ phải cài đặt trước Code Blocks hoặc MinGW), sau đó cài đặt biến mơi trường
PATH.
Ví dụ: cài đặt biến môi trường đối với Pascal (làm tương tự đối với C++):

Hình 2. Thiết lập biến mơi trường
Chú ý: Sau khi cài đặt xong biến môi trường hãy khởi động lại máy tính.
Bước 2: Chuẩn bị file code chuẩn (sinh ra file .OUT từ file .INP) và file code
sinh test (file này sinh ra file .INP).
Ví dụ: Với đề bài như sau:
Cho hai số nguyên dương A và B, hãy tính tổng A+B.
Dữ liệu nhập: Từ file văn bản CONG.INP gồm hai số nguyên A, B (|A|, |B|
< 109), A và B cách nhau một khoảng trắng.

18


Dữ liệu xuất: Ghi vào file văn bản CONG.OUT số nguyên duy nhất là tổng
của A và B
Giới hạn:
- 30% với (|A|, |B| < 103)
- 30% với (|A|, |B| < 105)
- 40% với (|A|, |B| < 109)
Nếu cần sinh ra các file CONG.INP và CONG.OUT thì:
✓ File code chuẩn của giáo viên phải có tên là CONG.PAS và
✓ File sinh test là R_CONG.PAS
(Ví dụ này sử dụng ngơn ngữ lập trình là Pascal)



File R_CONG.PAS có nội dung như sau:

// Chuong trinh Tao cac file Input cua Ban giam khao
{$MODE OBJFPC}
program RandomTest;
const
Prefix = 'CONG.INP';
// max = 1000;
// max = 100000;
max = 1000000000;
procedure GenTest(const FName: String);
var
f: Text;
A, B: longint;
begin
Randomize;
assign(f, FName); rewrite(f);
try
A := Random(max) + 1;
B := Random(max) + 1;
WriteLn(f, A, '
', B);
finally
close(f);
end;
end;
procedure Gen09_AZ;
var
c: Char;

begin

Chú ý:
- Nên điều chỉnh max để lấy được các test giới hạn khác nhau theo đề bài.
- Chỉ cần sửa nội dung nằm giữa 2 phần try và finally ở chương trình với các đề
bài khác.

19




File code chuẩn của giáo viên như sau:

var fi, fo:text;
a,b,c: longint;
begin
assign(fi,'CONG.INP');reset(fi);
assign(fo,'CONG.OUT');rewrite(fo);
readln(fi,a,b);
c := a + b;
}
write(fo,c);
close(fi);
close(fo);
end.

Bước 3: Copy file sinh test và file code chuẩn của giáo viên vào cùng thư mục
với tiện ích ở trên.
Bước 4. Bật tiện ích lên và nhập các thông số đầu vào:

– Số lượng test. Ví dụ: cần sinh tự động 20 test
– Test bắt đầu từ: Ví dụ, nếu bắt đầu từ 1 mà sinh ra 20 test thì sẽ có 20 test từ
Test01, Test02,… Test20. Còn nếu bắt đầu từ 2 với 20 Test thì tên các Test đánh số là
Test02, Test03,…, Test21. Giá trị mặc định cho giá trị ở ô này là 1 (bắt đầu số thứ tự
của test là 1).
– Tên file sinh test (Input): File này sẽ tự động sinh các dữ liệu ngẫu nhiên. Ví
dụ: R_CONG.PAS
– Tên file chạy của Giáo viên (Output): File này sẽ từ Input mà sinh ra Output.
(Đây là file chuẩn của Giáo viên). Ví dụ: CONG.PAS
- Sau đó kích vào Run: Ta thu được bộ 20 test như mong muốn.

Hình 3. Sử dụng tiện ích sinh test của thầy Tơ Sơn cho bài tốn tính tổng hai số ngun

20


2. Cách sinh test bằng Test Maker

Hình 4. Giao diện Test Maker
1.

Chọn thư mục chứa test sắp sinh

2.

Chọn chương trình sinh file input, chương trình phải được dịch sẵn ra exe, tất
nhiên, ngơn ngữ lập trình nào cũng được.

3.


Chọn chương trình sinh file output từ file input (như là bài làm bình thường)

4.

Chọn chương trình chấm để Test Maker tự động copy vào thư mục chứa test (tự
động đổi tên theo quy định của AMM2)

5.

Nội dung thư mục chứa test đã chọn ở phần (1)

6.

Tên của bộ test gồm Prefix-ID, mục này cho chỉnh sửa prefix

7.

ID – số hiệu bộ test bắt đầu

8.

ID – Số hiệu bộ test kết thúc

9.

Độ dài ID, điền số 0 vào đầu cho đủ

10. Check nếu muốn sinh file input
11. Check nếu muốn sinh file output
12. Check nếu muốn copy chương trình chấm

13. Thanh tiến trình (progress bar) thể hiện mức độ hồn thành của quá trình sinh
test
14. Bắt đầu sinh test
15. Ngắt quá trình sinh test đang diễn ra
16. Kết thúc
17. Biên bản sinh test
Cách sử dụng: Cần tự viết chương trình sinh input và file nguồn sinh output, dịch các
chương trình ra file exe, sau đó chọn các mục 1, 2, 3… và ấn 14.

21


Ví dụ: Bằng cách sử dụng ngơn ngữ lập trình C++, vẫn với bài tính tổng hai số nguyên
A và B.
Bước 1. Giáo viên tạo file sinhinput.cpp để sinh file input theo đề bài như sau:
#include <bits/stdc++.h>
#include <sstream> // for std::ostringstream
#include <string>
// for std::string
#include <unistd.h>
using namespace std;
const string baseFolderName = "test";
const int
// m = 1e3;
// m = 1e5;
m = 1e8;
const int d = 11;
const int c = 20;
Điều chỉnh dữ liệu file input
void create_test(char myfolder[],int id)

theo đề bài
{
freopen(myfolder,"w",stdout);
int a = rand() % m + 1;
int b = rand() % m + 1;
cout << a << ' ' << b;
}
int main()
{
Điều chỉnh số lượng test
srand(time(NULL));
cần tạo
for (int i = d; i <= c; ++i)
{
ostringstream folderName;
if (i < 10)
folderName << baseFolderName + "0" << i;
else
folderName << baseFolderName << i;
mkdir(folderName.str().c_str());
char filename[20];
strcpy(filename, folderName.str().c_str());
strcat(filename,"\\cong.inp");
create_test(filename, i);
}
Tên file input cần tạo
return 0;
}

Lưu ý: Giáo viên nên tạo ra file input bằng cách chạy file này trước khi dùng Test

Maker, để chủ động hơn khi tạo ra các file input theo giới hạn đề bài.
Bước 2. Giáo viên tạo file nguồn CONG.CPP (nếu chưa có)
Bước 3. Chạy file nguồn CONG.CPP để thu được file chạy CONG.EXE.
Bước 4. Khởi động Test Maker và nhập các thông số cần thiết như hình sau:

22


Nhập đường
dẫn đến file
chạy
CONG.EXE

Hình 5. Sử dụng Test Maker sinh test cho bài tốn tính tổng hai số ngun
Cuối cùng, ta thu được số lượng test với giới hạn như mong muốn.
3. Hướng dẫn thiết lập hệ thống chấm bài online qua LAN sử dụng Themis Web

Hình 6. Giao diện Themis Web
Bước 1:
✓ Download XAMPP (ver 5.6.40 của XAMPP tương thích nhất với Phần mềm)
và cài đặt.
✓ Download rồi Copy và giải nén phần mềm Themis Web vào thư mục
C:\xampp\htdocs
Bước 2: Bật dịch vụ Apache của XAMPP.
Bước 3: Tạo thư mục: C:\nopbai và trong thư mục nopbai tạo thư mục Logs
Chú ý: Chữ cái L trong từ Logs phải viết hoa
Bước 4: Tạo tên đăng nhập và mật khẩu cho Học sinh ở file
C:\xampp\htdocs\data\account.xml (mở bằng Excel)

23



Bước 5: Vào địa chỉ http://127.0.0.1 để đăng nhập theo tên đăng nhập và mật khẩu lấy
từ file account ở trên (không nên gõ localhost)
Bước 6: Mở Phần mềm Themis của TS. Lê Minh Hồng rồi cấu hình như sau:
✓ Nạp danh sách Bài thi (bộ Test) như bình thường
✓ Nạp danh sách Thí sinh tại thư mục: C:\nopbai (danh sách có thể trống)
✓ Gõ F11 để thiết lập mơi trường. Tại phần Thư mục nộp bài trực tuyến điền:
C:\nopbai\
✓ Kích Chấm bài/Quét thư mục nộp bài trực tuyến
Bước 7: Thực hiện các thiết lập
✓ Tắt tường lửa của Windows
✓ Đặt mạng ở chế độ Public
✓ Vào cmd gõ ipconfig để lấy địa chỉ IP máy chủ cung cấp cho Học sinh
Bước 8: Xem kết quả
✓ Thí sinh nộp bài và xem kết quả tại địa chỉ IP máy chủ do Giáo viên cung
cấp
✓ Giáo viên lấy kết quả chấm điểm trên phần mềm Themis (ở máy chủ)
✓ Nếu có cảnh báo, lỗi (nếu có) thì vào file C:\xampp\php\php.ini và cấu hình:
display_errors=Off (sau đó nhớ khởi động lại dịch vụ Apache của XAMPP)
Lưu ý: Có thể kết hợp Themis Web với Radmin VPN để chấm bài online qua mạng WAN.

24


×