Làm thế nào để sửa lỗi sai trong chương trình

1 câu trả lời

Những sai lầm thường gặp được thầy Thịnh chỉ ra cụ thể như sau:

Khai báo thiếu biến

Mọi đối tượng trong chương trình Pascal đều phải có tên. Ngoài tên dành riêng và tên chuẩn thì các đối tượng khác phải được khai báo trước khi sử dụng ở phần khai báo của chương trình.

Khi viết chương trình nhiều khi học sinh chưa thể xác định được hết các biến cần sử dụng trong chương trình nên thường khai báo thiếu biến.

Biện pháp khắc phục: Sau khi viết xong mỗi chương trình, yêu cầu học sinh đọc lại chương trình để kiểm tra lại việc khai báo và sử dụng các biến.

Trong giờ thực hành có thể sử dụng chương trình dịch của Pascal để kiểm tra việc khai báo biến cho chương trình. Nếu nhấn F9 mà có thông báo compile failed với lỗi Error: Indentifier not found “a” thì có nghĩa là có biến “a” đang được sử dụng mà chưa khai báo.

Học sinh cần bổ sung vào phần khai báo những biến trong chương trình sử dụng mà chưa có trong phần khai báo.

Đặt tên không đúng.

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: Để khắc phục sai lầm này ở học sinh thì giáo viên cần kiểm tra lại thường xuyên và nhắc nhở các em mỗi khi các em mắc phải sai lầm này.

Đặc biệt, 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 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.

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 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: Để khắc phục sai lầm này ở học sinh thì giáo viên cần kiểm tra lại thường xuyên và nhắc nhở các em mỗi khi các em mắc phải sai lầm này.

Đặc biệt, 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

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”.

Tràn số do không xác định được miền giá trị của biến.

Trong ngôn ngữ lập trình Pascal, mỗi kiểu dữ liệu có một miền giá trị xác định. Vì vậy, khi khai báo biến phải xác định được miền giá trị của nó trong chương trình.

Học sinh thường chỉ nhớ kiểu dữ liệu mà không nhớ được miền giá trị của các kiểu dữ liệu trong Pascal. Đặc biệt là với kiểu số nguyên, học sinh thường khai báo kiểu integer mà không xác định miền giá trị của biến có thể nhận khi thực hiện chương trình.

Hậu quả là chương trình vẫn dịch và chạy bình thường với bộ dữ liệu nhỏ đưa vào, nhưng khi thực hiện chương trình với những bộ dữ liệu lớn thì chương trình báo lỗi tràn số.

Biện pháp khắc phục: Để khắc phục được sai lầm này ở học sinh, giáo viên yêu cầu học sinh không chỉ nhớ kiểu dữ liệu mà phải nhớ cả miền giá trị của từng kiểu dữ liệu trong Pascal.

Ngoài ra, với mỗi chương trình, giáo viên yêu cầu học sinh xác định giá trị mà biến có thể nhận khi thực hiện chương trình. Đặc biệt là với những bài tập cho trước miền giá trị của dữ liệu vào thì giáo viên nên yêu cầu học sinh xác định miền giá trị của dữ liệu ra.

Gán kết quả phép chia cho biến kiểu số nguyên

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: Để khắc phục sai lầm này ở học sinh, giáo viên yêu cầu học sinh xác định giá trị của phép chia, đồng thời yêu cầu các em nhớ phép chia lấy phần nguyên trong Pascal.

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”.

Thiếu dấu ngoặc tròn trong biểu thức lôgic.

Biểu thức lôgic là biến lôgic hoặc hằng lôgic hay các biểu thức quan hệ liên kết với nhau bởi phép toán lôgic.

Học sinh thường mắc sai lầm khi viết biểu thức lôgic có các biểu thức quan hệ liên kết với nhau bởi phép toán lôgic nhưng không sử dụng dấu ngoặc tròn cho các biểu thức quan hệ.

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 nhấn mạnh việc sử dụng dấu ngoặc tròn cho các biểu thức quan hệ trong biểu thức lôgic.

Đồng thời, giáo viên giới thiệu thêm cho học sinh biết độ ưu tiên của các phép toán lôgic cao hơn so với các phép toán quan hệ (phép toán lôgic được thực hiện trước phép toán quan hệ).

Ngoài ra, trong giờ thực hành, giáo viên có thể chủ động viết chương trình có sử dụng biểu thức lôgic mà không sử dụng dấu ngoặc tròn cho biểu thức quan hệ rồi dịch chương trình để chỉ ra cho học sinh thấy lỗi Error: Incompatible types: got “Boolean” expected “LongWord”.

Thiếu dấu chấm phẩy hoặc đặt dấu chấm phẩy sai vị trí.

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.

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 kiểm tra và uốn nắn học sinh mỗi khi các em mắc sai lầm này.

Trong giờ 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 để chi ra lỗi Fatal Syntax error, “;” expected hay Fatal Syntax error, “;” expected but else found.

Nhầm lẫn giữa phép gán và phép toán quan hệ bằng

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.

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.

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.

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ả

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 vẫn còn 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ả.

Đặc biệt, trong các giờ thực hành, giáo viên nên yêu cầu học sinh chuẩn bị chương trình ở nhà và yêu cầu học sinh nhập chương trình rồi thực hiện với các bộ test mẫu mà giáo viên đã chuẩn bị trước.

Chia cho số 0.

Trong ngôn ngữ lập trình Pascal, biến có thể nằm trong biểu thức ở mẫu số của phép chia.

Học sinh thường mắc lỗi chia cho số 0 với các chương trình có sử dụng phép chia với mẫu số là biểu thức chứa biến. Khi thực hiện chương trình, giá trị mẫu số có thể bằng số 0. Khi đó, chương trình sẽ mắc lỗi chia cho số 0.

Biện pháp khắc phục: Để khắc phục tình trạng này ở học sinh, giáo viên yêu cầu học sinh xác định giá trị có thể nhận của biến trong biểu thức ở mẫu số của phép chia nếu có.

Nếu biến có thể nhận giá trị làm cho biểu thức ở mẫu số bằng số 0 thì cần phải loại hoặc xét riêng trường hợp này.

Đặ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ó sử dụng phép chia có biến ở mẫu số rồi dịch chương trình và thực hiện với bộ dữ liệu vào làm cho mẫu số bằng số 0 để chỉ ra cho học sinh thấy lỗi chia cho số 0 (Erro: Division by zero).

Viết sai các từ khóa

Trong ngôn ngữ lập trình Pascal, 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. Ngoài ra, giáo viên nên cài đặt phần mềm Free Pascal để hỗ trợ hơn cho học sinh trong việc thực hà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.

Câu hỏi trong lớp Xem thêm