(جاوا) حلقه ها. حلقه با پارامتر (for)


موقعیتی را تصور کنید که باید همان کلمه را روی صفحه نمایش دهیم، مثلا کلمه "HELLO" را 10 بار بگوییم. چه کنیم؟
می توانید دستور را 10 بار بگیرید و بنویسید cout << "سلام";

اما اگر شما نه 10 بار، بلکه 20، 30، 40 بار؟، و اگر 200 بار نیاز داشته باشید، چه؟ در این صورت کپی کردن زمان بسیار زیادی طول خواهد کشید. و اگر لازم است کاربر انتخاب کند که چند بار اطلاعات روی صفحه نمایش داده شود؟ 

برای کنار آمدن با این کار، ساخت ویژه ای به نام LOOP
به ما کمک می کند
حلقه یک ساختار الگوریتمی است که در آن توالی خاصی از دستورات چندین بار تکرار می شود.


در زبان برنامه نویسی جاوا دو نوع حلقه وجود دارد: یک حلقه با متغیر (for) و یک حلقه با یک شرط (while و do...while)

بیایید آشنایی خود را با چرخه ها از نوع اول شروع کنیم.

حلقه با یک متغیر یا با تعداد مشخصی از مراحل (برای)

اغلب اتفاق می افتد که تعداد تکرارهای برخی از اقدامات را می دانیم یا می توانیم با استفاده از داده های شناخته شده تعداد تکرارها را محاسبه کنیم. برخی از زبان های برنامه نویسی دستوری دارند که در زبان روسی مانند REPEAT (تعداد دفعات) به نظر می رسد - یعنی می توانیم تعداد دقیق تکرار را مشخص کنیم. 

جالب است که ببینیم این چرخه در سطح ماشین چگونه کار می کند:
1. یک سلول حافظه خاص در حافظه اختصاص داده می شود و تعداد تکرارها روی آن نوشته می شود،
2. وقتی برنامه یک بار بدنه حلقه را اجرا می کند، محتویات این سلول (counter) یک کاهش می یابد.
3. اجرای حلقه زمانی به پایان می رسد که این سلول صفر شود.

در زبان برنامه نویسی جاوا چنین ساختاری وجود ندارد، اما ساختار for وجود دارد.  

شکل کلی دستور حلقه for به صورت زیر است: <پیش> برای (/*expression1*/; /*expression2*/; /*expression3*/ ) { /*یک دستور یا بلوک عبارات - بدنه حلقه*/; } این ساخت مستلزم آن است که ما
1. به صراحت یک سلول حافظه را که یک شمارنده خواهد بود اختصاص داد و مقدار اولیه آن را تنظیم کرد
2. یک شرط نوشته شد که تحت آن بدنه چرخه اجرا می شود
3. نحوه تغییر مقدار در این سلول را نشان دهید.

در قسمت عملی سعی می کنیم کلمه Hello را 10 بار نمایش دهیم. در کارهای بعدی این ساخت و ساز را با جزئیات بیشتری تحلیل خواهیم کرد.

حلقه for وسیله ای برای گام برداشتن در اقدامات مکرر است. بیایید نگاهی دقیق تر به نحوه عملکرد آن بیندازیم.

به طور معمول، بخش‌هایی از یک حلقه for مراحل زیر را انجام می‌دهند: 
1. تنظیم مقدار اولیه. 
2. انجام آزمایش شرط برای ادامه حلقه. 
3. اقدامات حلقه را انجام دهید. 
4. مقدار(های) مورد استفاده در آزمایش را به روز کنید. 
و سپس مراحل 2-4 تکرار می شود تا زمانی که شرط برآورده شود. به محض اینکه شرط نادرست شد، حلقه خاتمه می یابد و دستور زیر دستور حلقه for اجرا می شود.

