CÁCH CHUYỂN ĐỔI TỪ FOR – DO SANG WHILE – DO TRONG LẬP TRÌNH PASCAL

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.