PHÒNG GIÁO DỤC VÀ ĐÀO TẠO HUYỆN HIỆP HÒA
TRƯỜNG THCS ĐỨC THẮNG
----------------***-----------------
SÁNG KIẾN KINH NGHIỆM
“PHÁT HIỆN, SỬA MỘT SỐ LỖI THƯỜNG GẶP CỦA
HỌC SINH ĐỘI TUYỂN TIN HỌC KHI DẠY LẬP
TRÌNH PASCAL”
Lĩnh vực áp dụng: Giáo dục và đào tạo
Họ tên GV: Bùi Đức Thịnh
Chức vụ: Tổ trưởng chuyên môn
Đơn vị công tác: Trường THCS Đức thắng
Hiệp Hoà – Bắc Giang.
Hiệp Hòa, tháng 4 năm 2023
MỤC LỤC
PHẦN I. MỞ ĐẦU...................................................................................... 2
I. LÍ DO VIẾT SÁNG KIẾN ...................................................................... 3
II. MỤC ĐÍCH NGHIÊN CỨU .................................................................. 3
III. ĐỐI TƯỢNG, PHẠM VI NGHIÊN CỨU............................................ 3
1. Đối tượng................................................................................................. 3
2. Phạm vi.................................................................................................... 4
IV. NHIỆM VỤ NGHIÊN CỨU................................................................. 4
V. PHƯƠNG PHÁP NGHIÊN CỨU.......................................................... 4
VI. NHỮNG ĐÓNG GÓP MỚI CỦA SÁNG KIẾN.................................. 4
PHẦN II. NỘI DUNG VÀ KẾT QUẢ NGHIÊN CỨU ............................. 5
I. CƠ SỞ LÍ LUẬN VÀ THỰC TIỄN ........................................................ 5
1. CƠ SỞ LÍ LUẬN .................................................................................... 5
2. CƠ SỞ THỰC TIỄN ............................................................................... 6
II. THỰC TRẠNG CỦA SÁNG KIẾN ...................................................... 6
III. CÁC GIẢI PHÁP THỰC HIỆN ........................................................... 6
Giải pháp 1: ................................................................................................. 6
Giải pháp 2: ................................................................................................. 8
Giải pháp 3: ................................................................................................. 9
Giải pháp 4: ................................................................................................. 10
Giải pháp 5: ................................................................................................. 11
Giải pháp 6: ................................................................................................. 13
Giải pháp 7: ................................................................................................. 14
Giải pháp 8: ................................................................................................. 15
IV. HIỆU QUẢ CỦA SÁNG KIẾN KINH NGHIỆM ............................... 16
PHẦN III. KẾT LUẬN, KIẾN NGHỊ ........................................................ 17
I. KẾT LUẬN.............................................................................................. 17
II. KIẾN NGHỊ............................................................................................ 18
1
PHẦN I. MỞ ĐẦU
I. LÝ DO VIẾT SÁNG KIẾN.`
Chuyển đổi số là xu hướng phát triển tất yếu, mở ra nhiều cơ hội, tác động
mạnh mẽ đến mọi mặt của đời sống kinh tế, xã hội, song cũng đặt ra khơng ít
thách thức đối với các cấp, các ngành, địa phương. Những năm qua, tỉnh Bắc
Giang đã có sự quan tâm đẩy mạnh ứng dụng công nghệ thông tin (CNTT), xây
dựng chính quyền điện tử. Ban Thường vụ Tỉnh ủy đã ban hành Nghị quyết số
433-NQ/TƯ ngày 04/5/2019 về phát triển CNTT trên địa bàn tỉnh giai đoạn 2019-
2025 trên ba trụ cột là phát triển kết cấu hạ tầng CNTT, xây dựng các hệ thống
phần mềm CNTT đồng bộ và nâng cao chất lượng nguồn nhân lực CNTT.
- Trong 9 lĩnh vực nghi quyết ưu tiên thực hiện thì lĩnh vực giáo dục là
một trong những ưu tiên hàng đầu để xây dựng các hệ thống phần mềm CNTT
đồng bộ và nâng cao chất lượng nguồn nhân lực CNTT. Cụ thể là phát triển nền
tảng hỗ trợ dạy và học từ xa, ứng dụng triệt để công nghệ số trong công tác quản
lý, giảng dạy và học tập; số hóa tài liệu, giáo trình; xây dựng nền tảng chia sẻ tài
nguyên giảng dạy và học tập theo cả hình thức trực tiếp và trực tuyến; phát triển
công nghệ phục vụ giáo dục, hướng tới đào tạo cá thể hóa; ứng dụng công nghệ
số để giao bài tập về nhà và kiểm tra sự chuẩn bị của học sinh trước khi đến lớp
học. (Trích nghị quyết số 111/NQ-TƯ ngày 11/06/2021 của Ban Chấp Hành Đảng
Bộ Tỉnh về chuyển đổi số tỉnh Bắc Giang giai đoạn 2021-2025, định hướng đến
2030)
Trên tinh thần đó hàng năm Phịng GD & ĐT Hiệp Hịa tổ chức hội thi
Olympic Tin học cho học sinh THCS. Các em dự thi sẽ phải tham gia thi hai vòng:
Vòng thứ nhất: Thi trắc nghiệm (thời gian 30 phút) – Kiến thức chung về máy
tính, tin học văn phịng, internet và lập trình Pascal. Với những kiến thức này thì
các em đã được tiếp thu trên lớp qua các bài học. Đồng thời các em cũng có thể
thu thập thêm những kiến thức đó qua sách báo, qua các phương tiện thơng tin,
qua truy cập Internet. Vì đó chỉ là những kiến thức thông qua: Đọc, nghe và quan
2
sát… là các em có thể hiểu và ghi nhớ được. Do vậy, ở vòng thi này đa số các em
làm được và đạt điểm khá cao. Còn vòng thi thứ hai: Thi lập trình (thời gian 90
phút) – Viết chương trình bằng ngơn ngữ Pascal (Free Pascal). Với phần thi này
các em phải lập trình dể giải các bài tốn bằng ngơn ngữ Pascal. Trong khi đó,
những kiến thức để các em có thể dự thi phần này lại được học theo chương trình
mơn tự chọn cho học sinh khối 8. Vậy để học sinh có thể tự tin khi thi phần thực
hành là một giáo viên Tin học tôi phải suy nghĩ và trăn trở rất nhiều là làm thế
nào cho các em phải nắm chắc cú pháp các câu lệnh, phát huy được tính tích cực,
chủ động, tự lực, sáng tạo của học sinh; rèn được kỹ năng thực hành thành thạo,
biết vận dụng kiến thức, kỹ năng giải quyết các bài toán thực tiễn và nhất là nâng
cao được chất lượng học sinh giỏi tin học cấp Huyện.
Với những lý do trên khiến tôi quyết định chọn giải pháp: “Phát hiện, sửa
một số lỗi thường gặp của học sinh đội tuyển tin học khi dạy lập trình Pascal”.
II. MỤC ĐÍCH NGHIÊN CỨU.
Với nhiều năm bồi dưỡng đội tuyển học sinh giỏi tin học, tơi nhận thấy rằng
trong vịng thi thực hành của hội thi Olympic tin học THCS dạng đề thi có sử
dụng ngơn ngữ lập trình Pascal để giải các bài tốn là khơng thể thiếu. Đây là một
dạng bài khó. Gặp dạng toán này, phần lớn học sinh rất lúng túng và mất nhiều
thời gian để cố nhớ xem bài này đã được thầy, cô giáo làm như thế nào, học sinh
rất khó hình dung ra cách giải (thuật tốn) cũng như cách trình bày đúng. Với
phần lập trình viết trên ngơn ngữ lập trình Pascal chỉ cần sơ xuất nhỏ như: thiếu
dấu phẩy, dấu chấm, dấu mở ngoặc hoặc dấu chấm phẩy… chứ chưa nói đến thuật
tốn có đúng hay khơng thì cũng sinh ra lỗi và máy khơng chạy được. Như vậy,
với vòng thi lý thuyết các em đạt điểm cao nhưng vòng thi thực hành để đạt được
điểm cao là rất khó.
Mục tiêu đặt ra là: “Phát hiện, sửa một số lỗi thường gặp của học sinh
đội tuyển tin học khi dạy lập trình Pascal”.
III. ĐỐI TƯỢNG, PHẠM VI NGHIÊN CỨU
1. Đối tượng
- Một số lỗi trong bài tốn lập trình pascal của học sinh đội tuyển tin học.
3
2. Phạm vi.
- Sáng kiến được nghiên cứu ở các đội tuyển tin học của nhà trường và
đội tuyển tin học trẻ của huyện năm học 2022-2023.
IV. NHIỆM VỤ NGHIÊN CỨU.
Nhằm giúp học sinh tìm ra được lỗi sai thường gặp khi viết chương trình
trên ngơn ngữ lập trình pascal và biết sửa các lỗi này, nâng cao thêm về mặt kiến
thức, kỹ năng thực hành, vận dụng giải quyết được các bài toán hướng đến đạt kết
quả cao nhất trong các kỳ thi Olympic Tin học. Nâng cao chất lượng và hiệu quả
đối với công tác bồi dưỡng học sinh giỏi tin học cấp huyện và cấp tỉnh.
V. PHƯƠNG PHÁP NGHIÊN CỨU.
- Phương pháp thực hành
VI. NHỮNG ĐÓNG GÓP MỚI CỦA SÁNG KIẾN.
“Phát hiện, sửa một số lỗi thường gặp của học sinh đội tuyển tin
học khi dạy lập trình Pascal”.
PHẦN II. NỘI DUNG VÀ KẾT QUẢ NGHIÊN CỨU.
I. CƠ SỞ LÍ LUẬN VÀ THỰC TIỄN.
1. CƠ SỞ LÍ LUẬN.
Phương pháp được hiểu là con đường, là cách thức để đạt những mục tiêu
nhất định.
Phương pháp dạy học là cách thức hoạt động và giao lưu của thầy gây nên
những hoạt động và giao lưu cần thiết của trò nhằm đạt được mục tiêu dạy học.
Phương pháp nâng cao chất lượng là cách thức tiến hành các hoạt động dạy
học để nâng cao quá trình tiếp thu bài của học sinh.
2. CƠ SỞ THỰC TIỄN.
- Lập trình Pascal là nội dung khó, tư duy trừu tượng để học sinh học tập
4
tốt cần người giáo viên phải có những phương pháp dạy học tích cực, đổi
mới phù hợp với đối tượng học sinh, điều kiện, phương tiện, thiết bị dạy và
học của nhà trường, giáo viên và học sinh.
II. THỰC TRẠNG CỦA SÁNG KIẾN.
1. Ưu Điểm.
- Về phía nhà trường: Cán bộ quản lý nhà trường quan tâm, tạo điều kiện
thuận lợi cho giáo viên và học sinh về cơ sở vật chất – thiết bị dạy học, chỉ đạo
chuyên môn sát sao, kịp thời triển khai các văn bản chỉ đạo, hướng dẫn về công
tác bồi dưỡng học sinh giỏi (BDHSG) cấp huyện. Luôn quan tâm, giúp đỡ, động
viên khuyến khích giáo viên thực hiện các giải pháp đổi mới nâng cao chất
lượng BDHSG.
- Về cơ sở vật chất: Có các thiết bị tương đối đảm bảo cho dạy bồi dưỡng
các đội tuyển tin học (Máy chiếu, Smart TV, máy tính có kết nối internet…).
Nhà trường có 2 phịng máy tính phục vụ cho dạy và học tin học.
- Về học sinh đối với đối tượng học sinh khá giỏi, đa phần các em rất hào
hứng với việc lập trình, cụ thể là ngơn ngữ lập trình Pascal. Với những đề thi đã
được học và luyện nhiều lần các em làm bài rất tốt và nhanh. Những bài các em
đã học thuộc thì bài làm đúng như đáp án đến từng dấu, chấm dấu phẩy. Nhất là
các em đội tuyển tin 6 được thầy cho học thuộc các hàm như hàm kiểm tra số
nguyên tố, hàm đếm số các số, hàm tính tổng các chữ số của một số…. để giải
quyết một số bài toán, do được học thuộc nhiều dạng bài và đề thi cũng tương tự
nên qua một số kì thi học sinh các đội tuyển đạt được kết quả khá cao.
2. Hạn chế và nguyên nhân hạn chế.
2.1. Giáo viên
- Biện pháp cũ thường làm là cho học sinh học thuộc các bài mà thầy cô đã
dạy và luyện lại các đề thi nhiều lần.
- Bản thân giáo viên còn chưa nhận thức được mơn học lập trình Pascal địi
hỏi người thầy phải hướng học sinh đến tư duy, sáng tạo và đặc biệt là khả năng
tự học tự nghiên cứu. Chưa hướng dẫn học sinh vẫn dụng kiến thức đã học giải
quyết những bài tốn phát triển từ bài tốn đã có, đồng thời phát hiện và sửa các
lỗi của chương trình.
2.2. Học sinh
5
- Chú trọng học thuộc các bài thầy cô đã dạy từ dấu chấm, dấu phẩy nên
không biết dịch và sửa lỗi. Khi đi thi các em mất nhiều thời gian để nhớ lại xem
những bài nào đã được học thuộc.
- Khả năng tư duy, sáng tạo bị hạn chế do cách học thụ động dẫn dến sai
thuật toán.
- Với học sinh đội tuyển tin, nội dung học lập trình Pascal là một nội dung
lạ với nhiều khái niệm, thuật ngữ, cấu trúc dữ liệu mà học sinh tiếp xúc lần đầu.
Chính vì vậy mà học sinh dễ mắc sai lầm khi lập trình giải quyết các bài tốn.
Ngun nhân dẫn đến những khó khăn mà học sinh thường gặp là rất phong phú
nhưng có thể thấy một số nguyên nhân chính sau đây:
+ Học sinh thường gặp khó khăn khi xác định bài toán.
+ Khó liên hệ phương pháp giải một bài tốn trong toán học với thuật giải
trong tin học.
+ Thụ động, chỉ học thuộc các bài giải sẵn.
+ Không nhận biết được lỗi xảy ra hoặc không biết cách sửa lỗi.
=> Yêu cầu đặt ra: Tìm ra một số lỗi phổ biến các em thường mắc phải
và cách sửa các lỗi này.
III. CÁC GIẢI PHÁP THỰC HIỆN
Dựa trên nhưng thuận lợi có được, tơi đã xây dựng và thực hiện các giải pháp để
hướng tới giải quyết mục tiêu đã đặt ra ban đầu: Hướng dẫn học sinh đội tuyển
tin học phát hiện và sửa “Một số lỗi sai thường gặp trong lập trình Pascal”.
1. Biện pháp 1: Chưa hiểu thứ tự ưu tiên phép toán.
*Trong một biểu thức pascal, thứ tự ưu tiên của các phép toán được liệt kê theo
thứ tự sau:
• Lời gọi hàm.
• Dấu ngoặc ()
• Phép tốn một ngơi (NOT, -).
• Phép tốn *, /, DIV, MOD, AND.
• Phép tốn +, -, OR, XOR
• Phép toán so sánh =, <, >, <=, >=, <>, IN
Ví dụ 1: Viết chương trình nhập vào một số nguyên dương n từ bàn phím
sao cho 4 < n ≤1000000, tính tổng S và in kết quả ra màn hình (lấy đến 3 chữ số
phần thập phân).
6
S = 1.2 + 2.3 + 3.4 + ... + N ( N +1)
3.4 4.5 5.6 ( N + 2)( N + 3)
Ví dụ:
Input S = 2.462 Output
N = 6
- Khi chạy chương trình của học sinh khơng báo lỗi sai mà cho ra kết quả của bài
toán sai. Các em mắc lỗi sai khi chuyển từ biểu thức tốn học sang biểu thức
Pascal khơng thực hiện đúng thứ tự ưu tiên các phép toán trong pascal ở phép chia
của tử số cho mẫu số (tử số chỉ chia cho (i+2), không chia cho (i+3)), do chủ quan
từ việc máy đã tính ra kết quả và học sinh khơng kiểm tra lại bằng máy tính cầm
tay. Để sửa lỗi sai này, giáo viên yêu cầu các em thực hiện đúng thứ tự ưu tiên
các phép toán trong pascal, sau đó dùng máy tính cầm tay để tính kết quả trên giấy
bút đối chiếu với kết quả của chương trình từ đó sửa lại thứ tự thực hiện các phép
toán trong pascal cho đúng.
Chương trình lỗi Chương trình đúng
Program bai1; Program bai1;
Uses crt; Uses crt;
Var Var
N,i:word; N,i:word;
S:real; S:real;
Begin Begin
Clrscr; Clrscr;
Repeat Repeat
Write(‘Nhap n=’); readln(n); Write(‘Nhap n=’); readln(n);
Until (n>4) and (n<=100); Until (n>4) and (n<=100);
S:=0; S:=0;
For i:=1 to n do For i:=1 to n do
S := s + i*(i+1)/(i+2)*(i+3); S := s + i*(i+1)/((i+2)*(i+3));
Write(‘Tong la: ’,s:6:3); Write(‘Tong la: ’,s:6:3);
Readln; Readln;
End. End.
7
2. Biện pháp 2: Sử dụng dấu “;” sai vị trí.
- Trước Else khơng có dấu chấm phẩy. Đây là lỗi thường gặp với học sinh mới
học lập trình Pascal (đội tuyển tin 6). Các em cho rằng đã hết câu nên đặt dấu
chấm phẩy. Chương trình sẽ báo lỗi ở vị trí trước Else.
- Cách sửa: Xóa dấu “;” trước Else.
Ví dụ 2: Tuổi cha hiện nay là b tuổi, tuổi con là c tuổi (b-c>0, và b, c là các
số nguyên dương). Hãy viết chương trình (với b, c được nhập từ bàn phím) để
kiểm tra xem tuổi cha có gấp đơi tuổi con hay khơng? Nếu đúng thì đưa ra màn
hình thơng báo “hiện nay tuổi cha gấp đơi tuổi con”; trường hợp ngược lại, hãy
tính số năm (trước đó hoặc sau đó) tuổi cha gấp đơi tuổi con và đưa ra thông báo
“số năm trước đây tuổi cha gấp đôi tuổi con” hay “số năm sau tuổi cha sẽ gấp đơi
tuổi con”.
- Khi viết chương trình giải bài tốn trên học sinh sẽ mắc lỗi với dấu “ ; ” trước
Else.
- Giáo viên: hướng dẫn học sinh phát hiện lỗi sai sau khi chạy chương trình. Vị
trí con trỏ báo lỗi trước “Else” và cách khắc phục xoá dấu “ ; ” trước Else.
Chương trình như sau:
Chương trình lỗi Chương trình đúng
Program so_sanh_tuoi; Program so_sanh_tuoi;
Uses crt; Uses crt;
Var b,c: Integer; Var b,c: Integer;
Begin Begin
Clrscr; Clrscr;
Repeat Repeat
Write(‘Nhap tuoi cha:’); Write(‘Nhap tuoi cha:’);
Readln(b); Readln(b);
Write(‘Nhap tuoi con:’); Write(‘Nhap tuoi con:’);
Readln(c); Readln(c);
If (b-c<=18) and (b<0) and (c<0) If (b-c<=18) and (b<0) and (c<0)
then write(‘ban phai nhap lai’); then write(‘ban phai nhap lai’);
Until ((c>0) and (b>c) and (b- Until ((c>0) and (b>c) and (b-
c>18)); c>18));
If b=2*c then writeln(‘hien nay If b=2*c then writeln(‘hien nay
tuoi cha gap doi tuoi con’); tuoi cha gap doi tuoi con’)
Else Else
If b>2*c then writeln(‘sau’,b-2*c,
‘nam tuoi cha gap doi tuoi con’)
8
If b>2*c then writeln(‘sau’, b- Else
2*c, ‘nam tuoi cha gap doi tuoi Writeln(2*c-b,’ nam truoc day
con’); tuoi cha gap doi tuoi con’);
Else Readln
Writeln(2*c-b,’ nam truoc day End.
tuoi cha gap doi tuoi con’);
Readln
End.
3. Biện pháp 3: Không phân biệt được hằng xâu và biến.
- Đến đây thì các em học sinh đã không mắc lỗi với dấu “;” trước Else,
tuy nhiên trong chương trình học sinh cần phải chú ý hằng xâu đặt trong cặp
nháy đơn còn biến thì khơng cần đặt trong cặp nháy đơn.
Ví dụ 3: Viết chương trình nhập vào họ tên, điểm văn, điểm tốn, điểm
anh văn của 1 học sinh. Sau đó in ra màn hình: họ tên, điểm trung bình, xếp lọai
của học sinh đó (trên 1 dịng). Cho biết:
- Điểm trung bình = (điểm văn + điểm tốn + điểm anh văn) / 3
- Xếp loại:
+ Giỏi, nếu điểm trung bình >= 9.0 và khơng có điểm dưới 6.5;
+ Khá, nếu 7.0 <= điểm trung bình < 9.0 và khơng có điểm dưới 5;
+ Trung bình, nếu 5.0 <= điểm trung bình < 7.0 và khơng có điểm dưới 3.5;
+ Yếu, nếu điểm trung bình < 5.0
- Trong chương trình trên học sinh thường không đặt hằng xâu vào trong nháy
đơn mà viết như với biến chương trình. Giáo viên cần hướng dẫn học sinh đưa
hằng xâu vào trong nháy đơn để chương trình đúng:
Chương trình lỗi Chương trình đúng
Program Xep_loai_HS; Program Xep_loai_HS;
Uses crt; Uses crt;
Var t,v,a,dtb,min: real; Var t,v,a,dtb,min: real;
Xl:string; Xl:string;
Write(‘moi nhap diem toan:’); Write(‘moi nhap diem toan:’);
Readln(t); Readln(t);
Write(‘moi nhap diem van:’); Write(‘moi nhap diem van:’);
Readln(v); Readln(v);
Write(‘moi nhap diem anh Write(‘moi nhap diem anh
van:’); Readln(a); van:’) Readln(a);
dtb:=(t+v+a)/3;
9
Min:=t; dtb:=(t+v+a)/3;
If min>v then min:=v; Min:=t;
If min>a then min:=a; If min>v then min:=v;
if (dtb>=9) and (min>=6.5) If min>a then min:=a;
then xl:=Gioi if (dtb>=9) and (min>=6.5) then
else if (dtb>=7) and (min>=5) xl:='Gioi'
then xl:=kha else if (dtb>=7 and (min>=5)
else if (dtb>=5) and then xl:='kha'
(min>=3.5) else if (dtb>=5) and (min>=3.5)
then xl:=Trung binh else then xl:='Trung binh' else
xl:=yeu; xl:='yeu';
write(‘Ho va ten ’, hoten,' write(‘Ho va ten ’, hoten,' Diem
Diem trung binh: ',dtb:0:1,' Xep loai: trung binh: ',dtb:0:1,' Xep loai: ',xl);
',xl); readln;
readln; end.
end.
4. Biện pháp 4: Sử dụng tên hàm làm biến cục bộ.
- Do lệnh trả kết quả cho tên hàm rất giống một lệnh gán bình thường nên
học sinh thường nhầm tên hàm là biến cục bộ. Vì vậy khi viết chương trình để
tiết kiệm biến cục bộ học sinh đã sử dụng tên hàm làm biến cục bộ.
- Để tránh lỗi này cần lưu ý với học sinh: để trả kết quả cho hàm, tốt nhất
nên tính kết quả hàm vào một biến cục bộ, trước khi kết thúc ta mới gán tên hàm
bằng giá trị biến này để trả giá trị cho hàm.
Ví dụ 4: Tính tổng các chữ số của n (n là số nguyên dương nhập từ bàn
phím).
Chương trình lỗi Chương trình đúng
Program Tong_chu_so; Program Tong_chu_so;
Uses crt; Uses crt;
Var n: int64; Var n: int64;
Function tong(n:int64):int64; Function tong(n:int64):int64;
Begin Var t:int64;
Begin
repeat
tong:=tong+ n mod 10; t:=0;
n:=n div 10; repeat
Until n=0; t:=t+ n mod 10;
End; n:=n div 10;
Begin Until n=0;
10
Clrscr; tong:=t;
Repeat End;
Write('nhap n='); Readln(n); Begin
Until n>0;
Writeln('Tong cac chu so cua Clrscr;
',n,' la :',tong(n):5); Repeat
Readln; Write('nhap n='); Readln(n);
End. Until n>0;
Writeln('Tong cac chu so cua
',n,' la :',tong(n):5);
Readln;
End.
5. Biện pháp 5: Tràn số do kết quả phép tính vượt quá giới hạn.
Ví dụ 5.1: Tính tổng s = 1! + 2! + 3! +…+n!. Với n là số ngun dương.
- Chương trình địi hỏi biến gt và s phải có miền giá trị rất lớn. Trong chương
trình của học sinh thường báo lỗi do miền giá trị của biến tham gia không đủ
lớn. Lỗi này do khai báo hàm trả về số nguyên (integer) nên miền giá trị tối đa là
32767. Có hai cách khắc phục là :
* Cách 1: Tăng miền giá trị của các biến tham gia CT (giữ nguyên vòng
for):
Chương trình lỗi Chương trình đúng
Program Tong_giai_thua; Program Tong_giai_thua;
Uses crt; Uses crt;
Var i,n,s: integer; Var s:extended; i,n:longint;
Function gt(n:integer):integer; Function gt(n:int64):extended;
Var i,t:integer; Var i:longint; t:extended;
Begin Begin
T:=1;
T:=1; For i:=1 to n do t:=t*i;
For i:=1 to n do t:=t*i; Gt:=t;
Gt:=t; End;
End;
Begin Begin
Clrscr; Clrscr;
Repeat Repeat
Write(‘nhap n = '); Readln(n); Write(‘nhap n = '); Readln(n);
Until n>0; Until n>0;
S:=0; S:=0;
For i:=1 to n do s:=s+gt(i); For i:=1 to n do s:=s+gt(i);
Writeln(‘Tong s=’, s:5); Writeln(‘Tong s=’, s:5);
Readln; Readln;
End. End.
11
* Cách 2: Thay vòng for …do bằng While....do đồng thời tăng miền giá trị của
các biến tham gia CT.
Chương trình lỗi Chương trình đúng
Program Tong_giai_thua;
Program Tong_giai_thua; Uses crt;
Var i, n :int64; S: extended;
Uses crt;
Function gt(n:int64):extended;
Var s,n,i: integer; Var T:extended; i:int64;
Begin
Function gt(n:integer):integer; T:=1; i:=1;
Var i,T:integer; While i<=n do
Begin Begin T:=T*i; i:=i+1; end;
gt:=T;
T:=1; End;
For i:=1 to n do t:=t*i; Begin
Gt:=T; Clrscr;
Repeat
End; Write(‘nhap n =’); Readln(n);
Begin Until n>0;
S:=0; i:=1;
Clrscr; While i<= n do
begin
Repeat S:= S + GT(i);
i:=i+1;
Write(‘nhap n =’); Readln(n); end;
Writeln('Tong S= ', S:2:2);
Until n>0; Readln;
End.
S:=0;
For i:=1 to n do s:=s+gt(i);
Writeln(‘Tong s=’, s:5);
Readln;
End.
Ví dụ 5.2: Viết chương trình tìm bội chung nhỏ nhất của hai số a và b. (a, b là
hai số nguyên dương nhập từ bàn phím).
- Chương trình của học sinh bị lỗi tràn bộ nhớ (exitcode = 215) khi chương trình
tính tích a*b. Khắc phục lỗi này bằng cách dùng dấu ngoặc () ưu tiên phép chia
lấy phần nguyên (lấy a hoặc b div ucln(a,)) trước sau đó thực hiện phép nhân.
Chương trình lỗi Chương trình đúng
12
Program boi_chung_nn; Program boi_chung_nn;
Uses crt; Uses crt;
Var a,b:word; Var a,b:word;
Function ucln(a,b:longint):longint; Function ucln(a,b:longint):longint;
Var r:longint; Var r:longint;
Begin Begin
while b<>0 do while b<>0 do
begin begin
r:=a mod b; r:=a mod b;
a:=b; a:=b;
b:=r; b:=r;
end; end;
ucln:=a; ucln:=a;
end; end;
Function bcnn(a,b:longint):longint; Function bcnn(a,b:longint):longint;
Begin Begin
bcnn:=a*b div ucln(a,b); bcnn:=a*(b div ucln(a,b));
end; end;
Begin Begin
Clrscr; Clrscr;
Write('nhap a= '); readln(a); Write('nhap a= '); readln(a);
Write('nhap b= '); readln(b); Write('nhap b= '); readln(b);
Write('bcnn cua hai so a va b Write('bcnn cua hai so a va b
la:',bcnn(a,b):5); la:',bcnn(a,b):5);
Readln; Readln;
End. End.
6. Biện pháp 6: Khai báo sai miền chỉ số cho dữ liệu mảng.
Ví dụ 6: Nhập vào một mảng n số nguyên gồm các số lớn hơn 100 và nhỏ
hơn 500. In mảng vừa nhập.
- Học sinh được học thuộc các bài tập về mảng nên sẽ làm bài giống như các
dạng đó mà khơng biết tư duy để giải quyết u cầu của bài toán là giá trị của
các phần tử phải lớn hơn 100 và nhỏ hơn 500. Chương trình thường dùng For
...do để nhập mảng (biến i không chạy được từ 1) và không can thiệp được vào
biến đếm i để nhập lại giá trị của a[i].
- Học sinh mắc lỗi khai báo mảng như sau:
Var a:array[100..500] of integer;
- Học sinh nhập mảng bằng for …do như sau:
13
write('nhap n='); readln(n);
for i:=1 to n do
begin
Write('a[',i,']='); Readln(a[i]);
end;
- Để sửa lỗi trên cho học sinh thì giáo viên hướng dẫn các em khai báo lại biến
mảng và dùng vòng lặp Repeat…Until để nhập mảng. Chương trình như sau:
Chương trình lỗi Chương trình đúng
Program nhap_mang; Program nhap_mang;
uses crt; uses crt;
var a:array[100..500] of longint; var a:array[1..100] of longint;
n,i:longint; n,i:longint;
begin begin
clrscr;
clrscr;
write('nhap n='); readln(n); write('nhap n='); readln(n);
for i:=1 to n do i:=0;
begin repeat
i:=i+1;
write('a[',i,']='); write('a[',i,']='); Readln(a[i]);
Readln(a[i]); if (a[i]<=100) or (a[i]>=500)
end; then i:=i-1;{khong thoa man nhap
Write(‘Cac phan tu cua lại}
mang:’); until i=n;
for i:=1 to n do write(a[i],' ');
Readln
end.
for i:=1 to n do write(a[i],' ');
Readln
end.
7. Biện pháp 7: Giá trị biến điều khiển vượt quá miền chỉ số của mảng.
Ví dụ 7: Viết chương trình nhập vào mảng gồm n phần tử (n<=100) sắp xếp các
phần tử theo thứ tự tăng dần và hiển thị các phần tử sắp xếp đó ra màn hình.
- Chương trình như sau:
14
Chương trình lỗi Chương trình đúng
Program Sap_xep; Program Sap_xep;
uses crt; uses crt;
var a: array[ 1.. 100] of longint; var a: array[ 1.. 100] of longint;
var i,j,n,tg: longint; var i,j,n,tg: longint;
begin begin
Clrscr; Clrscr;
Write( 'nhap so phan tu cua Write( 'nhap so phan tu cua
mang '); mang ');
Readln(n); Readln(n);
Writeln(' moi nhap cac phan tu Writeln(' moi nhap cac phan tu
cua mang '); cua mang ');
for i:=1 to n do for i:=1 to n do
begin begin
write('A', i,']= '); readln(a[i]); write('A', i,']= '); readln(a[i]);
end; end;
{sap xep day} {sap xep day}
for i:=0 to n-1 do for i:=1 to n-1 do
for j:=i+1 to n do for j:=i+1 to n do
if a[i]>a[j] then if a[i]>a[j] then
Begin Begin
tg:=a[i]; tg:=a[i];
a[i]:=a[j]; a[i]:=a[j];
a[j]:=tg; a[j]:=tg;
End; End;
writeln(' day sau khi sap xep la writeln(' day sau khi sap xep la
'); ');
for i:=1 to n do write( a[i]: 4); for i:=1 to n do write( a[i]: 4);
readln; readln;
End. End.
- Chương trình của học sinh mắc lỗi trong vịng For khi gán i:=0 khơng nằm
trong miền chỉ số của biến mảng ta cần gán lại i:=1.
8. Biện pháp 8: Khơng hiển thị kết quả khi chương trình khơng tìm được
giá trị thoả mãn đề bài.
Ví dụ 8: Viết chương trình tìm các số có ba chữ số sao cho số đó bằng n lần
tổng các chữ số của nó (n ngun dương được nhập từ bàn phím).
15
- Chương trình chỉ in ra kết quả khi tìm được số thoả mãn (với n>10), khi khơng
tìm được số thoả mãn (0
trả lời nếu đưa vào trong vòng For sẽ bị lặp theo số lần lặp của 3 vòng For.
- Cách sửa: dùng biến đếm d để đếm số lượng số thoả mãn. Nếu d>0 thì in ra số
tìm được và số lượng, ngược lại (d=0) thông báo không có số thoả mãn..
Chương trình lỗi Chương trình đúng
Program Tim_so; Program Tim_so;
uses crt; uses crt;
Var n,a,b,c:word; Var n,a,b,c,d:word;
Begin Begin
Clrscr; Clrscr;
Write(‘nhap n=’); Readln(n); Write('nhap n= '); Readln(n);
For a:=1 to 9 do d:=0;
For b:=0 to 9 do For a:=1 to 9 do
For c:=0 to 9 do For b:=0 to 9 do
For c:=0 to 9 do
If (100*a+10*b+c) = If (100*a+10*b+c) =
n*(a+b+c) then write(a,b,c); n*(a+b+c) then
Readln
End.
begin
write(a,b,c,'; ');
d:=d+1;
end;
writeln;
If d=0 then write('khong co so
thoa man') else write('co ',d,' so
thoa man');
Readln
End.
IV. HIỆU QUẢ CỦA SÁNG KIẾN KINH NGHIỆM.
1. Học sinh:
Sau nhiều năm áp dụng giải pháp, chất lượng và số lượng giải học sinh
giỏi môn tin học đã đạt được kết quả trong 3 năm gần nhất như sau:
+ Cấp huyện:
16
Năm học Số HS Số HS Giải Ghi chú
dự thi đạt giải KK
2020-2021 Nhất Nhì Ba
2021-2022 9 9 1 7
2022-2023 17 17 1 3 5 3
+ Cấp tỉnh: 16 15 1
3 6
Năm học
4 7
2020-2021
2022-2023 Số HS Số HS Giải Ghi chú
dự thi đạt giải KK
Nhất Nhì Ba
4 4 1 2
5 4 1 2
1 1
2. Giáo viên:
* Với thành tích đạt được của các đội tuyển học sinh giỏi kể trên thì bản
thân đã đạt được một số thành tích sau:
- UBND Huyện tặng danh hiệu chiến sĩ thi đua cơ sở năm học 2020-2021
và năm học 2021-2022.
- Năm học 2020-2021 được UBND Huyện tặng giấy khen trong công tác
bồi dưỡng học sinh giỏi cấp tỉnh.
- Năm 2022 đạt giải nhì hội thi dành cho CBCC-VC chuyên về CNTT
tỉnh Bắc Giang.
PHẦN III. KẾT LUẬN, KIẾN NGHỊ.
I. KẾT LUẬN.
- Trên đây là SKKN : “Phát hiện, sửa một số lỗi thường gặp của học sinh
đội tuyển tin học khi dạy lập trình Pascal”.
Tơi đã và đang áp dụng SKKN dạy các đội tuyển tin học của trường THCS
Đức Thắng, đội tuyển tin học trẻ của huyện Hiệp Hoà và đạt được những kết
quả nêu trên. Vì thời gian tìm hiểu, xây dựng và thực hiện biện pháp đổi mới
chưa nhiều, năng lực bản thân có hạn nên khơng tránh khỏi những hạn chế. Rất
mong nhận được những góp ý xây dựng của hội đồng đánh giá sáng kiến kinh
nghiệm các cấp để giải pháp của tơi hồn thiện và mang lại hiệu quả cao hơn
nữa.
17
II. KIẾN NGHỊ
Để nâng cao chất lượng dạy bồi dưỡng đội tuyển tin học tơi có một số đề
xuất như sau:
•Các cấp lãnh đạo cần quan tâm hơn nữa đến cơ sở vật chất của các Nhà
trường. Nên trang bị đầy đủ các phòng thực hành. Mỗi phịng thực hành có đầy
đủ máy tính, tivi, máy chiếu để phục vụ hoạt động dạy học. Các bậc cha mẹ học
sinh quan tâm hơn, đầu tư máy tính cho con em học môn tin học.
•Tăng cường cho các giáo viên giảng dạy mơn Tin học được tiếp thu các
chuyên đề, các phần mềm mới phục vụ cho công việc giảng dạy.
•Tăng cường cho giáo viên được tham gia học bồi dưỡng các chuyên đề về
phương pháp giảng dạy bồi dưỡng học sinh giỏi đội tuyển tin học các cấp.
* Cam kết: Tơi cam đoan những điều trình bầy trên đây là đúng sự thật và
không sao chép hoặc vi phạm bản quyền.
THỦ TRƯỞNG ĐƠN VỊ Thị Trấn Thắng, ngày 26/04/2022
(ký tên, đóng dấu) Người viết SKKN
Bùi Đức Thịnh
18