CÁCH CHUYỂN ĐỔI TỪ FOR – DO SANG WHILE – DO
(Nguyễn Văn Ninh – Giáo viên Tin học)
Ở bài 9 sách giáo khoa Tin học 11, học sinh đã được tìm hiểu câu lệnh lặp với số lần biết trước (For – do) và lặp với số lần chưa biết trước (While – do). Bài viết xin chia sẻ với các em cách chuyển đổi từ câu lệnh For – do sang While – do (cách chuyển đổi ngược lại không phải lúc nào cũng thực hiện được)
1/ Cách chuyển đổi từ For – do sang While – do:
– Câu lệnh For – do:
+ Dạng tiến:
For <biến điếm>:= <giá trị đầu> to <giá trị cuối> do <câu lệnh>;
+ Dạng lùi:
For <biến điếm>:= <giá trị cuối> downto <giá trị cuối> do <câu lệnh>;
– Câu lệnh While – do:
While <điều kiện> do <câu lệnh>;
– Chuyển For – do thành While – do:
+ Cách 1:
<Biến đếm> := <giá trị đầu>;
While (<Biến đếm> <= <giá trị cuối>) do
Begin
<câu lệnh>;
<tăng biến đếm 1 đơn vị>;
End;
+ Cách 2:
<Biến đếm> := <giá trị cuối>;
While (<Biến đếm> >= <giá trị đầu>) do
Begin
<câu lệnh>;
<giảm biến đếm 1 đơn vị>;
End;
2/ Ví dụ minh họa:
a/ Ví dụ 1: Tính và đưa ra tổng các số từ 1 đến n? (n là số nguyên dương được nhập vào từ bàn phím)
Sử dụng For – do:
Var i, n: integer;
s: word;
Begin
Readln(n);
For i:=1 to n do s:= s+i;
Write(s);
End.
Chuyển thành While – do:
+ Dạng 1:
Var i, n: integer;
s: word;
Begin
Readln(n);
i:=1;
While (i <= n) do
Begin
s:= s+i;
i:=i+1;
end;
Write(s);
End.
+ Dạng 2:
Var i, n: integer;
s: word;
Begin
Readln(n);
i:=n;
While (i >= 1) do
Begin
s:= s+i;
i:=i-1;
end;
Write(s);
End.
b/ Ví dụ 2: Lập trình để giải bài toán cổ sau:
“Vừa gà vừa chó.
Bó lại cho tròn.
Ba mươi sáu con,
Một trăm chân chẵn.
Hỏi có bao nhiêu con mỗi loại?”
Sử dụng For – do:
Var ga: byte;
Begin
For ga:=1 to 24 do
If (2*ga + (100-ga)*4 = 100) then
Write(‘so ga la:’,ga,’ so cho la:’, 36-ga);
End.
Chuyển thành While – do:
+ Dạng 1:
Var ga: byte;
Begin
ga:=1;
While (i<= 24) do
Begin
If (2*ga + (100-ga)*4 = 100) then
Write(‘so ga la:’,ga,’ so cho la:’, 36-ga);
ga:=ga+1;
End;
End.
+ Dạng 2:
Var ga: byte;
Begin
ga:=24;
While (i>=1) do
Begin
If (2*ga + (100-ga)*4 = 100) then
Write(‘so ga la:’,ga,’ so cho la:’, 36-ga);
ga:=ga-1;
End;
End.