حل

حلقه در C++

12 تمرین

درباره‌ی حلقه

از «حلقه» برای اجرای مکرر یک منطق استفاده می‌شود. رایج‌ترین دو نوع آن while loop (حلقه‌ی نامعین) و for loop (حلقه‌ی معین یا شمارشی) هستند. حلقه‌ی for each هم وجود دارد که در مفهوم دیگری به آن می‌رسیم.

نگارش کلی

حلقه‌ی for loop از یک سرآیند و یک «بلوک کد» تشکیل می‌شود که بدنه‌ی حلقه را در آکولاد جا می‌دهد. سرآیند از ۳ مؤلفه تشکیل می‌شود که با نقطه‌ویرگول ; از هم جدا می‌شوند: مقداردهی اولیه، شرط و یک عبارت دیگر. هر یک از این‌ها می‌تواند خالی باشد.

for (init-statement; condition; expression) {
  some_statement;
}
  • مؤلفه‌ی مقداردهی اولیه کدی است که فقط یک‌بار و پیش از آغاز حلقه اجرا می‌شود.
  • مؤلفه‌ی شرط باید عبارتی باشد که به یک مقدار «منطقی» ارزیابی شود و تعیین کند حلقه کِی باید متوقف شود. کد داخل حلقه تا زمانی اجرا می‌شود که این شرط به «درست» ارزیابی شود. به محض این‌که این عبارت به «غلط» ارزیابی شود، دیگر هیچ تکرار دیگری از حلقه اجرا نخواهد شد.
  • مؤلفه‌ی عبارت کدی است که در پایان هر تکرار اجرا می‌شود.

while loop بدنه‌ی خود را تا زمانی اجرا می‌کند که بررسی شرطش «درست» باشد. قطعه‌کد زیر نشان می‌دهد چگونه یک حلقه‌ی for را به یک حلقه‌ی while تبدیل کنیم.

init-statement;
while(condition) {
    some_statement;
    expression;
}

میان‌پرده: افزایش و کاهش

هنگام کار با حلقه‌ها اغلب لازم است ۱ واحد به یک متغیر شمارنده اضافه یا از آن کم کنیم. این کار آن‌قدر رایج است که برای آن عملگرهای ویژه‌ای در نظر گرفته شده است: ++ و --.

این عملگرها دو شکل پیشوندی و پسوندی دارند. شکل پیشوندی متغیر را پیش از استفاده در دستور تغییر می‌دهد و شکل پسوندی این کار را پس از آن انجام می‌دهد. احتمالاً بیشتر اوقات شکل پیشوندی همان چیزی است که می‌خواهید.

int a{3};
int b{--a};
// b is 2, a is now 2
int c{a++};
// c is 2, a is now 3

حلقه‌ی For: یک مثال

مؤلفه‌ی مقداردهی اولیه معمولاً یک متغیر شمارنده را آماده می‌کند، شرط بررسی می‌کند که حلقه باید ادامه یابد یا متوقف شود و مؤلفه‌ی پایانی معمولاً شمارنده را در پایان هر تکرار یک واحد افزایش می‌دهد.

int sum{0};
for (int i{1}; i < 10; ++i) {
  sum += i;
}

این حلقه اعداد 1 تا 9 را با هم جمع می‌کند (شامل 9).

Break و Continue

در داخل بدنه‌ی حلقه می‌توانید از «کلیدواژه‌ی break» استفاده کنید تا اجرای حلقه را کاملاً متوقف کنید:

int sum{2};
while(true) {
    sum *= 2;
    if (sum > 1000)
        break;
}
// sum is now 1024

در مقابل، کلیدواژه‌ی continue فقط اجرای تکرار جاری را متوقف می‌کند و با تکرار بعدی ادامه می‌دهد:

int equal_sum{0};
for (int i{1}; i < 7; ++i) {
  if  (n%2 == 1) {
    continue;
  }
  equal_sum += i;
}
// equal_sum is now 12

نکته: معمولاً درک منطق حلقه زمانی آسان‌تر است که استفاده از break و continue به کمترین حد رسیده یا کاملاً کنار گذاشته شده باشد.

ویرایش از طریق GitHub این پیوند در پنجره یا زبانه‌ی جدیدی باز می‌شود

حلقه را یاد بگیرید

تمرین کردن قفل شده است

برای تمرین حلقه قفل 4 تمرین دیگر را باز کنید