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;