Tải bản đầy đủ (.doc) (17 trang)

Một số biện pháp khắc phục lỗi thường gặp của học sinh khi lập trình pascal

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 (95.66 KB, 17 trang )

MỤC LỤC
A. PHẦN I: ĐẶT VẤN ĐỀ
1. Lý do chọn đề tài ................................................................................. 3
2. Mục đích nghiên cứu ........................................................................... 3
3. Phạm vi đề tài ........................................................................................3
4. Đối tượng, kế hoạch và phạm vi nghiên cứu .......................................4

B. PHẦN II: NỘI DUNG
CHƯƠNG I : TỔNG QUAN .................................................................... 4
1. Cơ sở lý luận ....................................................................................... 4
2. Cơ sở thực tiễn .....,.............................................................................. 4
CHƯƠNG II : NỘI DUNG VẤN ĐỀ NGHIÊN CỨU .............................
I. Một số lỗi sai thường gặp của học sinh trong lập trình Pascal …..........5
1.Chưa hiểu rõ giá trị của phần tử mảng và chỉ số mảng……………………5
2. Dùng cùng tên biến điều khiển cho các vòng lặp for lồng nhau………...5
3.Giá trị biến điều khiển vượt quá miền chỉ số của mảng……………………6
4.Sử dụng dấu “ ;” sai vị trí………………………………………………………7
5.Tràn số do kết quả tính toán vượt quá giới hạn………………………………7
6.Sử dụng tên hàm làm biến cục bộ………………………………………………..8
7.Chưa hiểu thứ tự ưu tiên phép toán…………………………………………….8
II.Biện pháp khắc phục các lỗi sai học sinh hay gặp phải trong lập trình...
1.Giúp các em hiểu rõ hơn về thuật toán ở lớp 10…………………………9
2.Bài tập đọc hiểu………………………………………………………..…10
3.Bài tập sửa lỗi chương trình……………..….…………………………....11
4.Bài tập rèn luyện cách khai báo biến………………………….………...14

1


CHƯƠNG III:……………………………………………………….16
Kết quả nghiên cứu ........................................................................... 16



C. PHẦN III: PHẦN KẾT THÚC
DANH MỤC TÀI LIỆU THAM KHẢO ............................................... 16

A. D. TÀI LIỆU THAM KHẢO………………………………………….17

2


B. PHẦN I: ĐẶT VẤN ĐỀ
1) Lý do chọn đề tài :
Qua nhiều năm dạy lập trình pascal ở lớp 11 tôi thấy học sinh còn khá
bỡ ngỡ và khó tiếp cận cũng như viết được những chương trinh hoàn
thiện để giải quyết một bài toán đơn giản trong sách giáo khoa môn tin
học lớp 11. Theo tôi nghĩ một phần bộ môn còn mới và chưa thực sự
được quan tâm yêu thích đối với các em học sinh. Một phần các em chưa
hiểu rõ được các cách khai báo biến, mảng, phạm vi giá trị của biến..
-

Nội dung tin học lập trình lớp 11 là một nội dung mới lạ đối với đa số học
sinh với nhiều khái niệm, thuật ngữ, cấu trúc dữ liệu mà học sinh mới
được 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 toán. Nguyên nhân dẫn đến những khó khăn mà
học sinh thường gặp là rất phong phú.

- Xuất phát từ cơ sở trên, tôi đã chọn đề tài “Một số biện pháp khắc phục lỗi
thường gặp của học sinh khi lập trình pascal ”.

2) Mục đích nghiên cứu:
- Do gặp phải những khó khăn trên nên khi lập trình giải các bài toán học

sinh thường mắc rất nhiều lỗi, thậm chí có những lỗi các em mắc phải
nhiều lần do không hiểu nguyên nhân xuất hiện lỗi. Vì vậy trong nội dung
đề tài này tôi nêu 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.

3) Phạm vi đề tài:
Đề tài của tôi chỉ nghiên cứu trong phạm vi chương trình tin học lớp 11.
Các bài toán cơ bản để các em học sinh trung bình cũng có thể hiểu và
làm được các bài tương tự.

