Hỗ trợ: xuất hoá đơn GTGT 8%.
Image 1

Câu 1. Biến đếm trong vòng lặp for thông thường có kiểu dữ liệu nào ? A. Kiểu số…

Câu 1. Biến đếm trong vòng lặp for thông thường có kiểu dữ liệu nào ?
A. Kiểu số…

Câu 1. Biến đếm trong vòng lặp for thông thường có kiểu dữ liệu nào ?
A. Kiểu số nguyên
B. Kiểu xâu kí tự
C. Kiểu lôgic
D. Kiểu kí tự

Câu 2. Kiểu dữ liệu của biến đếm trong lệnh lặp for..do ?
A. Chỉ cần khác kiểu với giá trị đầu
B. Cùng kiểu với các biến trong câu lệnh
C. Không cần phải xác định kiểu dữ liệu
D. Cùng kiểu với giá trị đầu và giá trị cuối

Câu 3. Hoạt động nào lặp lại với số lần biết trước ?
A. Giặt tới khi sạch
B. Học bài cho tới khi thuộc bài
C. Gọi điện tới khi có người nghe máy
D. Ngày đánh răng 2 lần

Câu 4. Câu lệnh for…to…do kết thúc khi :
A. Khi biến đếm nhỏ hơn giá trị cuối
B. Khi biến đếm lớn hơn giá trị cuối
C. Khi biến đếm nhỏ hơn giá trị đầu
D. Khi biến đếm lớn hơn giá trị đầu

Câu 5. Cho các câu lệnh sau, hãy chỉ ra câu lệnh đúng
A. For i:=1 to 10; do x:=x+1;
B. For i:=10 to 1 do x:=x+1;
C. For i:=1 to 10 do x:=x+1;
D. For i=10 to 1 do x:=x+1;

Câu 6. Sau khi thực hiện đoạn chương trình sau :
S:=33;
For i:=1 to 5 do S:=S+i;
Giá trị của S bằng bao nhiêu ?
A. 33 B. 34 C. 48 D. 43

Câu 7. Cho chương trình sau:
Program tong;
Uses crt;
Var S: real ;
n,i : integer;
Begin
Write (‘ Nhap n=‘); readln (n);
S:=0;
For i:=1 to n do S:=S+1/i;
Writeln (‘ Tong can tim la S=‘,S);
Readln
End.
Kết quả in ra màn hình khi nhập giá trị n=2 là:
A. 1
B.1,5
C. 0,5
D.

Câu 8. Sau khi thực hiện đoạn chương trình sau :
S:=10;
For i:=1 to 4 do S:=S*i;
Giá trị của S bằng bao nhiêu ?
A. 10 B. 240 C. 20 D. 60

Câu 9. Số vòng lặp trong câu lệnh lặp For..to..do:
A. Giá trị đầu – giá trị cuối + 1
B. Giá trị cuối – giá trị đầu + 1
C. Giá trị đầu – giá trị cuối + 2
D. Giá trị đầu – giá trị cuối + 3

Câu 10. Lệnh lặp for..do được sử dụng khi:
A. Lặp với số lần chưa biết trước
B. Lặp với số lần có thể biết trước
C. Lặp với số lần không bao giờ biết trước
D. Lặp với số lần biết trước

Câu 11.Trong lệnh lặp for..do của Pascal, trong mỗi vòng lặp, biến đếm thay đổi như thế nào?
A. +1;
B. +1 hoặc -1;
C. Một giá trị bất kì;
D. Một giá trị khác 0.

Câu 12.Sau khi thực hiện đoạn chương trình Pascal:
For i:=1 to m do
Begin
y:=x;
x:=y – 1;
end;
chúng ta sẽ nhận được kết quả nào dưới đây?
A. x=x-m;
B. x=i-m;
C. x=x-i;
D. i=0 và x=y-1.

Câu 13.Dưới đây là một đoạn chương trình Pascal:
for i:=0 to 10 do
begin
s:=s+1;
end;
Sau khi thược hiện đoạn chương trình trên, giá trị của i là:
A. 0
B. 10
C. 11
D. Không xác định.

Câu 14.Trong câu lệnh lặp
For i :=1 to 10 do begin s :=s+i end;
Câu lệnh ghép được thực hiện bao nhiêu lần (nói cách khác, bao nhiêu vòng lặp được thực hiện) ?
Không lần nào.
1 lần.
2 lần.
10 lần.
Câu 15. Lệnh lặp nào sau đây là đúng?
A. For < biến đếm >=<giá trị đầu> to <giá trị cuối> do <câu lệnh>;
B. For < biến đếm > :=<giá trị đầu> to <giá trị cuối> do <câu lệnh>;
C. For < biến đếm > :=<giá trị cuối> to <giá trị đầu> do <câu lệnh>;
D. For < biến đếm > : <giá trị đầu> to <câu lệnh> do <giá trị cuối>;

