Báo cáo Biện pháp Khắc phục một số lỗi thường gặp khi viết chương trình bằng ngôn ngữ lập trình PASCAL

docx 16 trang Chăm Nguyễn 27/11/2025 50
Bạn đang xem tài liệu "Báo cáo Biện pháp Khắc phục một số lỗi thường gặp khi viết chương trình bằng ngôn ngữ lập trình PASCAL", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • docxbao_cao_bien_phap_khac_phuc_mot_so_loi_thuong_gap_khi_viet_c.docx
  • pdfBáo cáo Biện pháp Khắc phục một số lỗi thường gặp khi viết chương trình bằng ngôn ngữ lập trình PASC.pdf

Nội dung tài liệu: Báo cáo Biện pháp Khắc phục một số lỗi thường gặp khi viết chương trình bằng ngôn ngữ lập trình PASCAL

  1. 2 nghiệm để tránh các lỗi thường gặp trong quá trình viết chương trình Pascal. Đồng thời còn giúp học sinh thêm yêu thích môn Tin học và phát triển các năng lực chung cũng như năng lực riêng biệt của môn học. Từ đó phát huy được khả năng chủ động, sáng tạo ở học sinh Chính vì vậy tôi đã suy nghĩ cách làm thế nào để có “Biện pháp khắc phục một số lỗi thường gặp khi viết chương trình bằng ngôn ngữ lập trình PASCAL” II. NỘI DUNG 1. Thực trạng của vấn đề Thực tế qua những năm trực tiếp giảng dạy bộ môn cũng như trao đổi với đồng nghiệp tôi nhận thấy: hầu như học sinh đều rất yêu thích và hứng thú với môn Tin học. Tuy nhiên, chất lượng bộ môn qua các năm học chưa cao, đặc biệt là với học sinh lớp 8. Và trong thời gian áp dụng chương trình giáo dục phổ thồn mới 2018, các em học sinh lớp 6, 7 cũng còn rất bỡ ngỡ, khó khăn khi làm quen với ngôn ngữ lập trình thông qua nội dung học tập của chủ đề F. Đồng thời, nội dung ngôn ngữ lập trình cũng là nội dung chính cho việc lựa chọn và tham gia thi học sinh giỏi các cấp. Nhưng qua thực tế lựa chọn đội tuyển, bước đầu các em làm quen và được bồi dưỡng thì bản thân các em còn thấy nhàm chán, khó khăn cũng như muốn bỏ cuộc. Nên với biện pháp tôi đưa ra cũng là cơ sở để thu hút các em tham gia đội tuyển nhiều hơn. Xuất phát từ những thực tế và kinh nghiệm trong giảng dạy tôi nhận thấy kết quả học tập chỉ đạt được tối đa khi học sinh thực sự có hứng thú học môn học này, chủ động tham gia vào các hoạt động tự lực giải quyết các nhiệm vụ học tập theo yêu cầu của giáo viên cũng như tự bản thân mình tạo ra các sản phẩm học tập. Cho nên khi tổ chức dạy học tôi nhận thấy giáo viên cũng như học sinh gặp những thuận lợi và khó khăn sau: 1.1. Thuận lợi - Được sự quan tâm của BGH nhà trường trong công tác tổ chức dạy học bộ môn Tin học. - Giáo viên giảng dạy được đào tạo theo đúng chuyên ngành và được bồi dưỡng chuyên đề hàng năm - Giáo viên tích cực, hoạt bát, thích ứng nhanh với các kế hoạch mới, cập nhật công nghệ thông tin tốt - Phần lớn các em học sinh đã phần nào có ý thức tự học. 1.2. Khó khăn - Bộ môn Tin học lớp 8 là môn được học sinh đánh giá là khó, rất khó so với lực học của đa số bộ phận các em học sinh. - 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. Có những lỗi mà học sinh mắc phải rất nhiều lần song các em lại không biết sửa như thế nào. Và trong quá trình giảng dạy chương trình lớp 8 tôi thấy nhiều học sinh mắc phải những sai lầm giống nhau. Dẫn đến nhiều em khó khăn trong việc tổ chức dữ liệu và viết chương trình. Hậu quả là, có không ít học sinh còn tìm cách học
  2. 3 thuộc lòng các chương trình mẫu của giáo viên và trong sách mà chưa có khả năng tự mình viết được chương trình hoàn chỉnh cho máy tính giải bài toán. Nguyên nhân chính dẫn đến điều đó chủ yếu là do các em chưa nắm vững về cú pháp của ngôn ngữ lập trình Pascal. Và đặc biệt kể cả khi các em sử dụng sẵn chương trình mẫu để viết vẫn mắc phải một số lỗi cơ bản. Cụ thể, để tìm hiểu thực trạng của học sinh trong việc phát hiện và sửa các lỗi khi viết chương trình, tôi đã tiến hành thống kê trong các tiết bài tập và thực hành các lỗi mà học sinh thường mắc phải bao gồm các lỗi như sau: MỘT SỐ LỖI THƯỜNG GẶP (Lỗi biên dịch) MÃ THÔNG BÁO LỖI Ý NGHĨA LỖI 3 Unknown identifier Tên gọi chưa được mô tả 4 Duplicate indentifier Khai báo lặp một tên gọi 5 Syntax error Lỗi cú pháp 36 Begin expected Thiếu BEGIN 37 End expected Thiếu END 42 Error in expression Lỗi trong biểu thức 50 DO expected Thiếu DO 54 OF expected Thiếu OF 57 THEN expected Thiếu THEN 85 “;” expected Thiếu dấu “;” 86 “:” expected Thiếu dấu “:” 87 “,” expected Thiếu dấu “,” 88 “(” expected Thiếu dấu “(” 89 “)” expected Thiếu dấu “)” 90 “=” expected Thiếu dấu “=” 91 “:=” expected Thiếu dấu “:=” 92 “[” or “(.” expected Thiếu dấu “[” hoặc “(.” 93 “]” or “.)” expected Thiếu dấu “]” hoặc “.)” 94 “.” expected Thiếu dấu “.” 95 “..” expected Thiếu dấu “..” (Lỗi sinh ra trong quá trình chạy chương trình Runtime Error) MÃ THÔNG BÁO LỖI Ý NGHĨA LỖI 2 File not found Không tìm thấy tệp 3 Path not found Không tìm thấy đường dẫn 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ở
  3. 4 Qua khảo sát chất lượng đầu năm học (bài thực hành đầu tiên), tôi thấy giờ thực hành học sinh rất ngại thực hành trên máy vì các em mới làm quen với một vài khái niệm cơ bản để viết chương trình. Mặc dù các em được sử dụng chương trình trong sách giáo khoa để thực hiện nhập vào máy tính song đa số các em vẫn chưa thực sự nhập đúng các câu lệnh. Đặc biệt là các từ khóa, dấu “;”, cặp dấu ‘ ’ .... Nguyên nhân một phần là do các em chưa thực sự hiểu rõ bản chất của việc thực hiện các câu lệnh, chưa nắm rõ cú pháp câu lệnh... Vì thế, kết quả khảo sát đầu năm học thấp. Kết quả khảo sát đầu năm học 2021-2022 (phần thực hành) Kết quả kiểm tra T Sĩ Lớp Giỏi Khá TB Yếu Kém T số SL % SL % SL % SL % SL % 1 8B 38 7 18,4 10 26,4 14 36,8 7 18,4 0 0 2 8C 34 5 14,7 10 29,4 12 35,3 7 20,6 0 0 3 8D 34 6 17,6 9 26,5 13 38,3 6 17,6 0 0 Tổng cộng 106 18 17,0 29 27,4 39 36,8 20 18,8 0 0 Qua những thuận lợi và khó khăn cũng như kết quả khảo sát trên, việc cần thiết là giáo viên phải có phương pháp giáo dục và biện pháp phù hợp, có sự đầu tư, sáng tạo, chủ động hơn trong quá trình dạy học, nhằm giúp học sinh khắc phục tối đa các lỗi các em thường hay mắc phải từ đó phát huy hết khả năng của mình. Thông qua các hoạt động giáo dục, giáo viên và học sinh sẽ có sự giao lưu thoải mái, thân thiện để làm việc có hứng thú, hiệu quả hơn. 2. Mô tả, phân tích các giải pháp áp dụng sáng kiến 2.1. Mô tả quy trình/quá trình thực hiện Khảo sát mức độ hứng thú, tự giác của học sinh khi làm quen với phần lập trình Học tập, tham khảo phương pháp của các đồng nghiệp. Khảo sát năng lực của học sinh các lớp khi tiếp cận với nội dung chương trình Tin học lớp 8 Tổng hợp kết quả khảo sát, thực nghiệm từ các bạn học sinh ở trường Trung học cơ sở Khe Sanh ( 210 học sinh trong trường) Tham khảo các tài liệu có liên quan. Đánh giá kết quả học tập của học sinh sau khi áp dụng sáng kiến. 2.1.1. Các vấn đề liên quan đến “lỗi” và “sửa lỗi” trong Pascal “Lỗi là gì ?” Chúng ta cần hiểu “lỗi” ở đây là những vấn đề bất thường xảy ra trong quá trình thực hiện chương trình Pascal khiến cho kết quả nhận được không như mong muốn của người lập trình. “Có những loại lỗi nào ?” Có rất nhiều lỗi mà người lập trình có thể mắc phải khi viết và thực hiện chương trình Pascal. Nhưng thường được phân thành hai loại lỗi sau: Lỗi cú pháp và lỗi về ngữ nghĩa. Đối với những lỗi về cú pháp thì khi dịch chương trình, chương trình dịch Pascal sẽ báo lỗi. Và vấn đề của người lập trình ở đây là làm sao dựa vào chỉ dẫn của máy để sửa lỗi. Còn đối với những lỗi về ngữ nghĩa,
  4. 5 chương trình dịch của Pascal không thể tìm ra lỗi này. Lỗi về cú pháp phải do người lập trình phát hiện ra và tương đối phức tạp. “Làm thế nào để sửa lỗi về ngữ nghĩa ?” Như chúng ta đã hiểu, lỗi về ngữ nghĩa là những lỗi vô cùng phức tạp. Hay nói cách khác các lỗi này nó “muôn hình vạn trạng”. Điều đó cũng cho thấy để sửa những lỗi về ngữ nghĩa vô cùng khó khăn đối với những người mới làm quen với ngôn ngữ lập trình Pascal như học sinh lớp 8 của chúng ta. Có những lỗi mà người học chưa trải qua thì khả năng sửa được gần như là bằng không. Do vậy cần phải cung cấp cho học sinh những kinh nghiệm sửa lỗi, phải hình thành tư duy thuật toán giúp học sinh nhanh nhạy hơn trong quá trình học lập trình Pascal. 2.1.2. Xác định các lỗi cơ bản học sinh thường mắc phải Luôn luôn nhớ: Cần kiểm tra thường xuyên và nhắc nhở các em mỗi khi các em mắc các lỗi khi viết chương trình. Thực tế qua nhiều năm giảng dạy chương trình Tin học lớp 8, tôi đã rút ra được một số lỗi cơ bản mà các em thường mắc phải khi viết chương trình. Cụ thể tôi rút ra được một số lỗi của học sinh trường THCS Khe Sanh qua các thế hệ học sinh tôi đảm nhận giảng dạy hầu hết mắc phải như sau: - Sử dụng sai vị trí hoặc thiếu dấu “;” + Sai lầm thường gặp: Trong ngôn ngữ lập trình Pascal, kết thúc mỗi câu lệnh đều có dấu chấm phẩy, câu lệnh liền trước từ khóa else không có dấu chấm phẩy và sau từ khóa end cuối cùng là dấu chấm. Học sinh thường mắc sai lầm khi viết kết thúc câu lệnh mà không có dấu chấm phẩy hoặc sử dụng dấu chấm phẩy trước từ khóa else, 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ả. + Biện pháp khắc phục: Trong giờ dạy lý thuyết cũng như thực hành, giáo viên có thể viết chương trình có lỗi thiếu dấu chấm phẩy hay sai lỗi dấu chấm phẩy trước từ khóa else rồi dịch chương trình để chỉ ra lỗi Fatal Syntax error, “;” expected hay Fatal Syntax error, “;” expected but else found. - Đặt tên không đúng + Sai lầm thường gặp: Trong ngôn ngữ lập trình Turbo Pascal, tên là một dãy liên tiếp không quá 127 kí tự bao gồm chữ số, chữ cái hoặc dấu gạch dưới và bắt đầu bằng chữ cái hoặc dấu gạch dưới. (Trong Free Pascal thì tên có thể có tới 255 kí tự). Học sinh thường mắc sai lầm đặt tên không đúng theo quy tắc của ngôn ngữ lập trình Pascal. Các em thường đặt tên có dấu cách hay có thêm các kí tự khác, ngoài các kí tự được phép đặt tên trong ngôn ngữ lập trình Pascal. + Biện pháp khắc phục: Giáo viên có thể chủ động viết một chương trình có khai báo một tên không đúng quy tắc đặt tên của ngôn ngữ lập trình Pascal rồi dịch chương trình để chỉ ra lỗi như: Error: Fatal: Syntax error, “;” expected but “ordinal const” found. - Đặt tên biến trùng nhau. + Sai lầm thường gặp: Trong một chương viết bằng ngông ngữ lập trình Pascal, mỗi đối tượng có một tên và không phân biệt chữ hoa và chữ thường. Học sinh thường mắc sai lầm khi đặt tên các biến trùng nhau. Đặc biệt với
  5. 6 những chương trình có sử dụng nhiều biến tham gia, học sinh thường đặt một biến có tên chữ thường, một biến có tên chữ hoa mà không nhớ rằng trong Pascal không phân biệt chữ hoa và chữ thường (ví dụ: var a, A:integer;) + Biện pháp khắc phục: Trong giờ thực hành, giáo viên có thể chủ động viết một chương trình có khai báo một biến tên “a” và một biến tên “A” rồi dịch chương trình để chỉ ra lỗi Error: Duplicate indentifier “a”. - Biến đếm, biến chỉ số là biến kiểu số thực. + Sai lầm thường gặp: Trong ngôn ngữ lập trình Pascal, biến đếm, biến chỉ số trong mảng thường là biến kiểu số nguyên. Học sinh thường nắm cú pháp của câu lệnh trong Pascal không vững, dẫn đến việc các em chỉ nhớ cú pháp câu lệnh mà không nhớ được ý nghĩa của các thành phần trong câu lệnh. Hậu quả là các em sử dụng cả biến kiểu số thực làm biến đếm hay biến chỉ số của mảng. + Biện pháp khắc phục: Để khắc phục sai lầm này ở học sinh, giáo viên yêu cầu học sinh không chỉ nhớ được cú pháp câu lệnh mà phải nắm vững ý nghĩa của từng thành phần trong câu lệnh trong ngôn ngữ lập trình Pascal. Ngoài ra, trong giờ thực hành, giáo viên có thể chủ động viết một chương trình có khai báo biến đếm và biến chỉ số của mảng là biến kiểu số thực rồi dịch chương trình để chỉ ra lỗi Error: Ordinal expression expected và lỗi Error: Incompatible types: got “Real” exptected “LongInt”. - Gán kết quả phép chia cho biến kiểu số nguyên. + Sai lầm thường gặp: Trong ngôn ngữ lập trình Pascal, kết quả thực hiện của phép chia luôn là số thực. Vì vậy, ta không thể gán kết quả của phép chia cho biến kiểu số nguyên. Học sinh thường nhớ được cú pháp của phép chia trong Pascal mà không để ý rằng kết quả của phép chia rất có thể là một số thực. Hậu quả là các em thường mắc lỗi gán giá trị cho biến kiểu số nguyên bằng giá trị của phép chia. + Biện pháp khắc phục: Trong các chương trình học sinh viết, mỗi khi học sinh gán kết quả phép chia cho biến kiểu số nguyên thì giáo viên cần chỉ rõ cho học sinh thấy được giá trị của phép chia luôn có thể là một số thực. Và nếu có là số nguyên thì trong Pascal cũng không được phép gán kết quả phép toán chia cho biến kiểu số nguyên mà phải sử dụng phép chia lấy phần nguyên “div”. Trong giờ thực hành, giáo viên có thể viết chương trình có sử dụng phép gán kết quả phép chia cho biến kiểu số nguyên rồi dịch chương trình để chỉ ra lỗi Error: Incompatible types: got “Extended” expected “SmallInt”. - Nhầm lẫn giữa phép gán và phép toán quan hệ bằng. + Sai lầm thường gặp: Trong ngôn ngữ lập trình Pascal, phép gán có cú pháp “:=” dùng để gán giá trị cho biến bên trái bằng giá trị của biểu thức bên phải. Học sinh thường nhầm lẫn giữa phép gán với biểu thức quan hệ bằng bởi vì các em quen với việc tính toán trong các môn học khác. Ví dụ: trong môn toán các em thường có biểu thức b2 4ac khi các em giải phương trình bậc hai. Và khi viết chương trình trong Pascal các em thường viết delta=b*b-4*a*c; + Biện pháp khắc phục: Để khắc phục sai lầm này ở học sinh, giáo viên cần nói rõ ý nghĩa phép gán trong Pascal là dùng để thay đổi giá trị của biến và nó là một câu lệnh. Còn dấu “=” trong Pascal là phép toán quan hệ bằng.
  6. 7 Trong giờ thực hành, giáo viên có thể viết một chương trình mà thay phép gán “:=” bởi phép toán quan hệ bằng “=” rồi dịch chương trình để chỉ ra lỗi Error Illegal Expression. - Vòng lặp vô hạn. + Sai lầm thường gặp: Trong ngôn ngữ lập trình Pascal, biến đếm trong vòng lặp for được tăng hoặc giảm một cách tự động hay vòng lặp while-do chỉ kết thúc khi điều kiện lặp sai. Học sinh thường mắc sai lầm khi viết các chương trình có sử dụng vòng lặp lồng nhau mà chưa phân tích rõ việc sử dụng các biến nên có em sử dụng cùng một biến cho các vòng lặp lồng nhau. Bên cạnh đó, có những học sinh xác định điều kiện lặp không chính xác làm cho điều kiện lặp trong vòng lặp while-do luôn luôn đúng. Hậu quả là chương trình lặp vô hạn mà không cho ra kết quả. + Biện pháp khắc phục: Để khắc phục sai lầm này ở học sinh, giáo viên nên yêu cầu học sinh phân tích rõ thuật toán, các biến được sử dụng trong chương trình cùng ý nghĩa của nó. Hay việc xác định điều kiện lặp phải được thay đổi đến một lúc nào đó điều kiện đó phải sai để tránh lặp vô hạn. Trong giờ thực hành, giáo viên có thể viết một chương trình có vòng lặp vô hạn rồi dịch chương trình để chỉ ra cho các em thấy lỗi Error: Illegal assignment to for-loop variable “a” - Chạy chương trình mà không quan tâm đến kết quả. + Sai lầm thường gặp: Khi viết xong một chương trình, dịch thành công chương trình là có thể chạy chương trình. Nhưng điều đó chưa khẳng định được là chương trình cho kết quả đúng. Nhiều học sinh hiện nay chỉ viết chương trình mang tính đối phó mà không cần quan tâm tới tính đúng đắn của chương trình. Hậu quả là trong các giờ thực hành, nhiều học sinh viết chương trình đến khi chương trình chạy được là các em xem như đã hoàn thành yêu cầu của giáo viên mà không biết rằng chương trình các em viết cho kết quả không đúng hay sai với một số bộ test. + Biện pháp khắc phục: Để khắc phục tình trạng này ở học sinh thì mỗi khi giao bài tập cho học sinh, giáo viên nên chuẩn bị trước các bộ test mẫu để yêu cầu học sinh thực hiện chạy chương trình theo bộ test mẫu và đối chiếu kết quả. Viết sai các từ khóa. + Sai lầm thường gặp: Từ khóa là tên dành riêng do ngôn ngữ lập trình đặt với ý nghĩa riêng xác định. Học sinh thường mắc lỗi viết sai các từ khóa trong khi viết chương trình do các từ khóa trong Pascal đều là từ tiếng anh. Bên cạnh đó, nhiều học sinh có kiến thức tiếng anh hạn chế, một số học sinh học tin học mang tính đối phó. Dẫn đến việc nhiều học sinh viết sai các từ khóa trong khi viết chương trình bằng ngôn ngữ lập trình Pascal. + Biện pháp khắc phục: Để khắc phục sai lầm này ở học sinh, giáo viên yêu cầu học sinh nhớ chính xác các từ khóa trong chương trình. Đặc biệt, trong các giờ thực hành, giáo viên có thể chuẩn bị trước một chương trình có viết sai từ khóa trong Pascal rồi dịch chương trình để chỉ ra cho học sinh thấy lỗi Fatal: Syntax error. 2.1.3. Các giải pháp thực tiễn
  7. 8 Giải pháp 1: Cung cấp cho học sinh hệ thống bài tập đa dạng phong phú về thể loại như viết thuật toán, đọc hiểu chương trình, phát hiện lỗi chương trình, chia nhỏ bài toán lớn, viết chương trình, bài tập về khai báo biến... Khi dạy lập trình nói chung và Pascal nói riêng, nhiều khi người dạy chỉ chú ý tới các bài tập về lập trình mà không nghĩ rằng trong những bước đầu để học sinh hiểu yêu cầu đề bài và phân loại bài tập cần phải đưa ra nhiều dạng bài tập khác nhau, trong số các dạng bài tập đó ở đây ta có thể nêu ra một số dạng như sau: bài tập về viết thuật toán, bài tập về đọc hiểu chương trình, bài tập về sửa lỗi chương trình, bài tập về viết chương trình, * Bài tập về viết thuật toán: 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: Bài toán Xây dựng thuật toánViết chương trình Ví dụ: Cho hai số thực a và b. Hãy cho biết kết quả so sánh hai số đó dưới dạng “a lớn hơn b”, “a nhỏ hơn b”, hoặc “a bằng b”. . Khi đó ta có thể trình bày thuật toán như sau: B1- Nếu a>b, kết quả là “a lớn hơn b” và chuyển qua bước 3. B2- 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”. B3- Kết thúc thuật toán * Bài tập tìm kết quả dựa trên thuật toán sẵn có: Với loại bài toán này từ các bước đã cho giáo viên hướng dẫn học sinh cách tìm kết quả mà tác giả đã xây dựng cho bài toán qua các bước của thuật toán. Ví dụ: Hãy cho biết kết quả của thuật toán sau: (Câu 5 SGK Tin học quyển 3 trang 45) B1: SUM  0; i  0; B2: Nếu i > 100 thì chuyển tới bước 4. B3: i i + 1; SUM  SUM + i. Quay lại bước 2. B4: Thông báo giá trị SUM và kết thúc thuật toán. * Bài tập về đọc hiểu chương trình: 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: 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. * Bài tập về sửa lỗi chương trình:
  8. 9 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: Var a,b,c:integer; Begin Write(‘nhap vao 3 so:’); Readln(a,b,c); If a<b then a:=b Else If a<c then a:=c; Write(‘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: Bộ 1: a=3,b=4,c=5 Bộ 2: a=5,b=4,c=7 a b c a<b a<c a b c a<b a<c 3 4 5 T 5 4 7 F T (3<4) (5<4) (5<7) 4 7 Vậy số lớn nhất là 4 Kết quả Vậy số lớn nhất là 7 Kết quả đúng sai 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: Var a,b,c:integer; Begin Write(‘nhap vao 3 so:’); Readln(a,b,c); If a<b then Begin If b<c then a:=c else a:=b; End Else If a<c then a:=c; Write(‘So lon nhat la:’,a); Readln; End. Hoặc cho HS làm dạng bài tập nhận biết lỗi như sau: Thiếu từ khóa BEGIN Thiếu dấu chấm(.) kết thúc chương trình Thiếu dấu chấm phẩy(;) Viết sai từ khóa, từ khóa không đổi thành màu trắng. Giải pháp 2: Nhấn mạnh nguyên nhân gây lỗi khi sửa lỗi
  9. 10 Việc làm này giúp học sinh hiểu rõ hơn nguyên nhân mắc lỗi và lần sau không mắc phải các lỗi tương tự. Ta xét ví dụ sau: Trong phần khai báo: Var x, y, z: byte; Trong phần thân chương trình: Readln(x); Readln(y); z:=x+y; Sau đó khi chạy chương trình nhập x=100, y=200. Lúc này máy sẽ báo lỗi tràn bộ nhớ. Trong trường hợp này cần giải thích rõ tại sao lại lỗi và lỗi trong trường hợp nào? TH1: nhập x=100, y=200 thì chương trình sẽ tính z=300. Mà trong phần khai báo chúng ta khai bao z kiểu byte, kiểu byte có phạm vi giá trị là từ 0 đến 255 như vậy z vượt quá phạm vi khai báo gây ra tình trạng tràn bộ nhớ. TH2: Tương tự nếu ta nhập x=100, y= -200 thì kết quả z=- 100. Lúc này lại xảy ra lỗi vì giá trị của c không nằm trong phạm vi giá trị của kiểu byte. TH3: Nếu nhập x = 300, y = - 100 thì mặc dù z := x+y được tính bằng 200 thuộc phạm vi giá trị của kiểu byte thì chương trình vẫn sai vì lúc này chúng ta nhận thấy a lại vượt quá phạm vi khai báo, b không thuộc phạm vi khai báo. Kết luận: Để sửa lỗi này chúng ta cần phải chọn kiểu dữ liệu khi khai báo biến phù hợp. Và trong quá trình nhập dữ liệu cho các biến chúng ta cần phải chọn bộ “input” phù hợp. Giải pháp 3: Phân chia bài toán thành nhiều phần Trong thực tế, có những bài toán rất phức tạp, gồm nhiều công đoạn. Đối với những bài toán như vậy, chúng ta cần phải phân chia bài toán thành nhiều phần, giao cho mỗi nhóm thực hiện một phần của bài toán. Và như vậy, khi cần giải quyết một vấn đề nào đó bằng máy tính, để viết một chương trình phức tạp ta có thể viết từng phần chương trình giải quyết từng vấn đề nhỏ. Ta quay lại ví dụ trong phần giải pháp: Ở ví dụ này chia bài toán thành các phần sau: xác định bài toán, xây dựng thuật toán, khai báo biến, viết chương trình. Kết luận: Như vậy, việc phân chia một bài toán thành nhiều bài toán nhỏ sẽ giúp cho việc giải quyết bài toán mạch lạc, việc kiểm tra sai sót thuận tiện hơn, có thể thấy kết quả ở từng bước và có thể điều chỉnh kịp thời. * Giải pháp 4: Rèn luyện kĩ năng phát hiện và sửa lỗi bằng việc tích cực cho học sinh thực hành và sửa lỗi. Trong dạy lập trình Pascal, việc giúp học sinh nhận ra lỗi và cách sửa các lỗi đó là rất cần thiết và quan trọng. Để có thể sửa lỗi nhanh chóng cần có sự sự tư duy và tổng hợp trong quá trình thực hành. Muốn cho học sinh tích lũy được nhiều kinh nghiệm thì bản thân tôi thường tăng cường cho học sinh thực hành trên máy. Đối với các bài “ Bài tập và thực hành” tôi thường cho học sinh viết
  10. 11 chương trình trực tiếp trên máy sau đó yêu cầu học sinh chạy tự tìm ra lỗi và nguyên nhân. Đối với các lỗi phức tạp yêu cầu học sinh ghi nhớ bằng cách chạy nhiều bộ input khác nhau hoặc ghi chép vào vở chi tiết. Ta xét các ví dụ sau: + Trong phần khai báo: Var i:real; Trong phần thân chương trình: For i:=1 to n do write (i); Biến đếm trong các vòng lặp luôn luôn nhận giá trị nguyên hoặc dưới dạng kí tự, do vậy khi khai báo biến đếm tuyệt đối không sử dụng kiểu dữ liệu thực. Giải pháp: Khi khai báo biến đếm tuyệt đối không sử dụng kiểu dữ liệu thực. + Trong phần khai báo: Var a, b, c: Integer; Trong phần thân chương trình: a: =20; b:=14; c:=a/b Giải pháp: Biến được khai báo dùng để gán cho phép chia phải được sử dụng kiểu dữ liệu thực. + Với đoạn chương trình: i:=1; While i< 10 do write (i); Đoạn chương trình này đã rơi vào vòng lặp vô hạn bởi giá trị của i bao giờ cũng nhỏ hơn 10. Giải pháp: Ví dụ trên đã rơi vào vòng lặp vô hạn bởi giá trị của i bao giờ cũng nhỏ hơn 10. Để sửa lỗi trên học sinh cần phải thêm câu lệnh làm thay đổi giá trị của i vào sau “do”. Có thể thêm như sau: i:=1; While i< 10 do Begin write (i); i:=i+1; End; Kết luận: Giải pháp này giúp các em tích lũy kinh nghiệm về việc phát hiện và sửa lỗi đồng thời phát huy năng lực tự học tự giải quyết vấn đề. Giải pháp 5: Tạo tình huống mắc lỗi yêu cầu học sinh phát hiện và sửa lỗi Để thực hiện giải pháp này, tôi thường đưa ra các bài tập yêu cầu học sinh làm mà không hề nhắc đến việc các dữ liệu của bài tập có vấn đề và để tự học sinh phát hiện ra điều đó. Việc này nhằm giúp cho học sinh khắc sâu và lần sau không mắc phải những lỗi tương tự. Đây cũng là một cách giúp các em được “làm quen” với các lỗi một cách hay nhất. Đối với những lỗi mà giáo viên tạo tình huống như vậy thì học sinh thường nhớ lâu hơn, điều đó cũng có nghĩa là lần sau học sinh sẽ không mắc phải các lỗi đó nữa. Ví dụ: Cho HS chạy chương trình với lỗi đặt sai dấu “;” như sau: If a>b then write (‘ So lon nhat la:’, a); Else write(‘ so lon nhat la:’, b); Từ đó HS phát hiện ra lỗi mà mình cũng thường hay mắc phải. Giải pháp: Yêu cầu học sinh ghi nhớ các quy tắc của Pascal khi viết chương trình đặc biệt trong câu lệnh ghép, trong các vòng lặp. Giải thích cho học sinh hiểu rằng câu lệnh rẽ nhánh phải hết câu lệnh sau “else” mới kết thúc và lúc đó mới cần dấu “;”.
  11. 12 Kết luận: Giải pháp này giúp các em khắc sâu hơn nữa các lỗi đã phát hiện và cách sửa. Ngoài ra nó còn phát huy năng lực hợp tác. 2.2. Tính mới của sáng kiến Sáng kiến đã đáp ứng được nhu cầu đổi mới dạy - học theo hướng phát triển năng lực của người học cũng như năng lực tự học, tự giải quyết vấn đề, năng lực hợp tác, năng lực công nghệ thông tin nâng cao, năng lực khoa học máy tính. Ứng dụng tại trường THCS Khe Sanh các giải pháp tích cực để điều chỉnh lỗi sai thường xuyên mắc phải của học sinh khi viết chương trình bằng ngôn ngữ lập trình Pascal. Với giải pháp này cũng sẽ hỗ trợ rất đắc lực cho giáo viên cũng như học sinh khi áp dụng cho chương trình giáo dục phổ thông 2018 với chủ đề “Giải quyết vấn đề với sự trợ giúp của máy tính”. Mặc dù các em sẽ không trực tiếp sử dụng ngôn ngữ lập trình Pascal mà sẽ được làm quen với ngôn ngữ lập trình khác như ngôn ngữ lập trình kéo thả Scratch . Không chỉ tác động hành vi trong mối quan hệ giữa học sinh với học sinh mà còn rất hiệu quả trong thể hiện thái độ của giáo viên với học sinh. 2.3. Tính thực tiễn của sáng kiến Qua quá trình, áp dụng đề tài tôi nhận thấy nội dung này phù hợp với nhu cầu thực tiễn trong quá trình giảng dạy nhất là khi thực hành. Khi áp dụng đề tài cũng đòi hỏi người hướng dẫn phải luôn biết tự nghiên cứu, tạo cảm hứng và khơi gợi sự sáng tạo cho học sinh. Đồng thời nó có sức ảnh hưởng đến học sinh qua các bài kiểm tra, nhất là học sinh được làm việc ở dạng kiến thức tổng quát của một nội dung Toán học cụ thể. Và đồng thời hỗ trợ các em lượng kiến thức cơ bản về lập trình nói chung để phục vụ cho việc tiếp cận kiến thức mới ủa chương trình giáo dục phổ thông 2018 cấp THPT. 2.4. Tính hiệu quả của sáng kiến. Qua thời gian áp dụng áp dụng một số giải pháp tại trường Trung học cơ sở Khe Sanh tôi nhận thấy học sinh hoạt động tích cực hơn, các thao tác trên máy thực hiện khá thuần thục. Các đối tượng học sinh hỗ trợ được cho nhau để cùng học, cùng tiến bộ. Học sinh ít mắc phải các lỗi, đặc biệt là các lỗi như thiếu dấu “;”, cặp dấu ‘ ’, đặt tên không đúng, trùng tên, sai từ khóa . Các em thuần thục hơn khi viết chương trình, dịch và chạy chương trình đơn giản.Và kết quả sau quá trình áp dụng biện pháp trên cho bài kiểm tra thực hành cuối năm so với đầu