حلقههای شمارشی را در واقع میتوان به این صورت تعبیر کرد که همان حلقههای شرطی هستند با این تفاوت که حلقههای شمارشی، همان طور که از نامشان مشخص است دارای یک شمارنده هستند که به میزان خاصی حلقه را تکرار میکنند. همان طور که به نظر میآید میتوان حلقهی شمارشی را به وسیلهی حلقه شرطی ایجاد کرد که نحوهی این کار را در ادامه خواهیم دید.
در زیر میتوانید شکل کلی این نوع حلقه را مشاهده کنید.
for (عمل افزایشی یا کاهشی ; شرط حلقه ; تعریف و مقداردهی متغیرهای حلقه){ //statement }
نحوهی عملکرد حلقه شمارشی بالا به این صورت است که ابتدا وارد قسمت تعریف میشود و به متغیر ها مقدار میدهد.سپس شرط حلقه چک میشود و در صورت برقرار بودن آن، وارد حلقه شده و دستورات داخل آن را انجام میدهد.پس از اجرای دستورات داخل حلقه به قسمت تغییر مقدار متغیرها(افزایش یا کاهش آن ها) رفته و پس از اجرای این تغییرات، دوباره شرط حلقه را چک میکند و در صورات برقرار بودن وارد حلقه میشود. این کار آنقدر تکرار میشود تا شرط حلقه دیگر برقرار نباشد و از حلقه خارج شویم.
دقت کنید که قسمت " تعریف و مقداردهی متغیرهای حلقه " تنها یک بار اجرا میشود.
شبه کد نشان داده شده در زیر نحوهی پیاده سازی حلقه شمارشی به کمک حلقه شرطی را نشان میدهد.
تعریف و مقدار دهی متغیر ها while (شرط حلقه) { //statement عمل افزایشی یا کاهشی }
به وضوح مشخص است که شبه کد بالا همان حلقه شمارشی است.
این دستور، یکی از دستورهای کنترلی است که در حلقه ها استفاده میشود.(این دستور هم در حلقههای شمارشی استفاده میشود و هم درحلقههای شرطی) نحوهی عملکرد این دستور به این صورت است که هرگاه در حلقهها به این دستور برسیم، بلافاصله از حلقه خارج میشویم و ادامهی کار را از دستورات پس از حلقه پی میگیریم. در واقع با گذاشتن این دستور در مکان مناسب در حلقه میتوانیم هر زمان که خواستیم از حلقه خارج شویم و برای اتمام حلقه، به انجام کل حلقه نیازی نباشد.
دستور کنترلی دیگری که در حلقه کاربرد دارد، دستور continue است. نحوهی عملکرد این دستور به این صورت است که هرگاه در طول اجرای حلقه به این دستور رسیدیم، ادامهی برنامه از ابتدای حلقه پی گرفته میشود. به عبارت بهتر دستوراتی که بعد از continue قرار دارند، در صورت رسیدن به این دستور کنترلی اجرا نمیشوند.
for(int i = 0; i < 20; i++){ if (i < 6) continue; cout<< i<<endl; if(i == 4 || i == 13) break; }
در این حلقه مقدار اولیهی i برابر 0 است وطبق حلقه تا مقدار 20 پیش میرود. اگر اولین if را در نظر بگیریم، مشاهده میشود، تا زمانی که مقدار i از 6 کمتر است، شرط اول برقرار میشود و دستور continue اجرا میشود.طبق توضیحات بالا به اول حلقه باز میگردیم و مقدار i را اضافه میکنیم. پس از تکرار این عمل و بعد از این که مقدار i به 6 رسید دیگر شرط اول برقرار نیست و مقدار 6 چاپ میشود. چون شرط دوم هم برقرار نیست پس این عمل آنقدر ادامه مییابد تامقدار i به 13 برسد.بعد از این حالت شرط دوم برقرار شده، و دستور break اجرا میشود. پس از اجرای این دستور حلقه تمام میشود. بنابراین در این حلقه اعداد 6 تا 13 چاپ میشوند.
while(true) { int input; cin>>input; if (input == -1) break; }
در این کد آنقدر از ورودی، داده میگیرد تا کاربر عدد 1- را وارد کند. در این صورت از حلقه خارج میشود.