Câu 16. Câu lệnh Pascal nào sau đây là hợp lệ?
A. For i:=1 to 10 do writeln(‘A’);
B. For i:=1.5 to 10.5 do writeln(‘A’);
C. For i=1 to 10 do writeln(‘A’);
D. For i:=100 to 1 do writeln(‘A’);

Câu 17. Vòng lặp for..to…do là vòng lặp:
A. Biết trước số lần lặp
B. Chưa biết trước số lần lặp
C. Biết trước số lần lặp nhưng giới hạn là <=50
D. Biết trước số lần lặp nhưng giới hạn là >=50

Câu 18. Viết ngôn ngữ lập trình Pascal câu lệnh lặp for i:=1 to 10 do x:=x+1; thì biến đếm i được khai báo là kiểu dữ liệu:
A. Integer
B. Char
C. String
D. Tất cả các kiểu trên đều được

Câu 19. Trong câu lệnh lặp for ….downto…do, sau mỗi lần thực hiện câu lệnh, biến đếm bị:
A. Giảm đi 3 đơn vị
B. Giảm đi 2 đơn vị
C. Giảm đi 1 đơn vị
D. Giảm đi 4 đơn vị

Câu 20. Đối với đoạn chương trình Pascal sau đây:
a:=2; b:=3;
for i:=1 to 5 do
if i mod 2=0 then a:=a+1;
b:=b+a;
cach :=‘ ‘;
writeln(a,cach,b);
– Cho biết lệnh writeln in ra màn hình giá trị a và b là bao nhiêu?
A. a=2; b=3
B. a=3; b=4
C. a=4; b=6
D. a=4; b=7

Hỏi bởi: Hoàng Ngọc Hân
3 câu trả lời

▲ 8
Chào các em học sinh lớp 8! Hôm nay chúng ta sẽ cùng nhau ôn tập và giải một số bài tập về vòng lặp FOR trong lập trình Pascal. Thầy tin rằng với kiến thức đã học, các em sẽ làm bài thật tốt. Chúng ta bắt đầu nhé!

Câu 1. Biến đếm trong vòng lặp for thông thường có kiểu dữ liệu nào ?
A. Kiểu số nguyên
B. Kiểu xâu kí tự
C. Kiểu lôgic
D. Kiểu kí tự

Lời giải:
Trong lập trình Pascal, biến đếm của vòng lặp FOR thường được sử dụng để đếm số lần lặp lại hoặc duyệt qua một dãy các giá trị. Các giá trị này thường là các số nguyên liên tiếp. Do đó, biến đếm phải có kiểu dữ liệu số nguyên.

Đáp án: A. Kiểu số nguyên

Câu 2. Kiểu dữ liệu của biến đếm trong lệnh lặp for..do ?
A. Chỉ cần khác kiểu với giá trị đầu
B. Cùng kiểu với các biến trong câu lệnh
C. Không cần phải xác định kiểu dữ liệu
D. Cùng kiểu với giá trị đầu và giá trị cuối

Lời giải:
Trong lệnh lặp FOR..DO, biến đếm sẽ lần lượt nhận các giá trị từ giá trị đầu đến giá trị cuối. Để đảm bảo việc so sánh và gán giá trị diễn ra chính xác, kiểu dữ liệu của biến đếm phải tương thích và cùng kiểu với cả giá trị đầu và giá trị cuối mà nó sẽ nhận.

Đáp án: D. Cùng kiểu với giá trị đầu và giá trị cuối

Câu 3. Hoạt động nào lặp lại với số lần biết trước ?
A. Giặt tới khi sạch
B. Học bài cho tới khi thuộc bài
C. Gọi điện tới khi có người nghe máy
D. Ngày đánh răng 2 lần

Lời giải:
Vòng lặp FOR được sử dụng khi chúng ta biết trước số lần cần thực hiện một công việc.
– A, B, C là các hoạt động lặp lại với điều kiện dừng không xác định trước số lần.
– D. “Ngày đánh răng 2 lần” là một hành động được lặp lại một số lần cụ thể và biết trước trong một ngày.

Đáp án: D. Ngày đánh răng 2 lần

Câu 4. Câu lệnh for…to…do kết thúc khi :
A. Khi biến đếm nhỏ hơn giá trị cuối
B. Khi biến đếm lớn hơn giá trị cuối
C. Khi biến đếm nhỏ hơn giá trị đầu
D. Khi biến đếm lớn hơn giá trị đầu

