حلقه 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

ویژگیforwhile
تعداد تکراراز اول مشخصنامشخص/وابسته به شرط
شمارندهخودکار مدیریت می‌شوددستی باید تغییر دهید
خطر حلقه بی‌نهایتندارددارد (اگر تغییر فراموش شود)
انعطافکمزیاد
قانون سرانگشتی: اگر می‌دانید «n بار» تکرار می‌شود → for. اگر می‌دانید «تا وقتی که...» → while.

خلاصه

این مبحث بخشی از دوره آموزش کامل پاسکال است.

ابزارهای مرتبط