3


4) Đối tượng, kế hoạch và phạm vi nghiên cứu:
- Đối tượng nghiên cứu: học sinh các lớp 11A 3, 11A 4 trường THPT Hoằng
Hóa 2 năm học 2017-2018.
- Kế hoạch nghiên cứu: trực tiếp qua các bài dạy.

B. PHẦN II: NỘI DUNG
CHƯƠNG I

TỔNG QUAN

1. Cơ sở lí luận:
- Với nhiệm vụ và tâm huyết của một người giáo viện đứng trên bục giảng
tôi rất muốn các em hiểu được nội dung lý thuyết trong sách giáo khoa để áp
dụng vào làm các bài tập cơ bản. Đặc thù của bộ môn là thực hành và sản
phẩm của các em sẽ là niềm vui động lực cho các em học sinh say mê
nghiên cứu bộ môn sau này.
- Trong bối cảnh toàn ngành Giáo dục và Đào tạo đang nỗ lực đổi mới

phương pháp dạy học theo hướng phát huy tính tích cực chủ động của học
sinh trong hoạt động học tập. Với một số nội dung trong đề tài này, học
sinh có thể tự học, tự rèn luyện thông qua một số bài tập, dạng bài tập cụ
thể.
2. Cơ sở thực tiễn:
- Qua thực tế giảng dạy ở trường THPT Hoằng Hóa 2 các năm qua, tôi nhận
thấy khi học đến chương trình tin học lớp 11 đa số học sinh đều nhận xét
bộ môn này rất khó và chưa hiểu rõ vì sao lại có lỗi như vậy.

4


CHƯƠNG II

NỘI DUNG VẤN ĐỀ NGHIÊN CỨU
I.

Một số lỗi sai thường gặp của học sinh trong lập trình Pascal:

1.Chưa hiểu rõ giá trị của phần tử mảng và chỉ số mảng.
a. Ví dụ 1: Nhập vào một mảng số nguyên gồm các số lớn hơn 5 và nhỏ hơn
100. Mảng có tối đa 100 phần tử. In mảng vừa nhập.
Học si nh khai báo mảng như sau:
Var a: array[5..100] of integer;
Đây là lỗi các em chưa hiểu rõ chỉ số kiểu mảng và giá trị của phần tử.
Chúng ta cần phải chỉ rõ từ [5..100] chỉ là chỉ số (số thứ thự của các số trong
dãy số) còn giá trị của nó phụ thuộc vào việc chúng ta nhập từ bàn phím, sao
cho không được nhập số nhỏ hơn 5 và lớn hơn 100. Vì vậy chung ta có thể
khai báo như sau:
Var a : array[1..100] of byte;

b. Bài tập áp dụng: Em hãy viết chương trình cho bài toán sau:
1) Nhập vào một dãy số nguyên a1,…, an sao cho ai (i=1…n) có giá trị
không vượt quá 1000. Số phần tử tối đa của dãy số là 250.

2) Em hãy nhập vào máy tên của các bạn trong lớp. Dùng mảng một
chiều để lưu trữ rồi in ra màn hình tên bạn thứ 10.
2.Dùng cùng tên biến điều khiển cho các vòng lặp for lồng nhau.
Ví dụ 1: Tính tổng S=1!+2!+3!+…+n!
Học sinh lập trình giải bài toán trên như sau:
S:=0;
For i:=1 to n do
Begin
T:=1;
5


For i:=1 to n do
T:=T*i;
S:=S+T;
End;
Đoạn chương trình trên có thể lặp vô tận khi kết thúc vòng lặp con i
luôn nhận giá trị bằng n.
Để khắc phục lỗi này, chỉ cần chú ý các vòng lặp lồng nhau phải sử
dụng biến điều khiển khác nhau.

3.Giá trị biến điều khiển vượt quá miền chỉ số của mảng.
Ví dụ 3: Nhập vào một dãy số gồm 100 phần tử và cho biết dãy vừa
nhập có tạo thành cấp số cộng không?
Học sinh lập trình giải bài toán trên như sau:
Var a: array[1..100] of integer; i,d:integer;kt:boolean;

