دستورالعمل برای حلقهیک ساختار الگوریتمی را پیاده سازی می کند حلقه با پارامتر(یا یک حلقه با شمارنده). حلقه for زمانی استفاده می شود که در برنامه، قبل از اجرای دستورالعمل های حلقه، تعداد مراحل این حلقه مشخص شود (یا از پیش تعیین شده باشد). در فلوچارت، دستور for به صورت زیر نشان داده شده است:

نحو:

برای ( مقداردهی اولیه; وضعیت; تغییر) (دستورالعمل های بدنه حلقه؛ )

اگر یک دستور در بدنه حلقه وجود داشته باشد، می توان ( ) را حذف کرد. متغیر پارامتر چرخه (شمارنده) می تواند از هر نوع عددی باشد. این باعث می شود که حلقه for C++ به اندازه حلقه while همه کاره باشد. در بخش اصلاح، عملیات افزایش (یا کاهش) پسوند یا پیشوند بیشتر مورد استفاده قرار می گیرد، اما هر عبارت انتسابی که مقدار پارامتر حلقه را تغییر می دهد می تواند استفاده شود. حلقه به این صورت عمل می کند:

  • در ابتدا، توصیف و مقداردهی اولیه متغیر شمارنده انجام می شود.
  • در مرحله بعد، شرط را بررسی کنید: اگر عبارت دارای مقدار باشد درست است، واقعی، یک تکرار وجود خواهد داشت
  • پس از اجرای دستورالعمل های بدنه حلقه، مقدار شمارنده اصلاح می شود

توجه داشته باشید: در C++ این یک قانون است که توضیح متغیر شمارنده را در هدر حلقه ایجاد کنیم. اما این ضروری نیست، به خصوص اگر قصد دارید چندین متغیر را در بخش مقداردهی اولیه همانطور که در برنامه 9.2 پیاده سازی شده است، مقداردهی اولیه کنید. با این حال، استفاده از یک اعلان متغیر شمارنده در هدر حلقه منجر به یک اعلان متغیر محلی می شود که با پایان یافتن حلقه به طور خودکار از بین می رود. بنابراین، مگر در موارد ضروری، توصیف متغیر شمارنده در خارج از حلقه for نباید انجام شود.
در حالی که حلقه for در حال اجرا است، تغییر عملوندها در عبارات هدر حلقه توصیه نمی شود - این منجر به انواع خطاها می شود! اما مقادیر متغیرها (یا ثابت ها)، از جمله مقادیر قابل تغییر(کنترل)، می توانید استفاده کنید. یک مثال کلاسیک را در نظر بگیرید.

برنامه 9.1با یک عدد طبیعی N. تمام مقسوم علیه این عدد را چاپ کنید.

#عبارتند از << "N = "; cin >>N; برای (int i = 2; i< N / 2; i++) { if (N % i == 0) cout << i << " "; } return 0; } N = 16000 2 4 5 8 10 16 20 25 32 40 50 64 80 100 125 128 160 200 250 320 400 500 640 800 1000 1600 2000 3200 4000

استفاده از عبارت continue در حلقه for

هنگام استفاده از دستور continue در یک حلقه for، لازم است ویژگی های عملکرد این حلقه را در نظر بگیرید:

  • اظهارات بعدی ادامه خواهد داشت
  • سپس شمارنده اصلاح می شود.
  • رفتن به تکرار بعدی (در غیر این صورت، شرایط را بررسی کنید)