اجازه دهید به شکل کلی عبارت حلقه برگردیم و همه قسمت ها را با جزئیات بیشتری تجزیه و تحلیل کنیم <پیش> برای (/*expression1*/; /*expression2*/; /*expression3*/ ) { /*یک دستور یا بلوک عبارات - بدنه حلقه*/; }

عبارت 1

مسئول تنظیم مقدار اولیه متغیر چرخه (شمارنده)، با نقطه ویرگول به پایان می رسد
مثلا : <پیش> گزینه 1) i=0; //به متغیر چرخه i مقدار اولیه برابر با صفر اختصاص داده می شود. با چنین رکوردی، //متغیر i باید قبل از حلقه اعلام شود گزینه 2) int i=0; //متغیر i را می توان بلافاصله در هدر چرخه اعلام کرد، اما // در این مورد، پس از حلقه از حافظه پاک خواهد شد گزینه 3)؛ //بدون مقداردهی اولیه و اعلان متغیر سیکل، // در این مورد می توان آن را قبل از حلقه اعلام کرد بیان 2 <پیش> این شرط برای ادامه حلقه  for است، برای درستی بررسی می شود. i<=10 // تا زمانی که i کمتر یا مساوی 10 باشد، حلقه اجرا خواهد شد. شرایط می تواند هر چیزی باشد عبارت 3  <پیش> مقدار متغیر شمارنده را تغییر می دهد. بدون این مقدار، حلقه بی نهایت در نظر گرفته می شود i<=10 // تا زمانی که i کمتر یا مساوی 10 باشد، حلقه اجرا خواهد شد. شرایط می تواند هر چیزی باشد بیایید نوشتن عنوان حلقه for را تمرین کنیم

یکی دیگر از ویژگی های رکورد این است که اگر فقط یک عملگر در بدنه حلقه وجود داشته باشد، می توان براکت ها را حذف کرد.

در هر قسمت سرصفحه ممکن است چندین عبارت وجود داشته باشد که با کاما از هم جدا شده اند.
نمونه‌های عنوان:
<پیش> برای ( i = 0; i < 10; i ++ ) { ... } //عنوان استاندارد <پیش> برای (i = 0، x = 1.; i < 10; i += 2، x *= 0.1){ ... } // در این مورد، از دو متغیر استفاده می کنیم که پس از اجرای بدنه حلقه تغییر می کنند - اینها متغیرهای i و x هستند. // متغیر i با مرحله 2 تغییر می کند - i+=2 - مختصر i=i+2 // متغیر x با هر مرحله 0.1 برابر افزایش می یابد x=x*0.1 - مخفف x*=0.1

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

به عنوان مثال، باید مربع های اعداد از 1 تا N را نمایش دهیم، جایی که مقدار متغیر N از صفحه کلید توسط کاربر وارد می شود.
برنامه به شکل زیر خواهد بود:
  <پیش> #include <iostream> با استفاده از namespace std. main() { int i,N; // در فاصله؛ متغیر حلقه، N - حداکثر عددی که مربع را برای آن محاسبه می کنیم cin>> N; // ورودی N از صفحه کلید برای (i = 1; i <= N; i ++) // حلقه: برای همه i از 1 تا N - متغیر i به ترتیب مقادیر 1 تا N را می گیرد { cout << "کوادرات چیسلا "<<i<<" کلاغ " <<i*i<<"\n"; // خروجی مربع یک عدد در یک فرمت خاص و انتقال به یک خط جدید } } هنگام ورود به حلقه، عبارت i = 1 اجرا می شود و سپس متغیر i با هر مرحله یک (i ++) افزایش می یابد. حلقه اجرا می شود در حالی که شرط i <= N درست است. در بدنه حلقه، تنها دستور خروجی، خود عدد و مربع آن را بر اساس فرمت مشخص شده روی صفحه چاپ می کند.
برای مربع یا سایر توانای کم، بهتر است از ضرب استفاده کنید.

برنامه را اجرا کنید و نتیجه کار آن را با مقادیر مختلف متغیر N ببینید.