Sáng kiến kinh nghiệm Một số lỗi sai của học sinh khi học lập trình Pascal và hướng khắc phục

docx 17 trang sklop6 24/07/2024 700
Bạn đang xem tài liệu "Sáng kiến kinh nghiệm Một số lỗi sai của học sinh khi học lập trình Pascal và hướng khắc phục", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

Tóm tắt nội dung tài liệu: Sáng kiến kinh nghiệm Một số lỗi sai của học sinh khi học lập trình Pascal và hướng khắc phục

Sáng kiến kinh nghiệm Một số lỗi sai của học sinh khi học lập trình Pascal và hướng khắc phục
 CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM
 Độc lập – Tự do – Hạnh phúc
 BÁO CÁO SÁNG KIẾN
1. Tên sáng kiến: Một số lỗi sai của học sinh khi học lập trình Pascal và hướng 
khắc phục 
2. Mô tả bản chất của sáng kiến:
 Trong giai đoạn hiện nay, công nghệ thông tin được ứng dụng vào đời sống 
như một công cụ không thể thiếu. Nó hỗ trợ đắc lực con người trong mọi khía 
cạnh như công việc, giải trí, học tập,  Để giải quyết được vấn đề tạo ra các sản 
phẩm để phục vụ cuộc sống thì một bước rất quan trọng trong quá trình này là lập 
trình. 
 Lập trình là quá trình con người tạo ra chương trình máy tính thông qua ngôn 
ngữ lập trình, việc lập được các chương trình chạy trên máy tính, các thiết bị điện 
tử thông minh, tạo ra các trò chơi học vui – vui học là điều rất cần thiết. Và để 
làm được việc đó cần có một quá trình nghiên cứu, học tập về ngôn ngữ lập trình 
lâu dài, qua đó nhà lập trình có thể chọn một ngôn ngữ lập trình thích hợp để viết 
chương trình. Hiện nay, có rất nhiều loại ngôn ngữ lập trình khác nhau để tạo nên 
các sản phẩm ở mỗi lĩnh vực với mục đích giúp học sinh làm quen với ngôn ngữ 
lập trình, trong đó ngôn ngữ Pascal đã được Bộ Giáo dục và Đào tạo chọn lựa để 
đưa vào nội dung bộ môn Tin học ở bậc Trung học cơ sở. Tuy nhiên do bước đầu 
làm quen với ngôn ngữ lập trình nên học sinh sẽ không tránh khỏi những sai sót 
và để khắc phục được yếu tố này tôi đã đưa ra sáng kiến “Một số lỗi sai của học 
sinh khi học lập trình Pascal và hướng khắc phục”.
2.1. Các bước và cách thức thực hiện giải pháp:
 Từ những thực trạng của học sinh trong quá trình học lập trình Pascal. Tôi đưa 
ra một số phương án giúp học sinh khắc phục một số lỗi sai trong quá trình học 
lập trình Pascal. Trong sáng kiến này, tôi thực hiện theo trình tự như sau:
 + Xác định những sai xót mà học sinh thường vấp phải.
 + Đưa ra hướng giải quyết.
 + Đưa ra ví dụ thực tế để học sinh nắm rõ hơn về hướng giải quyết này.
2.1.1. Lỗi chưa nắm rõ nguyên tắc hoạt động của câu lệnh:
2.1.1.1. Một số lỗi khi chưa nắm rõ nguyên tắc hoạt động của câu lệnh:
a. Chưa nắm được sự thay đổi của biến đếm trong câu lệnh lặp với số lần biết 
trước và vận dụng sự thay đổi của biến đếm để thực hiện thao tác tính toán: 
 Lỗi xảy ra do học sinh chưa nắm rõ được quá trình thay đổi giá trị của biến 
đếm trong câu lệnh lặp với số lần biết trước. Từ đó, chưa vận dụng được sự thay 
đổi của biến đếm để thực hiện tính toán.
 Ví dụ: Học sinh viết câu lệnh lặp trong bài toán Tính tổng của 10 số tự nhiên 
đầu tiên như sau:
 Var i,n:integer; s:longint;
 Begin
 write('Nhap n=');readln(n); 3
 Trong đó, các thành phần như , , đều 
là các giá trị nguyên. Tuy nhiên, với câu lệnh đã cho như sau, học sinh vẫn đưa 
ra kết quả là 10 vòng lặp.
 For i := 2.1 to 2.10 do writeln(‘Day la lan lap thu ‘,i);
 Phương án khắc phục:
 - Yêu cầu học sinh xác định được cú pháp của câu lệnh: chức năng và từng 