Lời giải:
Cấu trúc câu lệnh \(for := to do \) sẽ thực hiện lặp lại cho đến khi biến đếm vượt quá giá trị cuối. Cụ thể, khi biến đếm lớn hơn giá trị cuối, vòng lặp sẽ dừng lại.

Đáp án: B. Khi biến đếm lớn hơn giá trị cuối

Câu 5. Cho các câu lệnh sau, hãy chỉ ra câu lệnh đúng
A. For i:=1 to 10; do x:=x+1;
B. For i:=10 to 1 do x:=x+1;
C. For i:=1 to 10 do x:=x+1;
D. For i=10 to 1 do x:=x+1;

Lời giải:
Chúng ta xem xét từng câu lệnh:
A. Có dấu chấm phẩy (;) sau \(10\), làm sai cú pháp.
B. Biến đếm \(i\) chạy từ 10 về 1, nhưng từ khóa là \(to\), chỉ đúng khi giá trị đầu nhỏ hơn giá trị cuối. Nếu muốn chạy giảm dần thì phải dùng \(downto\).
C. Cú pháp \(For := to do \) là đúng. Biến đếm \(i\) sẽ tăng dần từ 1 đến 10.
D. Sử dụng dấu bằng (=) thay vì dấu hai chấm bằng (:=) để gán giá trị.

Đáp án: C. For i:=1 to 10 do x:=x+1;

Câu 6. Sau khi thực hiện đoạn chương trình sau :
S:=33;
For i:=1 to 5 do S:=S+i;
Giá trị của S bằng bao nhiêu ?
A. 33
B. 34
C. 48
D. 43

Lời giải:
Chúng ta sẽ theo dõi sự thay đổi của biến S qua từng vòng lặp:
Khởi tạo: S = 33
Vòng lặp 1 (i=1): S = S + i = 33 + 1 = 34
Vòng lặp 2 (i=2): S = S + i = 34 + 2 = 36
Vòng lặp 3 (i=3): S = S + i = 36 + 3 = 39
Vòng lặp 4 (i=4): S = S + i = 39 + 4 = 43
Vòng lặp 5 (i=5): S = S + i = 43 + 5 = 48
Sau vòng lặp cuối cùng, i sẽ tăng lên 6, lớn hơn giá trị cuối (5), vòng lặp kết thúc.

Đáp án: C. 48

Câu 7. Cho chương trình sau:
Program tong;
Uses crt;
Var S: real ;
n,i : integer;
Begin
Write (‘ Nhap n=‘); readln (n);
S:=0;
For i:=1 to n do S:=S+1/i;
Writeln (‘ Tong can tim la S=‘,S);
Readln
End.
Kết quả in ra màn hình khi nhập giá trị n=2 là:
A. 1
B. 1,5
C. 0,5
D.

Lời giải:
Với n=2, vòng lặp sẽ chạy như sau:
Khởi tạo: S = 0
Vòng lặp 1 (i=1): S = S + 1/i = 0 + 1/1 = 1
Vòng lặp 2 (i=2): S = S + 1/i = 1 + 1/2 = 1 + 0.5 = 1.5
Sau vòng lặp, i sẽ tăng lên 3, lớn hơn n=2, vòng lặp kết thúc.
Kết quả in ra màn hình là S = 1.5.

Đáp án: B. 1,5

Câu 8. Sau khi thực hiện đoạn chương trình sau :
S:=10;
For i:=1 to 4 do S:=S*i;
Giá trị của S bằng bao nhiêu ?
A. 10
B. 240
C. 20
D. 60

Lời giải:
Chúng ta sẽ theo dõi sự thay đổi của biến S qua từng vòng lặp:
Khởi tạo: S = 10
Vòng lặp 1 (i=1): S = S i = 10 1 = 10
Vòng lặp 2 (i=2): S = S i = 10 2 = 20
Vòng lặp 3 (i=3): S = S i = 20 3 = 60
Vòng lặp 4 (i=4): S = S i = 60 4 = 240
Sau vòng lặp cuối cùng, i sẽ tăng lên 5, lớn hơn giá trị cuối (4), vòng lặp kết thúc.

Đáp án: B. 240

Câu 9. Số vòng lặp trong câu lệnh lặp For..to..do:
A. Giá trị đầu – giá trị cuối + 1
B. Giá trị cuối – giá trị đầu + 1
C. Giá trị đầu – giá trị cuối + 2
D. Giá trị đầu – giá trị cuối + 3

Lời giải:
Để tính số lần lặp của vòng lặp \(For := to do \), chúng ta lấy giá trị cuối trừ đi giá trị đầu rồi cộng thêm 1.
Ví dụ: \(For i:=1 to 5 do …\) sẽ lặp 5 – 1 + 1 = 5 lần.

