Hãy chỉ ra lỗi và sau đó sửa lỗi trong các câu lệnh sau đây: a) A:=5While A:=5 do A:=A+3; b) S:=O; For i:=1 to 5.5 do s:=s+i; c) m:=O; T:=O; While T<=5 do m:=m+1; T:=T+m; d) T:=O; For i:=6 to 1 do T:= T*i ;

2 câu trả lời

a) A:=5 While A:=5 do A:=A+3;

⇒ Sai cú pháp: Thiếu dấu ; trước While

⇒ Sửa lỗi: A:=5; While A:=5 do A:=A+3;

b) S:=0; For i:=1 to 5.5 do s:=s+i;

⇒ Sai cú pháp: Trong câu lệnh For..do, giá trị cuối (sau to) không là số nguyên

⇒ Sửa lỗi: S:=0; For i:=1 to 5 do s:=s+i;

c) m:=0; T:=0;

While T<=5 do m:=m+1; T:=T+m;

⇒ Sai logic: Sau do ở câu lệnh While..do, không có câu lệnh đổi các giá trị của các biến có ở điều kiện. Do đó, chương trình lặp vô tận.

⇒ Sửa lỗi: m:=0; T:=0;

                 While T<=5 do

                           begin

                           m:=m+1; T:=T+m;

                           end;

d) T:=0; For i:=6 to 1 do T:= T*i ;

⇒ Sai cú pháp: Trong câu lệnh For..do, giá trị cuối (sau to) bé hơn giá trị đầu

⇒ Sửa lỗi: T:=0; For i:=1 to 6 do T:= T*i;

       hoặc: T:=0; For i:=6 downto 1 do T:= T*i;

(Ngoài ra, nếu đây là đoạn lệnh tính tích các STN từ 1 đến 6 thì:

⇒ Sai logic: Mọi số i nhân T=0 đều cho ra T=0. Do đó, chương trình gặp lỗi khi tính toán

⇒ Sửa lỗi: T:=1; For i:=1 to 6 do T:= T*i;

       hoặc: T:=1; For i:=6 downto 1 do T:= T*i;)

a) sai:

- chỗ sau 5 không có ;

- điều kiện ko có :

sửa: A:=5; while A=5 do A:=A+3;

b)

sai chỗ giá trị cuối

sửa: S:=0; for i:=1 to 5 do s:=s+i;

c)

thiếu ko có begin end nếu ko có câu lệnh sẽ lặp vô hạn

sửa:

m:=0; T:=0;

while T<=5 do begin

m:=m+1; T:=T+m;

end;

d) sai:

- giá trị đầu và giá trị cuối

- nếu gán 0 cho T chương trình kết thúc sẽ ra 0 ko tính ra được vì đây là phép tính nhân nên phải gán T:=1;

sửa: T:=1; for i:=1 to 6 do T:=T*i;