بیایید این را با یک مثال نشان دهیم: int main() ( for (int i = 1; i< 20; i++) { if (i % 2 == 0) continue; cout << i << " "; } 1 3 5 7 9 11 13 15 17 19

توجه داشته باشید. لطفاً توجه داشته باشید: اگرچه خروجی اعداد بر اساس شرط حذف می شود، شمارنده افزایش می یابد. این مثال فقط برای مصور است، شما نباید حلقه را به این شکل برنامه ریزی کنید! این مشکل به روش زیر بهتر حل می شود:

int main() ( برای (int i = 1; i< 20; i += 2) cout << i << " ";

عبارات متعدد در بخش مقداردهی اولیه و اصلاح

همانطور که قبلاً اشاره کردیم، باید سه بخش در سر بیانیه برای وجود داشته باشد. عبارات در این بخش ها را می توان حذف کرد، اما ";" را نمی توان حذف کرد. . پس از همه، شما فقط می توانید ترک کنید. . عنوان در فرم:

برای (؛؛) ( ... )

عنوان یک حلقه "بی نهایت" است. (خروج از حلقه باید در داخل بدنه حلقه برنامه ریزی شود).
C++ از چندین عبارت در بخش های اولیه و اصلاح سربرگ دستور for پشتیبانی می کند. در این صورت شرط ادامه چرخه باید یکی باشد!
مثلا. بیان مسئله: فاکتوریل عددی که بیشتر از 20 نباشد را محاسبه کنید.
برنامه 9.2

#عبارتند از با استفاده از namespace std. int main() (non long long بدون علامت؛ int i, k؛ cout<< "k = "; cin >>k; // 0<= k <= 20 for(n = 1, i = 1; i <= k; n *= i, ++i); cout << k << "! = " << n << endl; return 0; } k = 20 20! = 2432902008176640000

توجه داشته باشید: توجه داشته باشید که جریان خروجی در خط 12 به بدنه حلقه اشاره نمی کند! (در پایان عنوان - ;). بنابراین، این حلقه دارای یک دستورالعمل خالی در بدنه است و تمام عبارات در هدر ارزیابی می شوند. برنامه 9.2 فاکتوریل یک عدد از 0 تا 20 را به درستی محاسبه می کند.

برای حلقه مبتنی بر محدوده

برای تکرار از طریق عناصر یک آرایه یا کانتینر، باید همان نوع اقدامات را انجام دهید، در حالی که از کدهای دست و پا گیر استفاده می کنید. برای ساده کردن کار با کانتینرها در C++، شکل خاصی از حلقه for وجود دارد - بر اساس محدوده برای (حلقه) برای بر اساس محدودهیا محدوده برای).
نحو:

برای ( آگهی : sequence_name) loop_statement

استفاده از range-based for در مثال آرایه C:
برنامه 9.3

#عبارتند از با استفاده از namespace std. int main() ( int x ( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ); for (auto &s: x) ( cout<< s << " "; } return 0; }

برای اینکه عناصر آرایه تغییر کنند، متغیر s باید یک متغیر مرجع باشد (مانند مثال بالا). اگر متغیر مرجع نباشد، داده ها کپی می شوند. برای استنتاج نوع خودکار، از مشخص کننده خودکار در این حلقه استفاده می شود. range-based for محدودیتی برای کار با آرایه های پویا دارد: از تغییر اندازه آرایه پشتیبانی نمی کند، زیرا حاوی یک نشانگر انتهای آرایه ثابت است. وقتی با آرایه‌هایی که اندازه ثابتی دارند سروکار داریم، محدوده برای جایگزینی عالی و مطمئن برای معمولی برای است.

تو در تو برای حلقه ها

درست مانند سایر دستورات حلقه، for از ساختار حلقه های تودرتو پشتیبانی می کند. استفاده از حلقه های تو در تو برای سازماندهی ورودی و خروجی آرایه های دو بعدی بسیار فشرده تر از استفاده از حلقه while است.
با این حال، هنگام عبور از چنین آرایه هایی، باید از استفاده از دستور if اجتناب شود. اغلب، کار را می توان با دستکاری شاخص ها (متغیرهای حلقه i و j) منطقی تر اجرا کرد. یعنی تغییر یک شاخص را به مقدار دیگری وابسته کنیم. بیایید دو مثال را در نظر بگیریم.
برنامه 9.4یک ماتریس مربع به اندازه n داده می شود که عناصر آن برابر با 0 است. عناصر زیر و روی مورب اصلی را با یکی پر کنید.

#عبارتند از با استفاده از namespace std. int main() ( int n؛ cout<< "n = "; cin >>n; intmas[n][n]; // با صفر پر کنید برای (int i = 0; i< n; i++) for(int j = 0; j < n; j++) mas[i][j] = 0; // Реализация for(int i = 0; i < n; i++) for(int j = 0; j <= i; j++) mas[i][j] = 1; // Вывод for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { cout.width(2); cout << mas[i][j]; } cout << "\n"; } return 0; } n = 10 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1

برنامه 9.5برنامه ای بنویسید تا یک آرایه را با اعداد مثلث پاسکال پر کند و از این آرایه خروجی بگیرد. مثلث پاسکال به شکل زیر است:


این مثلث دارای 1 در بالا و اضلاع است (در برنامه 9.5 مثلث "روی ضلع" است - اضلاع مثلث: ستون اول و مورب اصلی). هر عدد برابر است با مجموع دو عدد بالای آن. خطوط مثلث حول محور عمودی متقارن هستند و دارای ضرایب دو جمله ای هستند.

#عبارتند از با استفاده از namespace std. int main() ( int n؛ cout<< "n = "; cin >>n; int pass[n][n]; برای (int i = 0; i< n; i++) for (int j = 0; j < n; j++) pas[i][j] = 0; pas = 1; for (int i = 1; i < n; i++) { pas[i] = 1; for (int j = 1; j <= i; j++) { pas[i][j] = pas + pas[j]; } } for (int i = 0; i < n; i++) { for (int j = 0; j <= i; j++) { cout.width(4); cout << pas[i][j]; } cout << "\n"; } return 0; } n = 12 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 1 10 45 120 210 252 210 120 45 10 1 1 11 55 165 330 462 462 330 165 55 11 1

سوالات
  1. آیا می توان دستور حلقه for را با دستور حلقه while در برنامه جایگزین کرد؟ آیا همیشه امکان این کار وجود دارد؟
  2. چه زمانی بهتر است از دستور for برای حلقه زدن استفاده کنیم؟ در حالی که؟
  3. آیا عبارات زیر در هدر دستور for امکان پذیر است: a) برای (;a > b && !(a % 2);) b) برای (a > b;;) c) برای (;;i = 0) د) برای (;i = 0;) ه) برای (;;i++، --b) f) برای (--i;;) g) برای (b = 0؛ b != a;)؟
  4. متغیر i پارامتر حلقه بیرونی و j پارامتر حلقه تو در تو است. آیا متغیر j در حلقه بیرونی موجود خواهد بود؟ من در یک حلقه تو در تو؟
