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
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
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:
- sang_kien_kinh_nghiem_mot_so_loi_sai_cua_hoc_sinh_khi_hoc_la.docx