حلقه while
حلقه شرطی while...do، تفاوت با for و الگوی شمارنده دستی.
وقتی تعداد تکرار را نمیدانیم
حلقه for وقتی خوب است که از قبل بدانیم چند بار تکرار میشود. اما اگر شرط پایان وابسته به محاسبات باشد — مثل «تا وقتی عدد از ۱۰۰ کوچکتر است دو برابرش کن» — از while استفاده میکنیم.
ساختار
while شرط do
دستور;
یعنی: «تا وقتی شرط برقرار است، این کار را تکرار کن».
مثال: شمارش ۱ تا ۵
var i: integer;
begin
i := 1; { ۱. مقدار اولیه }
while i <= 5 do { ۲. شرط }
begin
writeln(i);
i := i + 1; { ۳. تغییر شمارنده! }
end;
end.
سه عنصر حیاتی هر while: مقدار اولیه، شرط، و تغییر به سمت پایان. اگر تغییر را فراموش کنید، حلقه بینهایت میشود!
مثال: دو برابر کردن تا سقف
var n: integer;
begin
n := 3;
while n < 100 do
begin
writeln(n);
n := n * 2;
end;
writeln('Final: ', n);
end.
خروجی: 3, 6, 12, 24, 48, 96 — بعد 192 که از 100 بزرگتر است و حلقه تمام میشود.
مثال: مجموع ارقام عدد
var n, digitSum: integer;
begin
n := 4527;
digitSum := 0;
while n > 0 do
begin
digitSum := digitSum + (n mod 10); { رقم آخر }
n := n div 10; { حذف رقم آخر }
end;
writeln('مجموع ارقام: ', digitSum); { 4+5+2+7=18 }
end;
مثال: الگوریتم کولاتز
var n, steps: integer;
begin
n := 27;
steps := 0;
while n <> 1 do
begin
if n mod 2 = 0 then
n := n div 2
else
n := 3 * n + 1;
steps := steps + 1;
end;
writeln('تعداد قدمها تا رسیدن به ۱: ', steps);
end;
while در برابر for
| ویژگی | for | while |
|---|---|---|
| تعداد تکرار | از اول مشخص | نامشخص/وابسته به شرط |
| شمارنده | خودکار مدیریت میشود | دستی باید تغییر دهید |
| خطر حلقه بینهایت | ندارد | دارد (اگر تغییر فراموش شود) |
| انعطاف | کم | زیاد |
قانون سرانگشتی: اگر میدانید «n بار» تکرار میشود → for. اگر میدانید «تا وقتی که...» → while.
خلاصه
while شرط do— تا وقتی شرط درست است- شرط قبل از هر تکرار بررسی میشود
- سه عنصر: مقدار اولیه + شرط + تغییر
- مراقب حلقه بینهایت باشید!
این مبحث بخشی از دوره آموزش کامل پاسکال است.