کتاب درسی
مشق شب
  1. عقب 29. برنامه ای بنویسید که اعداد طبیعی را وارد کند آو بو صفحه نمایش همه اعداد اول را در محدوده از نشان می دهد آقبل از ب(برنامه ایده الگوریتم 8.5)
  2. عقب 30. عدد کامل عددی است برابر مجموع تمام مقسوم علیه های آن کوچکتر از خودش (مثلاً عدد 6 = 1 + 2 + 3). برنامه ای بنویسید که عدد طبیعی N را بگیرد و مشخص کند N کامل است یا خیر.
  3. برنامه ای بنویسید که n x n جدول عددی مربعی را نمایش دهد که برای n = 10 شبیه به این است: 1 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 9 * * * * * * * * * * * * 10
ادبیات
  1. Laforet R. برنامه نویسی شی گرا در C++ (ویرایش چهارم). پیتر: 2004
  2. پراتا، استفان. زبان برنامه نویسی C++. سخنرانی ها و تمرین ها، ویرایش ششم: پر. از انگلیسی. - م.: آی.دی. ویلیام، 2012
  3. لیپمن بی استنلی، جوسی لاجویه، باربارا ای. مو. زبان برنامه نویسی C++. دوره پایه. اد. 5. M: LLC "I. دی ویلیامز، 2014
  4. Elline A. C++. از لامر تا برنامه نویس. سن پترزبورگ: پیتر، 2015
  5. Schildt G. C++: Basic course, 3rd ed. M.: ویلیامز، 2010



سلام خوانندگان عزیز! در اینجا به مطالعه چرخه ها می رسیم. چرخه ها به پاسکال آن چیست؟ چگونه از آن استفاده کنیم؟ آنها برای چه چیزی مورد نیاز هستند؟ اینها سوالاتی است که امروز به آنها پاسخ خواهم داد.
اگر مطالعه کرده باشید، پس می دانید که سه نوع الگوریتم وجود دارد: خطی، شاخه ای و چرخه ای. ما قبلاً می دانیم که چگونه الگوریتم ها را در پاسکال پیاده سازی کنیم. بیایید مطالعه آخرین نوع الگوریتم ها را شروع کنیم.
در پاسکال، مانند بسیاری از زبان های برنامه نویسی، سه نوع ساختار حلقه ای وجود دارد.

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

بیایید یک مسئله را در نظر بگیریم که با استفاده از انواع مختلف چرخه آن را حل خواهیم کرد.

وظیفه 1. نمایش تمام اعداد از 1 تا عدد وارد شده از صفحه کلید.

while، یا یک حلقه با پیش شرط

همانطور که احتمالاً قبلاً از نام آن متوجه شده اید، در حالی کهحلقه ای است که در آن حالت قبل از بدن می آید. علاوه بر این، بدنه حلقه اگر و فقط در صورت شرط اجرا می شود درست است، واقعی; به محض ایجاد شرایط نادرست

while دارای فرمت:

در حالی که < условие> انجام دادن<оператор 1>; (خداحافظ... بکن….)

این حلقه فقط برای یک دستور مناسب است، اگر می خواهید از چندین دستور در کد خود استفاده کنید، باید آنها را در براکت های دستور قرار دهید - شروعو پایان؛.

راه حل مشکل.