Đáp án: B. Giá trị cuối – giá trị đầu + 1

Câu 10. Lệnh lặp for..do được sử dụng khi:
A. Lặp với số lần chưa biết trước
B. Lặp với số lần có thể biết trước
C. Lặp với số lần không bao giờ biết trước
D. Lặp với số lần biết trước

Lời giải:
Lệnh lặp \(FOR\) trong lập trình được thiết kế để sử dụng khi chúng ta đã xác định rõ ràng số lần lặp cần thực hiện, hoặc có thể tính toán được số lần lặp dựa trên các biến đầu vào.

Đáp án: D. Lặp với số lần biết trước

Câu 11. Trong lệnh lặp for..do của Pascal, trong mỗi vòng lặp, biến đếm thay đổi như thế nào?
A. +1;
B. +1 hoặc -1;
C. Một giá trị bất kì;
D. Một giá trị khác 0.

Lời giải:
Mặc định, trong cấu trúc \(For := to do \), biến đếm sẽ tăng thêm 1 sau mỗi lần thực hiện câu lệnh. Nếu sử dụng cấu trúc \(For := downto do \), biến đếm sẽ giảm đi 1. Tuy nhiên, câu hỏi hỏi về \(for..do\) thông thường, tức là \(for..to..do\).

Đáp án: A. +1;

Câu 12. Sau khi thực hiện đoạn chương trình Pascal:
For i:=1 to m do
Begin
y:=x;
x:=y – 1;
end;
chúng ta sẽ nhận được kết quả nào dưới đây?
A. x=x-m;
B. x=i-m;
C. x=x-i;
D. i=0 và x=y-1.

Lời giải:
Chúng ta hãy xem xét từng bước lặp:
Ban đầu, giả sử giá trị của x là \(x_0\).
Vòng lặp 1 (i=1): y = \(x_0\), x = y – 1 = \(x_0\) – 1.
Vòng lặp 2 (i=2): y = \(x_0\) – 1, x = y – 1 = (\(x_0\) – 1) – 1 = \(x_0\) – 2.
Vòng lặp 3 (i=3): y = \(x_0\) – 2, x = y – 1 = (\(x_0\) – 2) – 1 = \(x_0\) – 3.

Sau m vòng lặp, giá trị của x sẽ là \(x_0\) – m.
Vì vậy, kết quả cuối cùng là x = x – m (với x ban đầu là \(x_0\)).

Đáp án: A. x=x-m;

Câu 13. Dưới đây là một đoạn chương trình Pascal:
for i:=0 to 10 do
begin
s:=s+1;
end;
Sau khi thược hiện đoạn chương trình trên, giá trị của i là:
A. 0
B. 10
C. 11
D. Không xác định.

Lời giải:
Vòng lặp \(for i:=0 to 10 do\) sẽ thực hiện các câu lệnh bên trong khi \(i\) lần lượt nhận các giá trị từ 0 đến 10. Sau khi thực hiện câu lệnh với \(i = 10\), biến đếm \(i\) sẽ được tự động tăng lên 1 (theo quy tắc của \(to\)). Do đó, giá trị của \(i\) sau khi vòng lặp kết thúc sẽ là 11, và điều kiện để vòng lặp tiếp tục (i <= 10) sẽ không còn đúng nữa. Đáp án: C. 11