Begin
Write(‘nhap day so:’);
For i:=1 to 100 do
Begin
Write(‘a[’ ,i, ‘]’);
Readln(a[i]);
End;
d:=a[2]-a[1];kt:=true;i:=1;
while (kt) and (i<=7) do
if (a[i]-a[i-1]<>d) then kt:=false
else i:=i+1;
if kt then writeln(‘Day so tao thanh cap so cong!’)
6


else writeln(‘Day so khong tao thanh cap so cong!’);
readln
End.
Khi thực hiện chương trình trên, chương trình dịch không báo lỗi
nhưng kết quả khi thực hiện chương trình sẽ bị sai lệch. Khi thực hiện từng
bước chương trình ta có thể khắc phục lỗi trên bằng cách gán lại giá trị ban
đầu cho biến đếm i=2.
4.Sử dụng dấu ; sai vị trí.
- Trước Else không có dấu chấm phẩy.
- Sử dụng dấu chấm phẩy sau từ khoá do trong các câu lệnh lặp câu lệnh
lặp rỗng không làm việc gì cả.
5.Tràn số do kết quả tính toán vượt quá giới hạn.
Function GT(n:integer):integer;
VD 7: Var i,t:integer;
Begin

T:=1;
For i:=2 to n do t:=t*i;
Gt:=t;
End;
Begin
Write(‘GT(8)=’, GT(8));
Readln;
End.

Khi thực hiện chương trình GT(8)=-25126 là sai vì thực tế 8!=40320
Lỗi này do khai báo hàm trả về số nguyên nên miền giá trị tối đa là 32767
7


6.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ộ.
Function GT(n:integer):Longint;
Var i:integer;
Begin
For i:=2 to n do GT:=GT*i;
End;
Trong thân hàm đã sử dụng tên hàm làm biến cục bộ nên khi biên
dịch sẽ báo lỗi gọi hàm nhưng thiếu tham số do chương trình hiểu
GT:=GT*i là lời gọi đệ qui.
Để tránh lỗi này cần lưu ý với học sinh: để trả kết quả cho hàm
(không đệ quy), 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ị về cho

hàm.
7.Chưa hiểu thứ tự ưu tiên phép toán.
Thứ tự ưu tiên các phép toán trong ngôn ngữ lập trình Pascal như sau:
- Lời gọi hàm
- Biểu thức trong ngoặc
- Toán tử NOT
- Toán tử đổi dấu: -

* / div mod

- + - or
- >=,>,<=,<,=,<>
8


II. Biện pháp khắc phục các lỗi sai học sinh hay gặp phải trong lập trình.
1.Giúp các em hiểu rõ hơn về thuật toán ở lớp 10
Trước hết cần làm cho học sinh hiểu rõ được thuật toán (xác định bài toán)
sau đó giúp các em hiểu rõ hơn cách hoạt động của từng câu lệnh.
a.Bài tập giúp học sinh xác định bài toán
Bài 1. Cho N và dãy số nguyên a 1,...,aN, hãy tìm giá trị nhỏ nhất (Min) của
dãy số đó.
Nhận xét: Đây là bài toán ở trong SGK, nhằm rèn cho học sinh ghi nhớ thuật
toán, hiểu rõ hơn bản chất của thuật toán. Ở đây học sinh sẽ nhận ra ngay việc
khác nhau giữa bài toán này với thuật toán cơ sở của dãy số. Từ đó sẽ dẫn đến
việc dùng biến Min gán cho giá trị đầu của dãy số, sau đó lần lượt so sánh
Min với các ai, với (2<=i<=N) nếu Min được vấn đề giáo viên sẽ gọi những học sinh có lực học trung bình lên bảng
trình bày, nhận xét cho điểm học sinh này để gợi hứng thú trong học tập.
Thuật toán bằng các bước liệt kê:

Bước 1. Nhập N và dãy a1,...,aN.
Bước 2. Min a1, i 2;
Bước 3. Nếu i > N thì đưa ra giá trị Max rồi kết thúc;
Bước 4.
Bước 4.1. Nếu ai Bước 4.2. i i+1 rồi quay lại bước 3;
Chuyển sang sơ đồ khối:

9


Nhập N, dãy a1,.., aN.

Min  a1; i 2

i>N
?
S

Đưa ra Min
rồi kết thúc.
Đ

ain

S Min  ai
Đ

i i+1

b. Bài tập rèn luyện: Em hãy viết thuật toán cho bài toán sau:
Bài 2: Cho N và dãy số a1,.., aN, hãy cho biết có bao nhiêu số hạng trong
dãy có giá trị bằng 0.

2. Bài tập về đọc hiểu chương trình:

10


Loại bài tập này sẽ giúp phát triển tư duy, giúp học sinh hiểu bài, nhất
là khi dạy các cấu trúc lệnh. Đối với dạng bài tập này, giáo viên nên
hướng dẫn các em thực hiện tuần tự từng lệnh theo từng câu lệnh cụ thể.
Ví dụ: Cho biết kết quả khi thực hiện chương trình sau:
Program vd2;
Uses crt;
Var i:integer;
Begin
Clrscr;
I:=7;
While i>1 do
Begin
If (i mod 2)<>0 then i:=i*3+1
Else i:=i div 2;
Writeln(i);
End;
Readln;
End.
3. Bài tập về sửa lỗi chương trình:
Ví dụ : Để tìm số lớn nhất trong 3 số a,b,c được nhập vào từ bàn phím, có
người đã viết chương trình như sau:

Program vd3;
Uses crt;
Var a,b,c:integer;
Begin
Clrscr;
11


Write(‘nhap vao 3 so:’);
Readln(a,b,c);
If aElse
If aWrite(‘So lon nhat la:’,a);
Readln;
End.

Chương trình trên cho đáp số lúc đúng, lúc sai tuỳ thuộc vào a,b,c. Hãy
giải thích tại sao và sửa lại cho đúng.
Ta thực hiện chương trình trên với 2 bộ input sau đây:
- a=3,b=4,c=5
a
B
c
a3
4
5
T (3<4)
4

Vậy số lớn nhất là 4 Kết quả sai

a
- a=5,b=4,c=7
a
B
c
a5
4
7
F (5<4)
7
Vậy số lớn nhất là 7 Kết quả đúng

aT (5<7)

Chương trình trên thực hiện lúc đúng lúc sai do chương trình mới chỉ so
sánh 2 số a và b thôi đã đưa ra kết luận. Ta có thể sửa lại chương trình như
sau:
Program vd3_1;
Uses crt;
12


Var a,b,c:integer;
Begin
Clrscr;

Write(‘nhap vao 3 so:’);
Readln(a,b,c);
If aBegin
If bEnd
Else
If aWrite(‘So lon nhat la:’,a);
Readln;
End.
4. Bài tập rèn luyện cho học sinh cách khai báo biến.
Ví dụ 1: Trong một chương trình đã chạy tốt, khi thực hiện không có lỗi
có một số lệnh như sau:
…..
Ok:= ‘n’;
J:=round(sqr(n));
If ch= ‘Ok’ then ch:= ‘It is’ + ch;
…..
While kt and (i<=j) do
Begin
Kt:=Not(n mod i=0);
X:=1.5*j+i;
13


End;
Hãy viết phần khai báo biến cho đoạn chương trình trên.
Với dạng bài tập này, ta căn cứ vào các câu lệnh đã cho để viết phần khai
báo biến cho chương trình trên như sau:

Var n,i,j:integer;
X:real;
Kt:boolean;
ok:char;ch:string;
Tuy nhiên ta cũng có nhiều cách để khai báo biến ví dụ biến ok có thể
thuộc kiểu string; j có thể thuộc kiểu real,…
Ví dụ 2: Lập chương trình cắt bỏ các kí tự trống thừa của một xâu cho
trước. Hãy viết chương trình theo thuật toán sau:
-

Bước 1: i:=1;Tword:= ‘’;XauM:= ‘’;

-

Bước 2: Kiểm tra xau[i]<> ‘ ’. nếu đúng thì đến bước 3, sai đến bước 5.