برنامه example_while; var i، N: عدد صحیح; (اعلام متغیرها) شروع i:= 1; (i را روی 1 تنظیم کنید) readln(N); (آخرین عدد را بخوانید) در حالی که i<= N do {Как только i станет больше N, цикл прекратится (можно было бы написать просто <, но пришлось бы добавлять 1 к N) } begin {Открываем операторные скобки} write(i, " "); {Выводим i} Inc(i); {увеличиваем i на один.} end; { закрываем скобки } end.

تکرار، یا یک حلقه با یک شرط پس

تکرار- کاملا برعکس در حالی که. تکرارحلقه ای است که در آن حالت بعد از بدن است. علاوه بر این، اگر و فقط در صورت نتیجه شرط اجرا می شود نادرستبه محض اینکه عبارت بولی تبدیل شود درست است، واقعی، حلقه خاتمه یافته است.

تکرار دارای فرمت:

تکرار( تکرار … )
<оператор 1>;
< оператор 2>;

تا زمان(قبل از…) <условие>

شروعو پایانلازم نیست.

راه حل مشکل.

برنامه example_repeat; var i، N: عدد صحیح;(اعلان متغیرها) شروع i:= 1; (i را روی 1 تنظیم کنید) readln(N); (آخرین عدد را بخوانید) تکرار (بدون نیاز به شروع و پایان پس از تکرار) write(i, " "); (نمایش i) Inc(i); (i را یک بار افزایش دهید.) تا i = N + 1; (به عنوان مثال، i = 11 و N = 10. حلقه متوقف می شود، بنابراین شرط درست می شود.) end.

برای، یا یک حلقه با یک پارامتر

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

دو راه برای نوشتن این حلقه وجود دارد:

فرم اول

برای<счетчик1> := <значение1>به<конечное_значение>انجام دادن<оператор1>;

<счетчик1>1 افزایش خواهد یافت.

<значение1>مقدار اولیه شمارنده است. این می تواند یک متغیر یا یک عدد باشد.
<конечное_значение>: به محض ارزش<счетчик1>بیشتر می شود<конечное_значение>

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

و<счетчик1>، و<конечное_значение>، و<значение1>- متغیرها تمامنوع

اغلب از متغیر i به عنوان شمارنده استفاده می شود.

فرم دوم

برای<счетчик2> := <значение2>پایین به<конечное_значение>انجام دادن<оператор1>;

پس از هر تکرار، مقدار<счетчик2>1 کاهش خواهد یافت.

<значение2>مقدار اولیه شمارنده است.
<конечное_значение>: به محض ارزش<счетчик2>کمتر خواهد شد<конечное_значение>، حلقه خاتمه یافته است.

دو نکته مهم:

  1. حلقه تا زمانی که مقدار شمارنده در قسمت [value; مقدار_پایانی].
  2. مقدار شمارنده داخل بدنه را تغییر دهید ممنوع است! در اینجا چیزی است که کامپایلر خروجی می دهد:

راه حل مشکل:

برنامه example_for; var i، N: عدد صحیح; شروع خواندن (N); (فرض کنید 10 وارد کرده ایم) برای i:= 1 تا N do write(i, " "); (تعداد تکرار - 10 - 1 + 1 = 10) پایان.

موافقم، این کد ساده تر و مختصرتر از همه کدهای قبلی است. و چرخه برای- یک چرخه کاملا معمولی نیست، هیچ شرط منطقی در آن وجود ندارد. بنابراین به حلقه ای با پارامتر در برنامه نویسی قند نحوی می گویند. قند نحوی افزودنی به نحو یک زبان برنامه نویسی است که ویژگی های جدیدی اضافه نمی کند، اما زبان را برای استفاده انسان دوستانه تر می کند.

بیایید یکی دو مشکل را حل کنیم.

برای 1. اعداد صحیح K و N (N > 0) داده شده است. خروجی N برابر عدد K است.

ما یک چرخه ساده از 1 تا تعداد مورد نیاز را سازماندهی می کنیم.

برنامه برای 1; var K, N, i: عدد صحیح; شروع خواندن (K, N); برای i:= 1 تا N بنویسید(K, " "); (K را با فاصله می نویسیم) پایان.

برای 2. < B). Вывести в порядке возрастания все целые числа, расположенные между A и B (включая сами числа A и B), а также количество N этих чисел.

از وقتی که< B, то цикл должен будет выводить все числа от А до B. Чтобы сосчитать количество чисел, используем формулу: <конечное_значение> — <начальное_значение> + 1.

برنامه برای 2; var A, B, i, count: integer; شروع خواندن (A, B)؛ برای i:= A تا B بنویسید(i, " "); (اعداد را از کوچکترین به بزرگ بنویسید) count:= B - A + 1; (شمارش تعداد اعداد) writeln; write("تعداد اعداد - ", count); پایان.

