PHẦN I: ĐẶT VẤN ĐỀ
I. LÍ DO CHỌN ĐỀ TÀI
Thế kỉ XXI là thế kỉ của Công nghệ thông tin và truyền thông. Vì vậy việc
trang bị những kiến thức Tin học là một vấn đề có ý nghĩa và tầm quan trọng rất
lớn đối với quá trình đào tạo nhân lực, bỗi dưỡng nhân tài cho đất nước.
Xác định được tầm quan trọng đó nên từ năm 2006 môn Tin học đã được
bộ Giáo dục-Đào tạo đưa vào giảng dạy ở các cấp học, nhằm trang bị cho học
sinh những kiến thức cơ bản, phổ thông về ngành khoa học Tin học. Đặc biệt là
trong chương trình SGK Tin học lớp 11 bậc THPT, các nhà biên soạn sách đã
đưa vào các chương bài giúp học sinh tiếp cận được với ngôn ngữ lập trình bậc
cao. Qua đó giúp các em hình dung được sự ra đời, cấu tạo, hoạt động cũng như
ích lợi của các chương trình hoạt động trong máy tính. Từ đó khơi gợi ở các em
niềm đam mê đối với bộ môn Tin học, tạo niềm tin để các em có thể dễ dàng tự
định hướng, lựa chọn nghề nghiệp sau này.
Tuy vậy, khi thực hiện giảng dạy môn Tin học lớp 11 tại Trường THPT Lê
Lợi, tôi thấy rằng, việc học sinh lập trình giải các bài toán trên máy tính thường
gặp không ít khó khăn. Phần lớn các em đều gặp một số lỗi cơ bản về mặt cú
pháp và ngữ nghĩa. Trong khi đó để viết được một chương trình hoàn chỉnh thì
học sinh phải có tư duy logic về thuật toán, biết khai báo kiểu dữ liệu một cách
hợp lí, biết sử dụng các câu lệnh đúng cú pháp.
Bản thân tôi trong quá trình giảng dạy cũng đã cố gắng hướng dẫn học
sinh viết chương trình đúng với yêu cầu trên. Nhưng do thời lượng thực hành
trên lớp không nhiều mà phần lớn nhà các em không có máy vi tính nên các em
không được thực hành thường xuyên, dẫn đến các em vẫn mắc phải một số lỗi
cơ bản. Vì vậy, từ năm học 2011-2012 đến nay tôi đã tìm ra và áp dụng một số
biện pháp: “Hướng dẫn học sinh phát hiện và sửa lỗi cú pháp khi viết chương
trình bằng ngôn ngữ lập trình Pascal trong chương trình Tin học 11”. Trong
quá trình áp dụng, bản thân tôi tự thấy đã có những kết quả nhất định, muốn
được chia sẻ với các bạn đồng nghiệp. Hi vọng sẽ nhận được nhiều ý kiến bổ ích
để đề tài của tôi ngày một hoàn thiện hơn.
1
học nên chưa được giáo viên, phụ huynh và học sinh quan tâm đúng mức.
- Điều kiện phòng máy nhà trường chưa đáp ứng được 1 học sinh/máy,
các em còn phải ngồi chung 2 -3 em/máy dẫn đến hiệu quả của các tiết thực
hành chưa cao. Do đó việc nắm bắt nội dung các bài học bị hạn chế.
2
2
- Giáo viên hiếm khi được tham gia học bồi dưỡng các chuyên đề về
phương pháp giảng dạy môn Tin học.
2. Về phía giáo viên.
Có rất nhiều phương pháp dạy học tích cực nhưng đôi lúc áp dụng còn
khó khăn. Do nhiều nguyên nhân như: kinh nghiệm giảng dạy, đối tượng học
sinh, điều kiện trường lớp…
3.Về phía học sinh.
- Do đa phần học sinh trong trường là con em ở nông thôn nên Tin học
vẫn là một môn học mới mẻ và lạ lẫm. Phần lớn các em ít được tiếp xúc với máy
tính. Vì vậy việc áp dụng phương pháp dạy học phù hợp với bộ môn và với đối
tượng học sinh thực sự rất khó khăn.
- Học sinh trường THPT Lê Lợi hầu hết là học Ban khoa học tự nhiên nên
các em thường học lệch, đa phần các em chỉ chú trọng vào các môn thi Đại học.
- Khi viết chương trình học sinh thường mắc các lỗi cú pháp. Đó là lỗi mà
khi viết chương trình học sinh không tuân thủ đúng quy định của ngôn ngữ lập
trình như: Đặt sai các tên hằng, biến, tên chương trình …, viết sai các câu lệnh,
viết sai các từ khóa …
III. GIẢI PHÁP VÀ TỔ CHỨC THỰC HIỆN
1. Giải pháp
Xuất phát từ thực trạng trên, tôi nhận thấy nếu bản thân không không thay
đổi cách dạy nhằm giúp học sinh chủ động hơn trong quá trình tìm lỗi và sửa lỗi
thì học xong chương trình Tin học 11 có không ít học sinh vẫn chưa viết được
một chương trình hoàn chỉnh. Dẫn đến học sinh sẽ chán nản, ngày càng xa rời
môn Tin học. Vì vậy để khắc phục tình trạng trên tôi đã có một số giải pháp như
- Lỗi đặt tên hằng, tên biến trùng nhau. VD: Var a, A: byte; (Pascal
không phân biệt chữ hoa và chữ thường. Do đó a và A chỉ là một).
- Lỗi đặt tên hằng, tên biến, tên chương trình, không đúng qui định của
ngôn ngữ lập trình.
- Ngăn cách giữa các biến phải là dấu phẩy thì các em thường dùng dấu
chấm phẩy.
- Khi kết thúc câu lệnh không có dấu chấm phẩy.
- Khi viết từ khóa thường viết sai lỗi chính tả. VD: Const thì viết là
Cont, end thì viết là and, Real thì viết là Read,…
- Viết sai câu lệnh gán. VD: x := 0; thì viết là: x = 0;
- Khi viết hằng xâu thường quên không đặt hằng xâu vào giữa cặp dấu
nháy đơn.
- Khi viết thông báo ra ngoài màn hình thì các biểu thức lại cùng đặt
trong cặp dấu nháy đơn với hằng xâu kí tự.
4
4
- Khai báo biến thuộc kiểu dữ liệu này nhưng trong phần thân chương
trình lại dùng biến đó với kiểu dữ liệu khác dẫn đến sai kiểu. VD :
Khai báo biến a thuộc kiểu nguyên, nhưng trong phần thân chương
trình lại có câu lệnh a := a/2 ; (biểu thức a/2 là một số thực, biến a
thuộc kiểu nguyên nên không thể lưu trữ được giá trị thực).
- …
b) Biện pháp sửa lỗi.
* Tiết 7 bài 7: Các thủ tục chuẩn vào/ra đơn giản.
Ví dụ: Hãy viết chương trình đưa ra màn hình dòng thông báo: ‘Xin
chao cac ban hoc sinh lop 11A1 truong THPT Le Loi’
Các bước tiến hành như sau :
-Bước 1: Giáo viên chiếu chương trình đã viết sẵn cho học sinh quan sát (Ở
trường THPT Lê Lợi mỗi lớp học đều có máy chiếu).
Progam Viet thong bao ;
Program Giai_PTB2 ;
Uses Crt ;
Var a, b, c, D : Real ;
x1, x2: Real;
Begin
Clrscr;
Write(‘a, b, c: ’);
Readln(a,b,c);
D:= b * b – 4 *a*c;
x1:= (-b – sqrt(D)) / (2*a);
x2:= -b/a –x1;
write(‘x1= ’ , x1:6:2, ‘ x2= ’, x2:6:2);
readln;
end.
- Bước 2.
+ Yêu cầu học sinh thực hiện biên dịch chương trình để phát hiện và sửa lỗi.
Tuy là nhìn chương trình đã viết sẵn trong SGK để soạn thảo nhưng
chương trình các em soạn thảo vẫn mắc rất nhiều lỗi. Có rất nhiều nguyên nhân,
như kỹ năng soạn thảo chưa thành thạo dẫn đến sai lỗi chính tả, hay chưa nắm
vững cách viết một biểu thức, cách viết thông báo ra ngoài màn hình,…
+ Để học sinh tự sửa lỗi. Giáo viên quan sát, bao quát phòng máy, hỗ trợ cho
những học sinh yếu. Sau đó, giáo viên chiếu chương trình có các lỗi mà các em
6
6
chưa khắc phục được và những lỗi đa phần các em mắc phải. Giáo viên phân
tích nguyên nhân của từng lỗi và yêu cầu các em sửa lại trong chương trình của
mình. Sau đây là chương trình giáo viên chiếu lên màn chiếu:
Program Giai_PTB2 ;
Uses Crt ;
Var a, b, c, D : Read ;
nhiều biến: những giá trị này phải được gõ cách nhau bởi ít nhất một dấu cách
hoặc một kí tự xuống dòng (nhấn phím Enter)
7
7
2.2 Khắc phục những lỗi sai cơ bản trong chương III: ‘‘Cấu trúc rẽ nhánh
và lặp’’.
a) Các lỗi thường gặp.
- Viết thiếu các từ khóa như: then, do, downto, to…
- Điều kiện trong câu lệnh rẽ nhánh hay câu lệnh lặp không phải là biểu
thức logic.
- Câu lệnh trước từ khóa else có dấu chấm phẩy.
- Trong câu lệnh For…to …do thì giá trị đầu lại lớn hơn giá trị cuối hay
trong câu lệnh For… downto … do thì giá trị đầu lại nhỏ hơn giá trị
cuối.
- Trong câu lệnh lặp While … do không có câu lệnh làm thay đổi điều
kiện lặp. Do đó vòng lặp không thể dừng lại được.
…
b) Biện pháp sửa lỗi.
* Tiết 11 – Bài ‘‘Cấu trúc rẽ nhánh’ ’.
Ví dụ: Viết chương trình tìm nghiệm thực của phương trình bậc hai :
ax
2
+ bx + c = 0 (a # 0).
- Bước 1. Chiếu chương trình đã chuẩn bị sẵn cho cả lớp quan sát.
Program Vidu ;
Uses Crt ;
Var a, b, c, d :Real ;
x1, x2 : Real;
begin
clrscr;
Sửa lại là: writeln(‘Phuong trinh co hai nghiem ’,x1:6:2,x2:6:2);
+ Câu lệnh writeln(‘Phuong trinh co nghiem kep,’-b/2a); sai
Câu lệnh này có 2 lỗi sai: Thứ nhất, sai cách viết danh sách kết quả ra ngoài
màn hình (mã lỗi 26). Thứ hai, viết biểu thức chưa đúng với quy định của
Pascal (mã lỗi: 89).
Sửa lại là: writeln(‘Phuong trinh co nghiem kep’,-b/(2*a));
Giáo viên chỉnh sửa lại chương trình trên thành chương trình hoàn chỉnh:
Program Vidu ;
Uses Crt ;
Var a, b, c, d :Real ;
x1, x2 : Real;
begin
clrscr;
write(‘Moi nhap a, b, c: ’); Readln(a,b,c);
d := b * b – 4 * a*c;
if d < 0 then
writeln(‘Phuong trinh vo nghiem’);
else
begin
if d > 0 then
begin
x1 : = (-b – sqrt(d))/(2*a);
x2 :=(-b + sqrt(d))/(2*a);
writeln(‘Phuong trinh co hai nghiem ’, x1:6:2,x2:6:2);
end;
if d=0 then
9
9
writeln(‘Phuong trinh co nghiem kep ’,-b/(2*a));
End;
for i:=1 to n do
begin
write(‘Nhap phan tu thu ’, i,’ :’);
readln(a(i));
end;
max:=a[1]; cs:=1;
for i:=2 to n do
10
10
if a[i] > max then
begin
max:= a[i];
cs:=i;
end;
writeln(‘Gia tri lon nhat la: ’, max,’ tai vi tri: ’, cs) ;
readln
end.
- Bước 2. Chia lớp thành 4 nhóm. Yêu cầu các nhóm tìm lỗi sai có trong
chương trình ở trên.
- Bước 3. Đại diện các nhóm lên bảng trình bày kết quả.
- Bước 4. Giáo viên thực hiện biên dịch chương trình để học sinh thấy được
các lỗi sai và phân tích để học sinh hiểu được nguyên nhân vì sao sai.
Các lỗi sai trong chương trình trên là :
+ Trong khai báo biến mảng: Var A: aray[1 Nmax] of integer; có tới
2 lỗi sai. Một là, sai từ khóa Array chứ không phải là Aray (mã lỗi:3).
Hai là, chỉ số cuối Nmax chưa được xác định (mã lỗi:3). Lỗi này nhiều
học sinh vẫn không hiểu vì sao sai. Vì các em thấy trong SGK cũng
viết như vậy. Do đó giáo viên cần làm rõ để học sinh hiểu, Nmax trong
SGK đã có giá trị xác định là 250 nhờ đã khai báo hằng trước đó:
Const Nmax=250;
- Bước 6. Giáo viên đánh giá kết quả và cho điểm các nhóm.
2.4. Khắc phục những lỗi sai cơ bản trong chương V: “Tệp và thao tác với
tệp”
a) Các lỗi thường gặp.
- Quên không khai báo biến tệp.
- Quên không gắn tên tệp.
- Đường dẫn đến tệp sai.
- Không mở tệp để đọc hay ghi nhưng vẫn thao tác đọc/ghi tệp.
- Mở quá nhiều tệp.
- Thao tác trên tệp xong thì không thực hiện đóng tệp.
…
b) Biện pháp sửa lỗi.
Tiết 38 – Ví dụ làm việc với tệp.
Ví dụ: Cho tệp SO.INP chứa các số nguyên, các số cách nhau bởi dấu cách. Hãy
viết chương trình tính tổng các số nguyên dương có trong tệp ở trên, kết quả ghi
lên tệp SO.OUT.
- Bước 1. Chia lớp thành 4 nhóm. Nhiệm vụ của mỗi nhóm là giải quyết bài toán ở
trên.
- Bước 2. Giáo viên thu kết quả của các nhóm. Soạn thảo và chiếu kết quả của
một nhóm bất kì cho cả lớp cùng quan sát. Đây là chương trình của nhóm đó:
Program Vi_du;
Var f, g : Text;
n, s : integer ;
begin
asign(f, ‘SO.INP’) ;
S := 0 ;
12
12
while not eof(f) do
begin
if n > 0 then S :=S + n ;
end;
writeln(g, ‘Tong cac so duong co trong tep la: ’, s);
13
13
close(f); close(g);
end.
Giáo viên chạy thử chương trình cho học sinh quan sát.
Bước 4. Từ chương trình hoàn chỉnh ở trên, các nhóm tự đối chiếu với câu trả
lời của nhóm mình để hoàn chỉnh chương trình của nhóm.
2.5. Khắc phục những lỗi sai cơ bản trong chương VI: “Chương trình con
và lập trình có cấu trúc”
a) Các lỗi thường gặp
+ Không phân biệt được hàm và thủ tục.
+ Viết sai từ khoá hàm và thủ tục.
+ Trong hàm không có lệnh trả về giá trị cho hàm.
+ Gán giá trị của biến cho thủ tục.
+ Quên khai báo kiểu dữ liệu cho tên hàm.
…
b) Biện pháp sửa lỗi.
* Tiết 44 – Ví dụ về cách viết và sử dụng chương trình con.
Ví dụ: Viết chương trình thực hiện rút gọn phân số, trong đó có sử dụng hàm
tính ước chung lớn nhất của hai số nguyên.
- Bước 1. Giáo viên chiếu chương trình đã viết sẵn cho học sinh quan sát:
program Rut_gon;
var tuso, mauso, a: integer;
funtion UCLN(x,y:integer);
var sodu:integer;
begin
while y < > 0 do
lệnh này thiếu dấu “(” nhưng bản chất câu lệnh này sai vì đặt sai vị trí. Câu lệnh
gán giá trị cho tên hàm phải nằm trong chương trình con. Cụ thể nó phải nằm ở
ngay trên câu lênh end; kết thúc chương trình con.
- Bước 5. Chạy thử chương trình cho học sinh quan sát.
- Bước 6. Giáo viên đánh giá kết quả và cho điểm các nhóm.
IV. KIỂM NGHIỆM
Năm học 2011 – 2012 tôi được phân công giảng dạy 3 lớp 11 Ban khoa
học tự nhiên là: 11A3, 11A4, 11A5. Đề tài được thực hiện trên lớp 11A3 và đã
15
15
đạt được kết quả tốt. Năm học 2012 – 2013 tôi được phân công giảng dạy 8 lớp
11: 11A1, 11A2, 11A3, 11A4, 11A5, 11A8, 11A10, 11A11. Đề tài được triển
khai trên lớp 6 lớp: 11A1, 11A2, 11A3, 11A8, 11A10, 11A11. Với việc nghiên
cứu kĩ chương trình sách giáo khoa, tài liệu tham khảo, lựa chọn phương pháp
giảng dạy phù hợp nên những lớp được triển khai đề tài đã thu được kết quả
thực sự. Biểu hiện:Mức độ tập trung chú ý của lớp cao, học sinh tham gia một
cách tích cực, các em đã chủ động hơn, hứng thú hơn trong học tập, nhất là
trong các giờ thực hành.
Kết quả thu được rất khả quan. Ở các tiết kiểm tra tôi đã ra đề đối với tất cả
các lớp là tương đương nhau về độ khó. Nhưng kết quả ở các lớp không được
triển khai đề tài thấp hơn so với các lớp được triển khai đề tài. Cụ thể, với đề
kiểm tra học kì II, kết quả của các lớp như sau (xem trang bên):
16
16
+ Năm học 2011 – 2012:
17
17
LỚP
GIỎI KHÁ TB YẾU, KÉM
SL % SL % SL % SL %
19
LOẠI
PHẦN III: KẾT LUẬN VÀ ĐỀ XUẤT
I. KẾT LUẬN
Trên đây là kết quả của quá trình nghiên cứu của bản thân trong khoảng
thời gian từ năm 2011 đến nay. Khi áp dụng với đối tượng là học sinh vùng nông
thôn như học sinh trường THPT Lê Lợi tôi thấy đề tài thực sự có hiệu quả. Việc
“Hướng dẫn học sinh phát hiện và sửa lỗi cú pháp khi viết chương trình
bằng ngôn ngữ lập trình Pascal trong chương trình Tin học 11” đã giúp học
sinh không còn lúng túng hoặc mắc lỗi như trước đây. Điều đó đã giúp đa số học
sinh có hứng thú đối với việc lập trình nói riêng và bộ môn Tin học nói chung.
Tuy nhiên không có một biện pháp sửa lỗi cú pháp nào tối ưu nào dành
cho tất cả các tiết dạy. Vì thế, trong quá trình dạy học giáo viên cần biết phát
hiện và lựa chọn những biện pháp thích hợp đối việc sửa lỗi để các giờ học trở
nên sinh động hơn.
Lĩnh vực mà tôi nghiên cứu cũng chỉ áp dụng trong phạm vi hẹp, khó có
thể tránh khỏi những hạn chế. Một lần nữa rất mong nhận được sự góp ý của các
đồng nghiệp để đề tài của tôi ngày một hoàn thiện hơn. Tôi xin chân thành cảm ơn.
II. ĐỀ XUẤT
Để nâng cao chất lượng dạy 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 tăng cường thêm phòng máy, máy tính trong các phòng thực hành. Để đảm
bảo 1 học sinh/ 1 máy tính.
- 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 môn Tin học.
XÁC NHẬN CỦA THỦ TRƯỞNG ĐƠN VỊ Thanh Hóa, ngày 10 tháng 5 năm 2013
Tôi xin cam đoan đây là SKKN của mình viết, không sao chép nội
dung của người khác.
IV. KIỂM NGHIỆM… ……………………………………………………
16
PHẦN III: KẾT LUẬN VÀ ĐỀ XUẤT………………………………………… 18
TÀI LIỆU THAM KHẢO………………………………………………………. 19
22
22