1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Một số kinh nghiệm giúp học sinh khắc phục lỗi thường gặp khi viết chương trình bằng ngôn ngữ lập trình pascal tin học 11

18 308 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 18
Dung lượng 182,5 KB

Nội dung

Xuất phát từ thực tiễn giảng dạy tại trường tôi thấy rằng, trong các tiết thực hành ở phòng máy khi học sinh được giáo viên hướng dẫn viết và chạy được một chương trình pascal để xem kết

Trang 1

1 Mở đầu

1.1 Lí do chọn đề tài

Ngày nay cùng với sự phát triển như vũ bão của công nghệ thông tin, môn tin học đã trở thành môn học bắt buộc trong các trường trung học phổ thông Tuy nhiên với tư tưởng của học sinh, môn tin học là môn phụ nên các em thường ít chú tâm và đầu tư cho môn học Đặc biệt là với nội dung học lập trình

ở lớp 11, kiến thức tương đối khó càng khiến cho quá trình dạy - học gặp nhiều khó khăn Vậy làm thế nào để tạo hứng thú cho học sinh từ đó phát huy tính tích cực và chủ động của các em với môn học luôn là câu hỏi tôi luôn trăn trở

Xuất phát từ thực tiễn giảng dạy tại trường tôi thấy rằng, trong các tiết thực hành ở phòng máy khi học sinh được giáo viên hướng dẫn viết và chạy được một chương trình pascal để xem kết quả các em thường tỏ ra rất thích thú và trong các tiết học sau thì tập trung học hơn kể cả các tiết lý thuyết và thực hành Tuy nhiên qua các năm giảng dạy tôi nhận thấy một thực trạng chung là khi các

em viết chương trình trên giấy hay trên máy tính mặc dù là tương đối đầy đủ các câu lệnh nhưng vẫn mắc một số lỗi phổ biến Điều này dẫn đến tâm lý chán nản

vì quá trình sửa lỗi có thể mất rất nhiều thời gian Chính vì vậy để phần nào giúp các em thuận lợi hơn trong quá trình viết chương trình tôi chọn đề tài sáng kiến

kinh nghiệm của mình là "Một số kinh nghiệm giúp học sinh khắc phục lỗi thường gặp khi viết chương trình bằng ngôn ngữ lập trình Pascal - Tin học 11"

1.2 Mục đích của sáng kiến

Giúp học sinh hạn chế việc sinh lỗi khi viết chương trình và khi mắc lỗi thì khắc phục nhanh các lỗi phổ biến thường gặp Từ đó tiết kiệm thời gian khi viết một chương trình hoàn chỉnh, tạo hứng thú và phát huy tính tích cực, sáng tạo của các em với môn học

1.3 Đối tượng nghiên cứu

Học sinh lớp 11 - Trường THPT Vĩnh Lộc

1.4 Phương pháp nghiên cứu

- Khảo sát, phân tích, giải quyết vấn đề kết hợp giữa lí thuyết và thực hành

- Kết hợp thực tiễn dạy học và giáo dục ở trường THPT Vĩnh Lộc

- Tham khảo các tài liệu về ngôn ngữ lập trình Pascal và tài liệu về sáng kiến kinh nghiệm

- Tham khảo ý kiến đóng góp của đồng nghiệp

2 Nội dung sáng kiến kinh nghiệm

2.1 Cơ sở lí luận của sáng kiến kinh nghiệm

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 Điều 24.2 của Luật giáo dục đã nêu rõ: “Phương pháp giáo dục phổ thông phải phát huy tính tích cực, tự giác, chủ động, sáng tạo của học sinh, phù hợp với đặc điểm của từng lớp học, môn học; bồi dưỡng phương pháp tự học, rèn luyện kỹ năng vận dụng kiến thức vào thực tiễn, tác động đến tình cảm, đem lại niềm vui, hứng thú học tập cho học sinh” Với một số nội dung trong đề tài này, học sinh có thể thuận lợi, tự tin khi lập trình giải bài toán

Trang 2