برای 9. با توجه به دو عدد صحیح A و B (A< B). Найти сумму квадратов всех целых чисел от A до B включительно.

ما همان چرخه را مانند مسئله قبلی سازماندهی می کنیم، اما در همان زمان مجذورهای همه اعداد را جمع می کنیم. برای محاسبه مربع، از تابع استفاده کنید.

برنامه برای 9; var A, B, i, S: عدد صحیح; شروع خواندن (A, B)؛ S:= 0; (PascalABC این کار را به صورت خودکار انجام می دهد، اما اگر کامپایلر متفاوتی دارید، به شما توصیه می کنیم که متغیرها را به صورت دستی روی صفر قرار دهید) برای i:= A تا B do S:= S + Sqr(i); (همه مربع ها را اضافه کنید) writeln; write("مجموع مربع ها - "، S); پایان.

برای 13 درجه. یک عدد صحیح N (> 0) داده می شود. مقدار عبارت 1.1 - 1.2 + 1.3 - ... را بیابید (N عبارت، علائم متناوب). از عملگر شرطی استفاده نکنید.

برای تغییر علامت، در هر بار تکرار حلقه، مقدار متغیر ویژه را به عکس تغییر می دهیم.

برنامه برای 13; var N, A, i: عدد صحیح; س: واقعی start Write("N ="); readln(N); S:= 1.1; A:= 1; (اول مثبت) برای i:= 2 تا N do (ما قبلاً اولین تکرار حلقه را انجام داده ایم، بنابراین از 2 شروع به شمارش می کنیم) شروع A:= -A; (اکنون منفی) S:= S + A * (1 + i / 10); (افزودن) پایان؛ WriteIn(S:5:1); (بیایید یک آشنایی برای قسمت کسری بدهیم) پایان.

در حالی که 1 درجه. اعداد مثبت A و B (A > B) داده شده است. روی قطعه ای به طول A، حداکثر تعداد ممکن از قطعات طول B (بدون همپوشانی) قرار می گیرد. بدون استفاده از ضرب و تقسیم، طول قسمت اشغال نشده قطعه A را پیدا کنید.

هر بار B را از A کم کنید تا A - B >= 0.

برنامه while1; var A, B: عدد صحیح. شروع خواندن (A, B)؛ در حالی که (A - B) >= 0 انجام A:= A - B; (در حالی که اختلاف مثبت است، ما تفریق می کنیم. لازم است یک متغیر با تعدد A و B ارائه شود، بنابراین >=) write(A); پایان.

در حالی که 4 درجه.یک عدد صحیح N (> 0) داده می شود. اگر توان آن 3 است، خروجی True و اگر نه، خروجی False.

ما به صورت زیر عمل می کنیم: در حالی که N بر 3 بخش پذیر است، N را بر 3 تقسیم می کنیم. سپس، اگر N = 1 باشد، عدد توان سه است. اگر N<>1، آنگاه عدد توان سه نیست. برای حل این مشکل، باید بدانید که چیست و چگونه کار می کنند.

برنامه while4; var N: عدد صحیح; شروع readln(N); در حالی که N mod 3 = 0 انجام N:= N div 3; (تا زمانی که باقیمانده تقسیم بر سه صفر است، N را بر 3 تقسیم کنید) writeln(N = 1); (بیان بولی) پایان.

برای امروز کافی است! فراموش نکنید که بیشتر به سایت ما سر بزنید و روی دکمه هایی که در جلوی نظرات قرار دارد کلیک کنید.

چرخه با یک پارامتر قبلاً توسط ما در قسمت "الگوریتم" در مبحث "انواع الگوریتم ها" در نظر گرفته شده است.
یک حلقه با یک پارامتر استفاده می شود،زمانی که از قبل مشخص شده باشد که حلقه باید چند بار اجرا شود.

فرمت رکورد چرخه:

اینجا برای، انجام دادن- کلمات رزرو شده (برای، قبل، اجرا)؛

<пар. цикла> - پارامتر چرخه - متغیر عدد صحیحنوع (نوع عدد صحیح)؛
<нач. знач.> - مقدار اولیه - عدد یا متغیرعدد صحیحنوع (نوع عدد صحیح)؛
<кон. знач.> - مقدار پایانی - عدد یا
متغیرعدد صحیحنوع (نوع عدد صحیح)؛
<оператор> یک عملگر پاسکال دلخواه است.