-

Bước 3: Tword:=Tword+xau[i]

-

Bước 4: Kiểm tra i<=length(xau). Đúng thì tăng i lên 1 và quay lại bước 2;
sai thì đến bước 8.

-

Bước 5: kiểm tra Tword<> ‘’. Đúng thì xauM:=xauM+Tword+ ‘ ’ ; gán
Tword= ‘’ và quay lại bước 4. Sai thì chuyển đến bước 6.


-

Bước 6: Kiểm tra Tword<> ‘’. Đúng thì gán xauM:=xauM+Tword; sai thì
xoá kí tự trống ở vị trí length(xauM) của xauM.

-

Bước 7: gán xau:=xauM;

-

Bước 8: kết thúc.

Chương trình có thể được viết như sau:
Program vd5;
Uses crt;
14


Var xau, xauM,Tword:string;
I:byte;
Begin
Wrire(‘nhap vao mot xau ki tu’);readln(xau);
xauM:= ‘’;Tword:= ‘’;
for i:=1 to length(xau) do
if xau[i]<> ‘ ’ then Tword:=Tword+xau[i];
else
begin
if Tword<> ‘’ then xauM:=xauM+Tword+ ‘ ’;
Tword:= ‘’;

End;
If Tword <> ‘’ then xauM:=xauM+Tword
Else xau:=xauM;
Write(‘Xau sau khi xoa cac ki tu trang thua la:’,xau);
Readln;
End.
Tuy nhiên bài toán trên ngoài cách giải trên ta có thể sử dụng thuật toán khác
để giải. Thuật toán như sau:
-

bước 1: Xoá các kí tự trong thừa ở đầu.
Sử dụng vòng lặp while: while xau[1]= ‘ ’ do delete(xau,1,1);

-

Bước 2: Xoá các kí tự trống ở cuối.
Sử dụng vòng lặp while: while xau[length(xau)]= ‘ ’ do
delete(xau,length(xau),1);

-

bước 3: xoá các kí tự trống thừa giữa các từ.
Kiểm tra 2 kí tự liền kề nhau có hơn 1 kí tự trống thì xoá kí tự trống.
15


While pos( ‘ ’,xau)<>0 do delete(xau,pos( ‘ ’,xau),1);
Học sinh có thể viết chương trình theo thuật toán 2.

CHƯƠNG III

Kết quả nghiên cứu:
- Bảng số liệu kết quả đạt được của học sinh lớp 11 năm học 2017-2018 khi
chưa thực hiện đề tài:
STT
1
2
- Khi thực hiện thực

Lớp
11A3
11A4
nghiệm

Sỉ số
45
44
qua các

Đạt yêu cầu
80%
62%
đối tượng học

Không đạt yêu cầu
20%
38%
sinh đã nêu trên, đa số

các em tránh được các lỗi thường gặp khi học lập trình Pascal.
- Một số không ít học sinh có tiến bộ rõ rệt khi viết các chương trình có sử

dụng lập trình có cấu trúc.

C. PHẦN III: PHẦN KẾT THÚC
Trong nội dung của đề tài này, với mong muốn giúp cho việc dạy và
học ngôn ngữ lập trình nói chung và Pascal nói riêng của giáo viên và học
sinh được tốt hơn.
Trên đây là toàn bộ kinh nghiệm của tôi qua nhiều năm liền dạy ở khối
lớp 11 cũng như tham khảo qua nhiều nguồn thông tin, tư liệu khác nhau, rất
mong được sự đóng góp của các đồng nghiệp nhằm giúp đề tài của tôi được
hoàn thiện thêm.
16


D. TÀI LIỆU THAM KHẢO
1.Sách giáo khoa tin học 11
2. Một số diễn đàn tin học trên mạng, các tài liệu về SKKN trên mạng.
3. Tài liệu 100 bài toán tin

XÁC NHẬN CỦA THỦ TRƯỞNG
ĐƠN VỊ

Thanh Hóa, ngày 28 tháng 5 năm 2018
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.
(Ký và ghi rõ họ tên)

17