trên máy tính Qua đó nâng cao khả năng 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.2 Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm

Qua thực tế giảng dạy ở trường 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ừa phải tìm thuật toán và đến khi viết chương trình phải nhớ hệ thống câu lệnh mà yêu cầu phải đúng đến từng dấu chấm, dấy phẩy Vì vậy học sinh thường gặp khá nhiều lỗi khi lập trình giải các bài toán , 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 Bên cạnh đó cũng có 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ở rộng và nâng cao

2.3 Các giải pháp đã sử dụng để giải quyết vấn đề

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

2.3.1.1 Đặt tên sai quy tắc

- Trong ngôn ngữ lập trình Turbo Pascal, mọi đối tượng dùng trong chương trình đều phải được đặt tên theo quy tắc 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 lỗi đặ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 lỗi này ở học sinh thì giáo viên cần

kiểm tra lại thường xuyên qua các bài tập đọc – hiểu và phát hiện lỗi hoặc qua các bài tập viết chương trình và nhắc nhở mỗi khi các em mắc phải lỗi 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 số 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

- Ví dụ: Cho chương trình đơn giản sau

Program Vi du 1;

Begin

writeln(‘Xin chao lop A1’);

End;

Giáo viên chạy chương trình để học sinh xem thông báo lỗi và quay lại chương trình yêu cầu học sinh tìm lỗi và khắc phục?

Tên chương trình sai quy tắc, có thể sửa thành Vidu1 hoặc Vi_du_1

Program Vi du 1;

Begin

writeln(‘Xin chao lop A1’);

End;

Program Vi_du_1;

Begin writeln(‘Xin chao lop A1’);

End;

2.3.1.2 Viết sai tên dành riêng và tên chuẩn

- Học sinh thường mắc lỗi viết sai các tên hoặc nhầm lẫn giữa tên dành riêng và tên chuẩn trong khi viết chương trình

Trang 3

- Biện pháp khắc phục: giáo viên yêu cầu học sinh nhớ chính xác các tên

dành riêng và tên chuẩn thường dùng 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ợ nhiều 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ên trong Pascal rồi dịch chương trình để chỉ ra cho học sinh thấy lỗi Fatal: Syntax error

2.3.1.3 Khai báo thiếu biến

- 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: Trước khi viết chương trình nên yêu câu học sinh

xác định các biến cần sử dụng và kiểu dữ liệu của mỗi biến 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 “D” thì có nghĩa là có biến “D” đ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

- Ví dụ: Chương trình giải phương trình bậc hai trong Bài tập và thực hành

1, giáo viên có thể chiếu chương trình khai báo thiếu biến D, yêu cầu học sinh xác định lỗi và sửa lỗi

Program Giai_PTB2;

uses crt;

Var a,b,c,x1,x2: real;

Begin

clrscr;

writeln(‘a,b,c:’); readln(a,b,c);

D:=b*b-4*a*c;

x1:=(-b - sqrt(D))/(2*a);

x2:=-b/a - x1;

writeln(x1:6:2, x2:6:2);

readln;

END

Program Giai_PTB2;

uses crt;

Var a,b,c,x1,x2,D: real;

Begin clrscr;

writeln(‘a,b,c:’); readln(a,b,c); D:=b*b-4*a*c;

x1:=(-b - sqrt(D))/(2*a);

x2:=-b/a - x1;

writeln(x1:6:2, x2:6:2);

readln;

END

2.3.1.4 Đặt tên biến trùng nhau

- Trong một chương trình viết bằng ngôn 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ữ in hoa mà không nhớ rằng trong Pascal không phân biệt chữ hoa và chữ thường (ví dụ: var c, C:integer;)

- Biện pháp khắc phục: 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 lỗi này

Trang 4

- 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 “c” và một biến tên “C” rồi dịch chương trình để chỉ ra lỗi Error: Duplicate indentifier “c”

2.3.1.5 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

- Kết 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: 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