مثال: برای i:=1 تا n انجام<оператор>
در اینجا i پارامتر حلقه است
1 - مقدار اولیه
n - مقدار نهایی
اگر چندین عملگر در بدنه حلقه استفاده شود، از براکت های عملگر استفاده می شود: شروع ... پایان.
هنگام اجرای دستور for، ابتدا عبارت مورد ارزیابی قرار می گیرد<нач.знач.>و نسبت دادن مقدار آن به متغیر حلقه<пар.цикла> := <нач. знач.>. بعدی مقایسه می شوند<пар.цикла>و <кон.знач.>. تا زمانی که برابر شوند، دستور(های) اجرا می شود. مقدار متغیر حلقه<нач.знач>به طور خودکار یک در طول حلقه افزایش می یابد.بلافاصله باید توجه داشت که تنظیم یک مرحله چرخه غیر از 1 در این عملگر غیرممکن است.
مثال:
دستورات حلقه زیر ممکن است:

1) برای i:= 1 تا n انجام s1;

2) برای i:= 3 تا 10 s1 را انجام دهید.

3) برای i:= a تا b s1 را انجام دهید;

4) برای i:= a تا b انجام دهید
شروع

s1;
s2;
...
sn

پایان؛

در اینجا s1، s2، s3، ... sn عملگرهای حلقه هستند.

مثال:
برنامه ای بنویسید که اعداد 1 تا 10 را نمایش دهد.

مثال:
برنامه ای برای محاسبه فاکتوریل یک عدد n، یعنی n! بنویسید. (0!=1)

توضیح برنامه:
متغیر n برای عدد وارد شده توسط کاربر است که فاکتوریل آن باید پیدا شود. f - متغیری که در آن مقدار فاکتوریل عدد n "انباشته" می شود. i - متغیر حلقه.
مقدار اولیه متغیر f:= 1 تنظیم شده است.
سپس چرخه شروع می شود. متغیر i به 1 مقداردهی اولیه می شود. با نهایی - n مقایسه می شود (1<= n), если условие истинно, тогда выполняется оператор (в этой программе он один): f:= f*i, 1*1=1; значение переменной цикла увеличивается на 1, т. е. станет равным: i:= i + 1, 1 + 1 = 2 и цикл повторяется.
وقتی مقدار i برابر با n شد، حلقه برای آخرین بار اجرا می شود، زیرا مقدار بعدی i n + 1 خواهد بود که از مقدار نهایی n بزرگتر است، شرط i.<= n - ложно, цикл не выполняется.

شکل دیگری از عبارت حلقه For وجود دارد:
فرمت رکورد چرخه:

جایگزین کردن کلمه رزرو شده به با downto به این معنی است که مرحله پارامتر حلقه (-1) است.
تغییر در مقدار پارامتر از یک مقدار بزرگتر به مقدار کوچکتر می رود، یعنی.<нач. знач.> <кон. знач.>.

مثال:
دستورات حلقه زیر ممکن است:

1) برای i:= n تا 1 انجام دهید s1;

2) برای i:= 10 تا 3 انجام دهید s1;

3) برای i:= b تا a do s1; (با فرض b>a)

4) برای i:= b تا یک do
شروع

S1;
s2;
...
sn

پایان؛ (با فرض b>a)

در اینجا s1، s2، s3، ... sn عملگرهای حلقه هستند.

مثال: برنامه محاسبه فاکتوریلاعداد را می توان با استفاده از این دستور حلقه تشکیل داد.


