Không có cách tính số vòng lặp của câu lệnh lặp chưa biết trước (while..do).
While..do chỉ lặp đến khi điều kiện sai.
Chúng ta có ví dụ chương trình như sau:
uses crt;
var s,i:integer;
begin
clrscr;
s:=0;i:=1
while i<=3 do
begin
s:=s+i;
i:=i+1;
end;
write(s,' ',i);
readln;
end.
-----------
Chú ý đến đoạn tô đậm ta biết được:
- Biến s=0; i=1.
- Điều kiện là i<=3 (i bé hơn hoặc bằng 3).
- Mỗi vòng lặp sẽ s:=s+i trước sau đó i:=i+1 sau.
Chúng ta giải quyết như sau:
Lần 1 i<=3 (TM): s=s+i=0+1=1; i=i+1=1+1=2
Lần 2 i<=3 (TM): s=s+i=1+2=3; i=i+1=2+1=3
Lần 3 i<=3 (KTM): s=s+i=3+3=6; i=i+1=3+1=4
Vậy từ đây số vòng lặp là 3 và giá trị của s=6; i=4.
Không giống for..do, giá trị của một biến trong while..do sẽ luôn thay đổi, vì nó không biết trước vòng lặp của nó là bao nhiêu.
Giống như việc bạn học bài và không biết khi nào bạn sẽ hiểu bài. Nhưng for..do thì lại khác, nó cho bạn biết trước số lần lặp tương đồng với số lần bạn học là bao nhiêu.
*Lưu ý: cách tính số vòng lặp của while..do $\ne$ for..do.