-Ví dụ với bài tập viết chương trình tính và đưa ra màn hình diện tích hình vuông có cạnh a với giá trị nguyên nằm trong phạm vi từ 100 đến 200.

Program DT_hinh_vuong;

uses crt;

Var a: byte; S: Integer;

Begin

clrscr;

writeln(‘a:’); readln(a);

S:=a*a;

writeln(‘Dien tich= ‘,S:6);

readln;

END

Program DT_hinh_vuong;

uses crt;

Var a: byte; S: word;

Begin clrscr;

writeln(‘a:’); readln(a);

S:=a*a;

writeln(‘Dien tich= ‘,S:6);

readln;

END

Học sinh sẽ thường viết chương trình theo hai cách khai báo như trên, cả hai cách đều không sai nhưng để không mắc lỗi tràn số với các bộ test lớn thì khai báo như cách 2 là hợp lí nhất để đạt điểm tối đa

2.3.1.6 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: giáo viên yêu cầu học sinh có thể 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

Trang 5

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

Ví dụ: trường hợp kết quả của phép chia là số nguyên ta phải dùng phép div

để gán kết quả cho biến kiểu nguyên như trong đoạn chương trình sau:

Var a, tuso, mauso: integer;

a:=ucln(tuso,mauso);

tuso:= tuso div a;

mauso:= mauso div a;

.3.1.7 Viết biểu thức mà chưa nhớ thứ tự thực hiện các 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

- >=, >, <=, <, =, <>

Học sinh thường mắc lỗi khi viết biểu thức mà mẫu số chứa phép nhân hoặc 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: 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 để đảm bảo đúng thứ tự thực hiện các phép toán có chứa trong biểu thức

- Đồ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”

-Ví dụ: Chương trình trong Bài tập và thực hành 2 có chứa biểu thức lô gic:

If a2=b2+c2 or b2=a2+c2 or

c2=a2+b2 then

If (a2=b2+c2) or (b2=a2+c2) or (c2=a2+b2) then

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

Trang 6

- 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 lỗi 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: đối với mỗi bài tập học trên lớp giáo viên nên kiểm

tra và yêu cầu học sinh sửa hết các lỗi này trong chương trình của mình

- 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

để chỉ ra lỗi Fatal Syntax error, “;” expected hay Fatal Syntax error, “;” expected but else found

2.1.3.9 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: 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

2.3.1.10 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 hoặc hướng dẫn học sinh tìm bộ test tiêu biểu của một số bài toán đơn giản để 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ả

2.3.1.11 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: 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

Trang 7

trình để chỉ ra lỗi Error: Ordinal expression expected và lỗi Error: Incompatible types: got “Real” exptected “LongInt”

Ví dụ:

var S: integer; i: real;

begin

for i:=1 to 100 do

if i mod 3=0 then S:=S+i;

writeln(‘S= ‘, S);

End

var S: integer; i: integer;

begin for i:=1 to 100 do

if i mod 3=0 then S:=S+i; writeln(‘S= ‘, S);

End

2.3.1.12 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 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ả

Ví dụ: Tính tổng S = 1k + 2k + … + nk

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+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 k

Biện pháp khắc phục: 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ó và 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

- Hay việc xác định điều kiện lặp phải được thay đổi trong vòng lặp đế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”

2.3.1.13 Khai báo sai miền chỉ số cho dữ liệu kiểu mảng

Trang 8

Ví dụ 1: Nhập vào một mảng N số nguyên (N<= 100) gồm các số lớn hơn 3

và nhỏ hơn 100 In mảng vừa nhập.

Học sinh khai báo mảng như sau:

Var a : array [3 100] of integer;

- Biện pháp khắc phục: Lưu ý cho học sinh phân biệt giữa miền chỉ số và

giá trị phần tử trong mảng 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 so với đề bài

N<100: số phần tử tối đa của mảng là 100 phần tử

Các số lớn hơn 3 và nhỏ hơn 100: kiểu dữ liệu của các phần tử ( byte)

Khai báo đúng mảng a sẽ là:

ar a: array[1 100] of byte;