وظایف

  1. با توجه به 10 عدد، آنهایی را که مربع کامل هستند چاپ کنید.
  2. با توجه به 10 عدد، محصول آنها را پیدا کنید.یک بلوک دیاگرام و برنامه بسازید.
  3. با توجه به 10 عدد، مجموع اعداد زوج را پیدا کنید.یک بلوک دیاگرام و برنامه بسازید.
  4. با توجه به 10 عدد، تعداد منفی ها را پیدا کنید.یک بلوک دیاگرام و برنامه بسازید.
  5. با توجه به n عدد واقعی. حداکثر و حداقل را پیدا کنید.یک بلوک دیاگرام و برنامه بسازید.
  6. با توجه به n عدد واقعی.میانگین حسابی همه عناصر را بیابید.یک بلوک دیاگرام و برنامه بسازید.
  7. با توجه به n عدد واقعی.میانگین حسابی عناصر منفی و مثبت را بیابید.یک بلوک دیاگرام و برنامه بسازید.
  8. با توجه به n عدد طبیعی.مجموع و حاصل ضرب عناصری که مضرب 3 و 5 هستند را بیابید.یک بلوک دیاگرام و برنامه بسازید.
  9. با توجه به n عدد طبیعی.کنار کشیدناعدادی که مقادیر آنها توان دو است (1، 2، 4، 8، 16، ...).یک بلوک دیاگرام و برنامه بسازید.
  10. با توجه به n عدد طبیعی.کنار کشیدناعدادی که مقادیر آنها در بخش است.یک بلوک دیاگرام و برنامه بسازید.
  11. با توجه به n عدد طبیعی.اعدادی را نمایش دهید که مقادیر آنها مربع های یک عدد است.یک بلوک دیاگرام و برنامه بسازید.
  12. با توجه به عدد طبیعی n. n 2 را پیدا کنید.یک بلوک دیاگرام و برنامه بسازید.
  13. با توجه به اعداد طبیعی a، n. یک n پیدا کنید.یک بلوک دیاگرام و برنامه بسازید.
  14. با دادن یک عدد طبیعی n. ظرفیت آن را تعیین کنید، مهم ترین رقم عدد را 2 افزایش دهید
  15. با توجه به عدد طبیعی n. اولین و آخرین رقم یک عدد را با هم عوض کنید
  16. با توجه به عدد طبیعی n. ارقام اعدادی که مضرب 2 هستند با 0 جایگزین می شوند.
  17. با توجه به عدد طبیعی n. ارقام اعدادی که مضرب 3 هستند با 1 جایگزین می شوند.
  18. با توجه به عدد طبیعی n. حاصل ضرب (2n-1)*(3n-1)*(4n-1)*...*(10n-1) را محاسبه کنید.یک بلوک دیاگرام و برنامه بسازید.
  19. جمع 2+4+6+...+100 را محاسبه کنید.یک بلوک دیاگرام و برنامه بسازید.
  20. با یک عدد طبیعی n، x واقعی. حاصل ضرب x+x/2+x/3+...+x/n را محاسبه کنید.یک بلوک دیاگرام و برنامه بسازید.
  21. با دادن یک عدد طبیعی n. P=(1-1/2)(1-1/3)...(1-1/n) را محاسبه کنید، جایی که n>2.یک بلوک دیاگرام و برنامه بسازید.
  22. با دادن یک عدد طبیعی n. P=(1+x)/n+(2+x)/(n-1)+...+(n+x)/1 را محاسبه کنید.یک بلوک دیاگرام و برنامه بسازید.
  23. با توجه به n عدد طبیعی. مجموع یک سری را محاسبه کنید1+x/1!+x 2 /2!+x 3 /3!+ ...+x n/n!. یک بلوک دیاگرام و برنامه بسازید.

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

برای <параметр_цикла>:=<начальное_знач> به <конечное_знач> انجام دادن <оператор>;

برای <параметр_цикла>:=<конечное_знач> پایین به <начальное_зна.> انجام دادن <оператор>;

عبارت، که بدنه حلقه است، می تواند ساده یا مرکب باشد.

پارامتر حلقه، و همچنین محدوده تغییر آن، فقط می تواند از نوع عدد صحیح یا عددی باشد.

پارامتر همراه با سایر متغیرها توصیف می شود.

گام حلقه for همیشه ثابت است و برابر با "1" یا "-1" است.

ده عدد صحیح مثبت اول را نمایش دهید

var i: عدد صحیح; //counter وارد شده است

fori:=1to10do//در حالی که مقدار شمارنده از 1 تا 10 است موارد زیر را انجام دهید

writeln(i); //مقدار شمارنده خروجی

vari,sum:integer;

sum:=0; //صفر کردن مقدار متغیر

fori:=10to99do//شمارش اعداد مثبت دو رقمی

اگر من 3=0 را اصلاح کنم، آنگاه //مولتیپلیسیته 3

sum:=sum+i; //مجموع مقدار قبلی متغیر و عدد مربوط به شرط

حاصل ضرب ده عدد زوج مثبت اول را نمایش دهید

vari,pr:integer;

pr:=1; //هنگام یافتن محصول، مقدار اولیه متغیر 0 نیست، بلکه 1 است

برای i:=1 تا 10 انجام دهید

اگر من 2=0 را اصلاح کنم، //تعادل را تعیین کنید

با توجه به دو عدد صحیح A و B (A< B). Вывести в порядке возрастания все целые числа, расположенные между A и B (в том числе A и B), a также количество N этих чисел .

var i,pr: عدد صحیح;

k:=0; //صفر مقدار متغیر که به معنی عدد است

fori:=AtoBdo//شمارش اعداد از محدوده داده شده

writeln(i); //خروجی به ترتیب صعودی

k:=k+1; // شمارش تعداد اعداد

writeln(k); //خروجی مقدار خارج از حلقه رخ می دهد زیرا یک بار صادر شده است