Câu 14. Trong câu lệnh lặp
For i :=1 to 10 do begin s :=s+i end;
Câu lệnh ghép được thực hiện bao nhiêu lần (nói cách câu lệnh ghép được thực hiện bao nhiêu lần (nói cách khác, bao nhiêu vòng lặp được thực hiện) ?
Không lần nào.
1 lần.
2 lần.
10 lần.

Lời giải:
Câu lệnh \(For i :=1 to 10 do\) có nghĩa là biến đếm \(i\) sẽ lần lượt nhận các giá trị từ 1 đến 10. Mỗi lần biến đếm nhận một giá trị và thực hiện câu lệnh bên trong được tính là một vòng lặp. Do đó, vòng lặp sẽ được thực hiện cho các giá trị i = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Tổng cộng là 10 lần.

Đáp án: 10 lần.

Câu 15. Lệnh lặp nào sau đây là đúng?
A. For < biến đếm >=<giá trị đầu> to <giá trị cuối> do <câu lệnh>;
B. For < biến đếm > :=<giá trị đầu> to <giá trị cuối> do <câu lệnh>;
C. For < biến đếm > :=<giá trị cuối> to <giá trị đầu> do <câu lệnh>;
D. For < biến đếm > : <giá trị đầu> to <câu lệnh> do <giá trị cuối>;

Lời giải:
Chúng ta xem xét cú pháp của vòng lặp FOR trong Pascal: \(For := to do ;\).
– A sai vì sử dụng \(>=\) thay vì \(:=\).
– B đúng với cú pháp chuẩn của vòng lặp FOR.
– C sai vì thứ tự \(giá trị cuối to giá trị đầu\) chỉ đúng khi biến đếm giảm dần và dùng \(downto\).
– D sai cú pháp, \(giá trị cuối\) đặt sai vị trí.

Đáp án: B. For < biến đếm > :=<giá trị đầu> to <giá trị cuối> do <câu lệnh>;

Câu 16. Câu lệnh Pascal nào sau đây là hợp lệ?
A. For i:=1 to 10 do writeln(‘A’);
B. For i:=1.5 to 10.5 do writeln(‘A’);
C. For i=1 to 10 do writeln(‘A’);
D. For i:=100 to 1 do writeln(‘A’);

Lời giải:
Chúng ta xét từng câu lệnh:
A. \(For i:=1 to 10 do writeln(‘A’);\) là hợp lệ. Biến đếm \(i\) là kiểu số nguyên, giá trị đầu nhỏ hơn giá trị cuối, đúng cú pháp.
B. \(For i:=1.5 to 10.5 do writeln(‘A’);\) không hợp lệ vì biến đếm \(i\) thường có kiểu số nguyên khi dùng với \(to\) hoặc \(downto\). Pascal cho phép biến đếm có kiểu thực với \(to\) nhưng với các giá trị đầu và cuối là số nguyên thì không hợp lệ. (Thực tế, trong Pascal, biến đếm của For thường là số nguyên hoặc kiểu liệt kê, kiểu dữ liệu thực cho vòng lặp này không phổ biến và có thể gây ra các vấn đề về làm tròn). Tuy nhiên, giả sử \(i\) được khai báo là \(real\), câu này vẫn có thể coi là hợp lệ về mặt cú pháp nhưng không phải là cách dùng phổ biến cho \(for..to..do\) với số lần biết trước. Trong bối cảnh bài tập này, chúng ta ưu tiên các trường hợp rõ ràng.
C. \(For i=1 to 10 do writeln(‘A’);\) không hợp lệ vì dùng dấu \(=\) thay vì \(:=\) để gán giá trị ban đầu cho biến đếm.
D. \(For i:=100 to 1 do writeln(‘A’);\) không hợp lệ vì dùng \(to\) nhưng giá trị đầu (100) lại lớn hơn giá trị cuối (1). Nếu muốn chạy từ 100 về 1, phải dùng \(downto\).

Đáp án: A. For i:=1 to 10 do writeln(‘A’);

Câu 17. Vòng lặp for..to…do là vòng lặp:
A. Biết trước số lần lặp
B. Chưa biết trước số lần lặp
C. Biết trước số lần lặp nhưng giới hạn là <=50 D. Biết trước số lần lặp nhưng giới hạn là >=50

Lời giải:
Đặc điểm chính của vòng lặp \(FOR\) là nó được sử dụng khi chúng ta đã xác định hoặc có thể xác định được số lần lặp lại hành động. Các giới hạn về giá trị (<=50 hay >=50) không phải là bản chất của vòng lặp \(FOR\), mà là do cách chúng ta đặt giá trị đầu và giá trị cuối.

Đáp án: A. Biết trước số lần lặp

Câu 18. Viết ngôn ngữ lập trình Pascal câu lệnh lặp for i:=1 to 10 do x:=x+1; thì biến đếm i được khai báo là kiểu dữ liệu:
A. Integer
B. Char
C. String
D. Tất cả các kiểu trên đều được

Lời giải:
Biến đếm trong vòng lặp \(for i:=1 to 10 do\) sẽ lần lượt nhận các giá trị số nguyên từ 1 đến 10. Do đó, kiểu dữ liệu phù hợp nhất cho biến \(i\) là \(Integer\) (số nguyên). Pascal không cho phép sử dụng các kiểu \(Char\) hay \(String\) làm biến đếm trực tiếp trong vòng lặp \(for..to..do\) với các giá trị số nguyên như vậy.

Đáp án: A. Integer

Câu 19. Trong câu lệnh lặp for ….downto…do, sau mỗi lần thực hiện câu lệnh, biến đếm bị:
A. Giảm đi 3 đơn vị
B. Giảm đi 2 đơn vị
C. Giảm đi 1 đơn vị
D. Giảm đi 4 đơn vị

Lời giải:
Câu lệnh \(for := downto do \) có nghĩa là biến đếm sẽ bắt đầu từ \(giá trị đầu\) và giảm dần từng đơn vị cho đến khi đạt đến hoặc nhỏ hơn \(giá trị cuối\). Do đó, sau mỗi lần thực hiện câu lệnh, biến đếm sẽ giảm đi 1 đơn vị.

Đáp án: C. Giảm đi 1 đơn vị

Câu 20. Đối với đoạn chương trình Pascal sau đây:
a:=2; b:=3;
for i:=1 to 5 do
if i mod 2=0 then a:=a+1;
b:=b+a;
cach :=‘ ‘;
writeln(a,cach,b);
– Cho biết lệnh writeln in ra màn hình giá trị a và b là bao nhiêu?
A. a=2; b=3
B. a=3; b=4
C. a=4; b=6
D. a=4; b=7

Lời giải:
Chúng ta sẽ theo dõi sự thay đổi của các biến \(a\), \(b\) và \(i\):
Khởi tạo: a = 2, b = 3

Vòng lặp i=1:
– \(i mod 2 = 1 mod 2 = 1\). Điều kiện \(i mod 2 = 0\) là sai.
– \(b := b + a = 3 + 2 = 5\).
Sau vòng lặp 1: a = 2, b = 5.

Vòng lặp i=2:
– \(i mod 2 = 2 mod 2 = 0\). Điều kiện \(i mod 2 = 0\) là đúng.
– \(a := a + 1 = 2 + 1 = 3\).
– \(b := b + a = 5 + 3 = 8\).
Sau vòng lặp 2: a = 3, b = 8.

Vòng lặp i=3:
– \(i mod 2 = 3 mod 2 = 1\). Điều kiện \(i mod 2 = 0\) là sai.
– \(b := b + a = 8 + 3 = 11\).
Sau vòng lặp 3: a = 3, b = 11.

Vòng lặp i=4:
– \(i mod 2 = 4 mod 2 = 0\). Điều kiện \(i mod 2 = 0\) là đúng.
– \(a := a + 1 = 3 + 1 = 4\).
– \(b := b + a = 11 + 4 = 15\).
Sau vòng lặp 4: a = 4, b = 15.

Vòng lặp i=5:
– \(i mod 2 = 5 mod 2 = 1\). Điều kiện \(i mod 2 = 0\) là sai.
– \(b := b + a = 15 + 4 = 19\).
Sau vòng lặp 5: a = 4, b = 19.

Sau khi vòng lặp kết thúc (i=6, lớn hơn 5), lệnh \(writeln(a,cach,b)\) sẽ in ra giá trị cuối cùng của a và b.

Có vẻ như có một sự nhầm lẫn trong đề bài hoặc các lựa chọn đáp án. Hãy kiểm tra lại cách hiểu về “b:=b+a” và “a:=a+1” trong mỗi vòng lặp.

Đề bài có ghi \(b:=b+a;\) sau \(if i mod 2=0 then a:=a+1;\). Điều này có nghĩa là \(b\) luôn được cập nhật sau khi \(a\) có thể đã thay đổi trong vòng lặp đó.

Chúng ta thực hiện lại từng bước một cách cẩn thận:
Khởi tạo: a = 2, b = 3

Vòng lặp i=1:
– \(if 1 mod 2 = 0\) là SAI.
– \(b := b + a\) => \(b := 3 + 2 = 5\).
Kết thúc vòng lặp 1: a = 2, b = 5.

Vòng lặp i=2:
– \(if 2 mod 2 = 0\) là ĐÚNG.
– \(a := a + 1\) => \(a := 2 + 1 = 3\).
– \(b := b + a\) => \(b := 5 + 3 = 8\).
Kết thúc vòng lặp 2: a = 3, b = 8.

Vòng lặp i=3:
– \(if 3 mod 2 = 0\) là SAI.
– \(b := b + a\) => \(b := 8 + 3 = 11\).
Kết thúc vòng lặp 3: a = 3, b = 11.

Vòng lặp i=4:
– \(if 4 mod 2 = 0\) là ĐÚNG.
– \(a := a + 1\) => \(a := 3 + 1 = 4\).
– \(b := b + a\) => \(b := 11 + 4 = 15\).
Kết thúc vòng lặp 4: a = 4, b = 15.

Vòng lặp i=5:
– \(if 5 mod 2 = 0\) là SAI.
– \(b := b + a\) => \(b := 15 + 4 = 19\).
Kết thúc vòng lặp 5: a = 4, b = 19.

Vòng lặp kết thúc. Lệnh \(writeln(a,cach,b)\) sẽ in ra \(4 19\).
Không có đáp án nào khớp với kết quả này. Tuy nhiên, hãy xem xét các lựa chọn đáp án và suy đoán xem có thể có cách hiểu khác hoặc sai sót trong đề bài/đáp án.

Có một khả năng là dòng \(b:=b+a;\) nằm ngoài vòng lặp \(if\) nhưng vẫn trong vòng lặp \(for\). Điều này đã được xử lý trong các bước trên.

Một khả năng khác là \(b:=b+a;\) chỉ được thực hiện khi điều kiện \(i mod 2=0\) đúng. Tuy nhiên, vị trí của nó cho thấy nó luôn được thực hiện.

Hãy thử xem xét lại từng đáp án:
A. a=2; b=3 (Không thể, a và b đã thay đổi)
B. a=3; b=4 (Không khớp)
C. a=4; b=6 (a=4 là đúng sau vòng lặp i=4, nhưng b=6 không khớp)
D. a=4; b=7 (a=4 là đúng, b=7 không khớp)

Nếu giả định rằng \(b:=b+a;\) chỉ thực hiện khi \(i\) chẵn, thì:
i=1: a=2, b=3 (không làm gì với b) -> b=3
i=2: a=3, b=3+3=6
i=3: a=3, b=6
i=4: a=4, b=6+4=10
i=5: a=4, b=10
Kết quả a=4, b=10. Vẫn không khớp.

Hãy quay lại đề bài gốc và các đáp án để tìm kiếm sự nhầm lẫn có thể xảy ra.
Có thể đề bài gốc có lỗi. Tuy nhiên, nếu chúng ta phải chọn một đáp án dựa trên khả năng sai sót nhỏ nhất, thì chúng ta cần xem xét kỹ lại logic.

Giả sử có một lỗi đánh máy trong \(b:=b+a;\) và nó nên là một cái gì đó khác.
Nhưng nếu giữ nguyên, chúng ta có a=4, b=19.

Xem xét đáp án C: a=4; b=6.
a=4 là đúng. Để b=6, thì:
– Sau i=1: b = 3 + 2 = 5 (Nếu không có if)
– Sau i=2: a=3, b = 5 + 3 = 8 (Nếu có if)
Nếu b chỉ cập nhật khi i chẵn:
i=1: a=2, b=3
i=2: a=3, b=3+3=6.
i=3: a=3, b=6
i=4: a=4, b=6+4=10.

Có lẽ lỗi nằm ở chỗ: \(b:=b+a;\) chỉ thực hiện khi \(i\) lẻ?
i=1: a=2, b=3+2=5
i=2: a=3, b=5
i=3: a=3, b=5+3=8
i=4: a=4, b=8
i=5: a=4, b=8+4=12

Tuy nhiên, vị trí của \(b:=b+a;\) là sau \(if…then…\), nghĩa là nó luôn được thực thi.

Nếu chúng ta nhìn vào đáp án C: a=4, b=6.
a=4 là giá trị cuối cùng của a sau khi i=4.
Để b=6, điều này có nghĩa là có một phép cộng nào đó dẫn đến 6.
Ban đầu b=3.
Các phép cộng cho b có thể là:
Nếu \(b:=b+a;\) chỉ thực hiện khi \(i\) chẵn:
i=2: b = 3 + a(trước đó là 2) = 5.
i=4: b = 5 + a(trước đó là 3) = 8.

Nếu \(b:=b+a;\) thực hiện với \(a\) là giá trị hiện tại của \(a\) ngay sau khi nó có thể thay đổi:
i=1: a=2, b=3. \(if\) sai. \(b=3+2=5\).
i=2: a=2. \(if\) đúng. a=3. \(b=5+3=8\).
i=3: a=3, b=8. \(if\) sai. \(b=8+3=11\).
i=4: a=3. \(if\) đúng. a=4. \(b=11+4=15\).
i=5: a=4, b=15. \(if\) sai. \(b=15+4=19\).

Có thể đề bài muốn hỏi về giá trị của \(a\) và \(b\) SAU VÒNG LẶP \(if\) NHƯNG TRƯỚC VÒNG LẶP \(b:=b+a;\)? Không, vì \(b:=b+a;\) nằm cùng cấp với \(if\).

Giả định có một lỗi ở đề bài và đáp án C là gần đúng nhất về \(a\).
Nếu a=4, b=6:
Ban đầu a=2, b=3.
i=1: a=2, b=3+2=5 (Giả sử luôn cộng)
i=2: a=2. if đúng, a=3. b=5+3=8.
i=3: a=3, b=8+3=11.
i=4: a=3. if đúng, a=4. b=11+4=15.
i=5: a=4, b=15+4=19.

Nếu đề bài có lỗi và vòng lặp \(b:=b+a;\) thực sự là \(b:=b+1;\) thì sao?
i=1: a=2, b=3. if sai. b=3+1=4.
i=2: a=2. if đúng, a=3. b=4+3=7.
i=3: a=3, b=7+3=10.
i=4: a=3. if đúng, a=4. b=10+4=14.
i=5: a=4, b=14+4=18.

Hãy nhìn vào đáp án C: a=4, b=6.
a=4 đạt được sau i=4.
Để b=6: Ban đầu b=3. Cần cộng thêm 3.
Có thể \(b\) chỉ được cộng khi \(i\) lẻ?
i=1: a=2, b=3+2=5.
i=3: a=3, b=5+3=8.
i=5: a=4, b=8+4=12.

Nếu b=6 là kết quả, thì có lẽ chỉ có 1 lần cộng a vào b.
Hoặc \(a\) không đổi, \(b\) chỉ cộng 1 lần.

Giả sử đáp án C là đúng: a=4, b=6.
Giá trị cuối cùng của \(a\) là 4, điều này xảy ra khi \(i=4\).
Giá trị cuối cùng của \(b\) là 6.
Ban đầu b=3.
Để lên 6, \(b\) phải tăng thêm 3 đơn vị.

Có thể lỗi ở \(b:=b+a;\) và nó chỉ thực hiện 1 lần?
Hoặc là \(a\) chỉ tăng 1 lần (làm \(a=3\)) và \(b\) tăng 1 lần (làm \(b=6\))?

Với logic hiện tại của đề bài, kết quả là a=4, b=19.
Do không có đáp án nào khớp với kết quả tính toán đúng, tôi sẽ không đưa ra đáp án cuối cùng cho câu 20, nhưng sẽ giải thích cách tính ra kết quả đúng. Nếu đây là bài thi, học sinh nên báo lại với giáo viên về sự không khớp này.

Tuy nhiên, nếu ép buộc phải chọn đáp án C: a=4, b=6.
Giá trị \(a=4\) là đúng sau khi \(i=4\).
Để \(b\) là 6, trong khi ban đầu \(b=3\), thì \(b\) cần tăng thêm 3.
Điều này có thể xảy ra nếu \(b:=b+a\) chỉ thực hiện 1 lần duy nhất, và \(a\) lúc đó là 3.
Nhưng \(a\) chỉ bằng 3 khi \(i=2\). Và \(b\) cũng cập nhật ở \(i=4\).

Giả sử có một lỗi đánh máy ở đề bài và nó nên là:
a:=2; b:=3;
for i:=1 to 5 do
begin
if i mod 2 = 0 then a:=a+1;
b:=b+1; // Thay vì b:=b+a
end;
Thì:
i=1: a=2, b=3+1=4
i=2: a=3, b=4+3=7
i=3: a=3, b=7+1=8
i=4: a=4, b=8+3=11
i=5: a=4, b=11+1=12.
Kết quả a=4, b=12. Vẫn không khớp.

Nếu đề bài là:
a:=2; b:=3;
for i:=1 to 5 do
begin
if i mod 2 = 0 then a:=a+1;
if i mod 2 = 0 then b:=b+a; // b chỉ cộng khi i chẵn
end;
Thì:
i=1: a=2, b=3. if sai.
i=2: a=2. if đúng, a=3. if đúng, b=3+3=6.
i=3: a=3, b=6. if sai.
i=4: a=3. if đúng, a=4. if đúng, b=6+4=10.
i=5: a=4, b=10. if sai.
Kết quả a=4, b=10. Vẫn không khớp.

Rất tiếc, với đề bài và các lựa chọn đưa ra, câu 20 không có đáp án đúng theo logic lập trình chuẩn. Tuy nhiên, nếu phải lựa chọn đáp án C (a=4; b=6) vì \(a=4\) là đúng và \(b=6\) là một giá trị nhỏ, có thể nó ám chỉ một số lần lặp rất ít. Nhưng điều này không có cơ sở.


Chúc các em học tốt! Nếu có bất kỳ câu hỏi nào, đừng ngần ngại hỏi thầy nhé.

Trả lời bởi: Giáo viên Chuyên Môn
▲ 4

Câu 1:   A

Câu 2:   D

Câu 3:   D

Câu 4:   B

Câu 5:   C

Câu 6:   C

Câu 7:   B

Câu 8:   B

Câu 9:   B

Câu 10:   D

Trả lời bởi: YiYi Đức Nhật
▲ 2

1.A

2.D

3.D

4.B

5.C

6.C

7.B

8.B

9.B

10.D

11.A

12.khong biet

13.D

14.10 lan

15.B

16.A

17.A

18.A

19.C

20.D

Trả lời bởi: Nguyên Hưng Trần

Viết một bình luận

WhatsApp
Facebook
Chat Zalo
Zalo
097.538.4646
Zalo
Giới thiệu Như Hảo