2.3.1.14 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 Vì vậy hàm trên được sửa lại như sau:

Function GT(n : integer) : Longint ;

Var i, t : integer ;

Begin

t:=1;

For i := 2 to n do t := t*i ;

GT:=t;

End ;

2.3.2 Một số dạng bài tập luyện tập

2.3.2.1 Bài tập về khai báo biến:

Bài 1: Cho đoạn chương trình sau trong chương trình tính chu vi và diện

tích tam giác có độ dài ba cạnh a, b, c nguyên

C:=a+b+c;

P:=C mod 2;

S:=sqrt(p(p-a)(p-b)(p-c));

? Đoạn chương trình trên có lỗi cú pháp nào không?

Trang 9

? Khai báo biến cho chương trình trên.

- Một số lỗi trong đoạn chương trình:

Đặt tên biến trùng nhau (C và c)

P phải là biến số thực nên không sử dụng phép mod.

Trong biểu thức tính S thiếu dấu nhân (*)

- Đoạn chương trình sửa lại:

Cv:=a+b+c;

P:=Cv / 2;

S:=sqrt(p*(p-a)*(p-b)*(p-c));

- Khai báo biến:

Var a, b, c, Cv: integer;

P,S: real;

Tùy thuộc vào thời lượng tiết dạy giáo viên có thể chạy thử chương trình để học sinh thấy rõ thông báo lỗi hoặc yêu cầu học sinh hoàn thiện chương trình

Bài 2: 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:

s:= ‘n’;

J:=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;

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;

s : char ; ch : string;

Tuy nhiên ta cũng có nhiều cách để khai báo biến ví dụ biến s có thể thuộc kiểu string; j có thể thuộc kiểu real,…

Bài 3: Khai báo biến cho đoạn chương trình sau:

Begin

Writeln(‘Nhap n (n<250)’); Readln(n);

For i:=1 to n do readln(a[i]);

D:=0;

For i:=1 to n do

If a[i] =k then d:=d+1;

Trang 10

Writeln(d);

- Biến n,i, d cùng kiểu dữ kiệu nguyên

Các phần tử của mảng A và k có cùng kiểu dữ liệu là nguyên hoặc thực

- Có thể khai báo biến như sau:

Var n,i,d: integer;

K: real;

A:array[1 250] of real;

Hoặc khai báo:

Var n,i,d: integer;

K: integer;

A:array[1 250] of integer;

2.3.2.2 Bài tập về sửa lỗi chương trình:

Đối với bài tập này, giáo viên yêu cầu nhận xét chương trình đã viết đúng

về mặt cú pháp hay chưa, sau khi thực hiện chương trình có cho kết quả đúng hay chưa, có đúng đối với tất cả các trường hợp hay không?

Bài 1: Sửa các lỗi cú pháp cho chương trình tính diện tích hình tròn có bán kính

r là số nguyên (0<r<250) sau:

Program vi du 1;

Cont pi=3.14;

Var r,s: integer;

Begin

Writeln(‘Nhap ban kinh r=’); Readln(r);

S:=pi*r*r;

Writeln(‘Dien tich hinh chu nhat ‘,s:8:2);

And

Một số lỗi trong chương trình:

- Tên chương trình sai quy tắc vì có chứa dấu cách Vi du 1 (có thể sửa thành vi_du_1)

- Sai một số tên: cont (const), And (end)

- Kiểu dữ liệu của biến chưa thích hợp (r: byte; s: real)

Chương trình đúng:

Program vi_du_1;

Const pi=3.14;

Var r: byte; s: real;

Begin

Writeln(‘Nhap ban kinh r=’); Readln(r);

S:=pi*r*r;

Writeln(‘Dien tich hinh chu nhat ‘,s:8:2);

End

Bài 2: Cho chương trình giải phương trình bậc hai ax 2 + bx +c=0 (a<>0) được soạn sẵn như sau:

Program giaiptb2;

Var a,b,c,d,x1,x2:real;

Begin

Ngày đăng: 11/07/2020, 12:14

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w