N عدد مختلف وارد کنید. میانگین حسابی همه اعداد را پیدا کنید.

Varn,i,a:integer;

برای i:=1 تا N انجام دهید

Writeln("میانگین حسابی= ",s/n:4:2);

عبارت حلقه با while ... انجام پیش شرط

دستور while ... do برای پیاده سازی حلقه ها با یک پیش شرط طراحی شده است.

وضعیت بدنه حلقه while قبل از شروع هر مرحله بررسی می شود. بنابراین، اگر شرط بلافاصله برآورده نشود، بدنه حلقه نادیده گرفته می شود و کنترل بلافاصله پس از بدنه حلقه به اپراتور منتقل می شود.

تماس با اپراتوردر حالی که ... انجام دهید به عنوان "خداحافظ ... برای انجام" ترجمه می شود و مانند این است:

در حالی که <условие> انجام دادن <оператор>

حلقه while متضمن الگوریتم زیر است: در حالی که شرط درست است، دستورات بدنه حلقه اجرا می شوند.

شرط خود می تواند یک ثابت بولی، یک متغیر یا یک عبارت بولی باشد.

هنگام نوشتن حلقه ها با پیش شرط، موارد زیر را در نظر داشته باشید.

    برای اینکه یک حلقه همیشه فرصتی برای پایان یافتن داشته باشد، محتویات بدنه آن باید لزوماً بر وضعیت حلقه تأثیر بگذارد.

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

اگر شرط حلقه نادرست باشد، حلقه هرگز اجرا نمی شود!

در اکثر برنامه ها، نیاز به اجرای مکرر برخی از دستورات (یا بلوک از دستورات) وجود دارد. برای سازماندهی چنین ساختارهایی می توان از دستورات حلقه استفاده کرد. زبان برنامه نویسی پاسکال از انواع زیر از دستورات حلقه استفاده می کند: for, while, repeat (PascalABC.NET همچنین از عملگر حلقه foreach استفاده می کند).

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

برای بیانیه در پاسکال

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

دستور for از دو بخش تشکیل شده است: بدنه حلقه و هدر که برای توصیف مقادیر اولیه و نهایی پارامتر حلقه و همچنین گزینه تغییر آن در نظر گرفته شده است.

بسته به جهت تغییر پارامتر حلقه (افزایش - به یا کاهش - پایین به ) در پاسکال، عملگر حلقه for را می توان به یکی از دو شکل نوشت:

  • برای پارامتر := start_value تا end_value do
  • اپراتور؛
  • برای پارامتر := start_value downto end_value do
  • اپراتور؛

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

بیایید کار حلقه for را در نظر بگیریم.

قبل از شروع عبارت حلقه، مقدار اولیه اختصاص داده شده به متغیر پارامتر و مقدار نهایی محاسبه می شود. سپس عملیات زیر به صورت چرخه ای انجام می شود:

  1. مقدار فعلی پارامتر را با مقدار نهایی مقایسه می کند.
  2. اگر پارامتر شرط end_value درست باشد، بدنه حلقه اجرا می شود، در غیر این صورت دستور for خاتمه می یابد و کنترل به دستور بعدی حلقه منتقل می شود.

توجه: در زبان پاسکال پارامتر حلقه بدون توجه به افزایش یا کاهش هر بار یک تغییر می کند.

یک وظیفه. لیستی از مربع های اعداد صحیح از 10 تا 1 را نمایش دهید.

راه حل. در مشکل مطرح شده، پارامتر چرخه کاهش می یابد.

(قطعه کد برنامه)

  • برای i:= 10 به 1 انجام دهید
  • writeln(i:2، " "، i * i);

توجه: اگر نیاز به استفاده از بیش از یک دستور در بدنه حلقه باشد، از دستور مرکب استفاده می شود (کراکت های عملگر شروع و پایان دارند).

مثال 2. نمرات متقاضی در چهار آزمون مشخص است. میزان امتیازی که کسب کرده اند را مشخص کنید.

یک وظیفه. نمرات متقاضی در چهار آزمون مشخص است. میزان امتیازی که کسب کرده اند را مشخص کنید.

راه حل. ما از یک عملگر حلقه با پارامترها در برنامه استفاده خواهیم کرد، زیرا تعداد تکرارهای اقدامات انجام شده مشخص است (متقاضی دقیقاً چهار نمره دریافت کرده است)

(قطعه کد برنامه)

  • s:= 0;
  • برای i:= 1 تا 4 انجام دهید
  • شروع
  • readln(مارک);
  • s:= s + علامت;
  • نوشتن (ها)؛