thành phần trong câu lệnh.
 - Đưa các bài tập như trắc nghiệm, điền vào chỗ trống để học sinh xác định 
được cú pháp câu lệnh.
 - Đưa ra chương trình và yêu cầu học sinh giải thích về sự hoạt động của các 
câu lệnh.
 Như vậy, với câu lệnh đã cho như trên, giáo viên yêu cầu học sinh xác định 
được cú pháp của câu lệnh lặp, từng thành phần và chức năng trong câu lệnh. Sau 
đó kiểm tra lại các giá trị đầu và cuối trong câu lệnh đó có phải là giá trị nguyên 
hay không. Nếu đó không phải là giá trị nguyên thì kết luận câu lệnh trên không 
thực hiện được vì giá trị đầu và cuối là giá trị thực.
d. Sử dụng sai vị trí hoặc thiếu hoặc thừa dấu chấm phẩy “;”:
 Lỗi do học sinh đặt sai vị trí của dấu chấm phẩy trong câu lệnh.
 Ví dụ: Học sinh đặt dấu chấm phẩy ngay sau điều kiện và trước Else trong câu 
lệnh sau:
 If a>b; then write(‘a lon hon b’); else write(‘a nho hon b”);
 Phương án khắc phục:
 - Nhắc học sinh về vị trí của dấu chấm phẩy như: Dấu chấm phẩy được đặt ở 
cuối câu lệnh, 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ả, 
 Ví dụ: Câu lệnh trên được viết đúng lại như sau:
 If a>b then write(‘a lon hon b’) else write(‘a nho hon b”);
e. Đặt tên biến sai quy tắc: Lỗi do học sinh ít chú ý đến quy tắc đặt tên và đặt:
 - Tên biến bị trùng với từ khóa;
 - Tên biến bị trùng nhau trong cùng một chương trình;
 - Tên biến bị chứa dấu cách như viết văn bản hay có khoảng cách phía trước, 
 Ví dụ: Học sinh đặt tên biến cho chương trình tính diện tích hình vuông và 
diện tích hình chữ nhật như sau:
 Var a, b, dien tich hcn, dien tich hv: integer;
 Phương án khắc phục:
 Giáo viên nhắc học sinh chú ý đến quy tắc đặt tên:
 - Tên không trùng với từ khoá
 - Tên khác nhau tương ứng với những đại lượng khác nhau
 - Tên không chứa kí tự trống
 - Tên không bắt dầu bằng số
 - Tên nên đặt ngắn gọn, dễ nhớ, dễ hiểu.
 Ngoài ra giáo viên cần nhắc nhở thêm cho học sinh chú ý kiểu dữ kiệu của 
biến tránh trường hợp lỗi xảy ra do phạm vi giá trị không đủ. 5
 writeln ('chieu dai a='); readln(a); 
 writeln ('chieu rong b='); readln(b); 
 s:=a*b; cv:= (a+b)*2; 
 writeln('dien tich la ',s); 
 writeln('chu vi la ',cv); 
 readln
 End.
 Khi chạy chương trình trên thì chương trình sẽ báo lỗi type mismatch chỗ 
dòng công thức tính diện tích của biến a, b. 
 Phương án khắc phục:
 Giáo viên hướng dẫn học sinh chú ý đến tính tương thích của kiểu dữ liệu được 
đặt cho biến đếm trong chương trình.
 Ví dụ: Giáo viên hướng dẫn học sinh sửa lại kiểu dữ liệu trong chương trình 
trên như sau:
 var a,b:integer; s,cv:longint; (Hoặc Var a,b, s,cv: real;)
 Begin
 clrscr; 
 writeln ('chieu dai a='); readln(a); 
 writeln ('chieu rong b='); readln(b); 
 s:=a*b; 
 cv:= (a+b)*2; 
 writeln('dien tich la ',s); 
 writeln('chu vi la ',cv); 
 readln
 End.
2.1.1.2. Ví dụ: Dùng cùng tên biến đếm cho các vòng lặp for lồng nhau:
 Bài tập: Tính tổng S = 1.k!+2.k!+.+n.k!
 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;
 For i:=1 to k do T:=T*i;
 S:=S+i*T;
 End;
 Lỗi học sinh gặp phải: đ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 k (phần in đậm).
 Hướng khắc phục: để khắc phục lỗi này chỉ cần cho học sinh chú ý về quá 
trình hoạt động của các biến đếm, từ đó áp dụng các vòng lặp lồng nhau phải sử 
dụng biến đếm khác nhau.
 Đoạn chương trình chỉnh sửa:
 S:=0;
 For i:=1 to n do
 Begin 7
 100 Disk read error Lỗi khi đọc đĩa
 101 Disk write error Lỗi khi ghi đĩa
 103 File not open Tệp chưa được mở
 200 Division by zero Lỗi chia cho số 0
