حلقههای شمارشی را در واقع میتوان به این صورت تعبیر کرد که همان حلقه های شرطی هستند با این تفاوت که حلقههای شمارشی، همان طور که از نامشان مشخص است دارای یک شمارنده هستند که به میزان خاصی حلقه را تکرار میکنند. همان طور که به نظر می آید می توان حلقهی شمارشی را به وسیلهی حلقه شرطی ایجاد کرد که نحوه ی این کار را در ادامه خواهیم دید.
در زیر می توانید شکل کلی این نوع حلقه را مشاهده کنید.
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- را وارد کند. در این صورت از حلقه خارج میشود.