2.1.2. Lỗi xác định thuật toán chưa phù hợp: 
2.1.2.1. Những lỗi học sinh thường vấp trong trong quá trình viết thuật toán:
a. Lỗi bỏ bước: 
 Lỗi này thường xảy trong quá trình học sinh xây dựng thuật toán, các bước 
trong thuật toán không liên kết với nhau xảy ra tình trạng thuật toán không hoàn 
chỉnh và chương trình thực hiện không đúng theo yêu cầu.
 Ví dụ: Học sinh viết thuật toán so sánh 2 số a và b dưới dạng “a lớn hơn b”, 
“a nhỏ hơn b” và “a bằng b” như sau:
 Bước 1: So sánh a và b. Nếu a > b, kết quả là “a lớn hơn b”.
 Bước 2: Nếu a < b, kết quả là “a nhỏ hơn b”; ngược lại, kết quả là “a bằng b” 
và kết thúc thuật toán.
 Thoạt đầu, ta thấy thuật toán trên có vẻ giải quyết tốt bài toán. Tuy nhiên, nếu 
thử thuật toán trên với a = 6 và b = 5 thì ta sẽ thấy bước 1 có kết quả là “a lớn hơn 
b”, nhưng đến bước 2, khi kiểm tra a < b không thoả mãn ta lại có tiếp kết quả là 
“a bằng b” và như thế ta nhận được 2 kết quả.
 Phương án khắc phục:
 - Cho học sinh viết lưu đồ cú pháp của chương trình. 
 - Nêu thuật toán của chương trình.
 - Yêu cầu học sinh viết chương trình theo đúng thuật toán đó.
 - Đưa ra chương trình và cho học sinh xác định thuật toán của chương trình 
đó.
 - Đưa ra nhiều dạng bài tập về thuật toán như điền vào chỗ trống, xác định 
thuật toán thực hiện vấn đề gì, xác định lỗi sai trong thuật toán
 Ví dụ: Với bài toán so sánh 2 số a và b ở trên, để có kết quả đúng, giáo viên 
cần hướng dẫ học sinh mô tả chính xác hơn điều kiện kết thúc thuật toán như sau:
 Bước 1: Nếu a > b, kết quả là “a lớn hơn b” và chuyển đến bước 3.
 Bước 2: Nếu a < b, kết quả là “a nhỏ hơn b”; ngược lại, kết quả là “a bằng b”.
 Bước 3: Kết thúc thuật toán.
 Như vậy khi thử lại với bất kì cặp số a và b nào thì ta cũng chỉ nhận được một 
kết quả.
b. Lỗi chưa xác định được dữ liệu input và output: 
 Lỗi do học sinh chưa xác định được cụ thể yêu cầu của bài toán, dẫn đến không 
xác định được dự liệu đầu vào và đầu ra.
 Ví dụ: Học sinh xác định bài toán Tính tổng của n số tự nhiên đầu tiên với 
Input và Output như sau:
 Input: số n.
 Output: Tổng của n số tự nhiên đầu tiên.
 Phương án khắc phục:
 - Cho học sinh xác định input và output của chương trình. 9
 - Với đa số học sinh hiện nay, cần phải dành một lượng thời gian thích hợp để 
rèn luỵên loại bài tập này. Phải làm sao cho việc viết thuật toán trở thành kĩ năng 
để khi các em lập trình trên máy, tuy không cần viết thuật toán ra mà các em có 
thể hình dung được thuật toán đó trong đầu. Cần phải tạo cho các em có ý thức 
khi viết một chương trình Pascal là phải tuân thủ theo trình tự sau:
 Xác định bài toán  Xây dựng thuật toán  Viết chương trình
 Ví dụ: Có n hộp có khối lượng khác nhau và một cái cân dĩa. Hãy chỉ ra cách 
cân để tìm được hộp nặng nhất. Với bài toán trong thực tế như trên ta có thể phát 
biểu lại dưới dạng bài toán trong toán học như sau: Cho tập hợp A có số phần tử 
hữu hạn. Tìm phần tử lớn nhất trong tập A nói trên. Khi đó ta có thể trình bày 
thuật toán như sau:
 B1 - Nếu chỉ có 1 hộp thì đó chính là hộp nặng nhất và kết thúc.
 B2 - Nếu số hộp n>1 thì
 Chọn 2 hộp bất kì và đặt lên bàn cân.
 Giữ lại hộp nặng hơn và cất hộp nhẹ đi chỗ khác.
 B3 - Nếu không còn hộp chưa được cân thì chuyển sang bước 5, ngoài ra:
 Chọn một hộp bất kì và để lên dĩa cân còn trống
 Giữ lại hộp nặng hơn, cất hộp nhẹ sang chỗ khác
 B4 - Trở lại bước 3
 B5 - Hộp còn lại trên cân là hộp nặng nhất và kết thúc.
a. Thụ động trong giải quyết chương trình:
 Khi chương trình bị lỗi, thì học sinh thường hạn chế chịu tìm tòi phát hiện vấn 
đề.
 Ví dụ: Khi viết chương trình tính diện tích hình vuông và diện tích hình chữ 
nhật, học sinh gặp phải lỗi như sau:
 Lỗi này tuy rất đơn giản nhưng học sinh thường có lỗi rất hạn chế tìm tòi và 
phát hiện lỗi sai là gì.
 Phương án khắc phục:
 - Có biện pháp chấn chỉnh thói quen thụ động trong học tập. 
 - Trình bày những vấn đề học sinh thường gặp khi học bộ môn lập trình và 
hướng dẫn khắc phục vấn đề trên.
 - Phổ biến với học sinh về bảng lỗi. Từ đó học sinh dựa vào đó để dần thích 
 nghi với các lỗi và có thói quen chỉnh sửa những sai sót đó. 11
 For i:=1 to n do 
 If n mod i =0 then dem:=dem+1;
 If dem=2 then write(n,‘ la so nguyen to’) else write(n,‘ khong phai la so 
nguyen to’);
2.2. Phân tích tình trạng của giải pháp đã biết:
 Ưu điểm:
 - Phòng học bộ môn Tin học luôn được nhà trường quan tâm đầu tư để duy trì 
đủ máy vi tính phục vụ cho dạy học bộ môn (hiện có 20 máy hoạt động tốt), cài 
đầy đủ các phần mềm học tập cho các khối lớp trong đó có phần mềm Pascal cho 
lớp 8 và được kết nối mạng Internet kèm theo một Tivi 50 inch. 
 - Đa số học sinh học tập tích cực. Một số em học sinh ở nhà đã có trang bị 
máy tính nên cũng có một số thuận lợi nhất định. Một số lượng không nhỏ học 
sinh rất yêu thích Tin học và thích tìm hiểu một số bài toán, dạng toán mà các em 
đam mê từ phân môn Toán học, đố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 học lập trình, cụ thể là ngôn ngữ lập trình Pascal.
 - Trong quá trình học lập trình, học sinh nắm rõ được các nguyên tắc hoạt 
động của câu lệnh như: nắm được sự thay đổi của biến đếm trong câu lệnh lặp với 
số lần biết trước và vận dụng sự thay đổi của biến đếm để thực hiện thao tác tính 
toán, xác định được điều kiện trong câu lệnh lặp với số lần chưa biết trước, khai 
báo kiểu dữ liệu và phạm vi giá trị của dữ liệu, quy tắc đặt tên trong chương trình, 
chú ý đến xác định bài toán và điều kiện để thực hiện yêu cầu, đồng thời chú ý 
các bước liên kết trong thuật toán xác định thuật toán thực hiện vấn đề gì, xác định 
lỗi sai trong thuật toán
 - Dần dần trong quá trình lập trình, học sinh đã có thói quen tự lập trình, tự 
giác tham gia vào phong trào tập thể như trao đổi nhóm, nêu ý kiến, thực hiện 
phương án cá nhân, mày mò giải quyết các vấn đề gặp phải trong quá trình lập 
trình, từ đó phát triển tốt khả năng tư duy của bản thân.
 Hạn chế:
 Qua thực tế giảng dạy tại trường THCS Phù Đổng những năm qua, tôi nhận 
thấy khi học đến chương trình Tin học lớp 8 vẫn còn nhiều học sinh đều cảm thấy 
khó khăn và trừu tượng với việc học lập trình. Các học sinh thường gặp khá nhiều 
lỗi khi viết một chương trình trong ngôn ngữ lập trình Pascal.
 Trong năm học 2021-2022 kết quả đạt được của học sinh ở phần lập trình cuối 
học kì I cụ thể như sau: 
 Trên trung bình Dưới trung bình
 STT Lớp Sỉ số
 SL TL SL TL
 1 8/1 35 15 42,8% 20 57,1%
 2 8/2 36 17 47,2% 19 52,8%
 3 8/3 36 18 50% 18 50%
 4 8/4 36 17 47,2% 19 52,8%
 Nội dung tin học lập trình 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. 

File đính kèm:

  • docxsang_kien_kinh_nghiem_mot_so_loi_sai_cua_hoc_sinh_khi_hoc_la.docx