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

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

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

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

مثال: برای 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 زمانی استفاده می شود که در برنامه، قبل از اجرای دستورالعمل های حلقه، تعداد مراحل این حلقه مشخص شود (یا از پیش تعیین شده باشد). در فلوچارت، دستور 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 محدودیتی برای کار با آرایه های پویا دارد: از تغییر اندازه آرایه پشتیبانی نمی کند، زیرا حاوی یک نشانگر انتهای آرایه ثابت است. هنگام برخورد با آرایه هایی که اندازه ثابتی دارند، ranged برای جایگزینی عالی و مطمئن برای معمولی برای است.

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

درست مانند سایر دستورات حلقه، 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



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

انواع چرخه ها

در کل سه نوع وجود دارد:

  • با پارامتر
  • با یک پیش شرط
  • با یک شرط پسین

حلقه هایی با یک پارامتر، که در غیر این صورت به عنوان For … to … do یا For … downto … شناخته می شود. انجام دهید، به طور مکرر دنباله خاصی از اقدامات را تکرار کنید. در اصل، انواع دیگر برای همین منظور استفاده می شود، فقط در حلقه for تعداد مراحل از قبل مشخص است.

در دو ساختار دیگر (While و Repeat)، تعداد تکرارها در ابتدا ناشناخته است. بنابراین، هنگام مطالعه کار، از قبل لازم است که بفهمیم از کدام چرخه استفاده می شود.

تعاریف اساسی در مورد موضوع

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

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

برای ... برای انجام: الگوریتم کار، نحو

همانطور که قبلا ذکر شد، چرخه های دارای یک پارامتر در وظایفی استفاده می شود که در آنها یک "فاصله" مشخص شده است که در آن کار می شود. بنابراین، می تواند آرایه ای از اعداد، روزهای هفته، سطرهای یک شعر و غیره باشد.

2 نوع طراحی وجود دارد: افزایش شمارنده و کاهش آن. ساختار اول به صورت زیر نوشته می شود:

برای متغیر خروجی := مرز 1به مرز 2انجام دادن

بدنه حلقه;

اینجا: مرجع. متغیرتوسط کاربر در ابتدای یک برنامه یا بلوک اعلام شده است. حاشیه 1 و حاشیه 2- مقدار اولیه و نهایی فاصله؛ که در بدن چرخهمجموعه ای از اقدامات را که باید توسط برنامه انجام شود را مشخص می کند. باید به خاطر داشت که اگر بدنه حلقه فقط شامل 1 فرمان باشد، می توان از براکت های عملگر شروع ... پایان حذف کرد. در این نسخه از طرح، شمارنده، یعنی<исх.переменная>، با افزایش 1 افزایش می یابد.

برای متغیر خروجی:= مرز 1پایین به مرز 2انجام دادن

بدنه حلقه;

در اینجا مرجع است. متغیر با افزایش 1 کاهش می یابد.

طرح حلقه با پارامتر For ... to ... do به صورت زیر خواهد بود:

  • مقدار حد بالای بازه تنظیم شده است، یعنی. مرز 2.
  • متغیر منبعمقدار پارامتر اختصاص داده شده است مرز 1.
  • شرایط بررسی می شود: متغیر خام ≤ حد 2.
  • پس از دریافت نتیجه درست است، واقعی (درست است، واقعی) بدنه حلقه اجرا می شود.
  • شمارنده 1 افزایش می یابد.
  • مراحل 3-5 دقیقاً تا زمانی که شرط درست باشد اجرا می شود: متغیر منبع > حد 2. به محض این که این اتفاق می افتد، حلقه خارج می شود و کنترل به دستور زیر این ساختار منتقل می شود.

در For ... downto ... do الگوریتم کار به استثنای چند نکته مشابه موارد فوق است:

  • در بند 3 شرط بررسی می شود: متغیر خام ≥ حد 2.
  • در خط 5 الگوریتم، شمارنده 1 کاهش می یابد.
  • در پاراگراف ششم، دستورات 3-5 تا زمانی که شرط برآورده شود اجرا می شود: متغیر خروجی< граница 2.

همه چیزهای دیگر در هر دو الگوریتم کاری مشابه است.

بلوک دیاگرام حلقه با پارامتر

حلقه های دارای یک پارامتر شکل زیر از یک بلوک دیاگرام دارند (اگرچه قبلاً در بالا ارائه شده است). یک سازمان طراحی ساده نیز در اینجا نشان داده شده است.

الزامات اساسی برای یک چرخه با یک پارامتر

حلقه های دارای پارامتر به انواع خاصی از شرایط نیاز دارند.

  • شمارنده و کرانهای دهانه (یعنی متغیر منبع، کران 1 و کران 2) باید از یک نوع داده باشند. اگر فقط بین مقادیر شروع و پایان بخش و متغیر اصلی سازگاری وجود داشته باشد، ممکن است برنامه نادرست رفتار کند، زیرا مرزها با توجه به نوع داده پارامتر اصلی تبدیل می شوند.
  • نوع داده ای که مقادیر پارامتر باید به آن تعلق داشته باشد باید عدد صحیح باشد. استفاده از نوع واقعی به شدت ممنوع است.
  • تغییر مقدار پارامتر متغیر اولیه در بدنه حلقه نامطلوب است. در غیر این صورت، کاربر به سختی قادر به ردیابی خطاهای احتمالی ظاهر شده خواهد بود.
  • بر خلاف انواع دیگر حلقه‌ها، در For … to … do یا For … downto … گام نمی‌تواند به پارامتری غیر از 1 تغییر کند.

توربو پاسکال: چگونه از یک حلقه خارج شویم

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

حلقه های پارامتر پاسکال (که برنامه نویسی آنها حقیقت "ابدی" شرط را فرض می کند) می توانند با Continue متوقف شوند. در اینجا کار به صورت زیر تنظیم می شود: تکرار فعلی اجرای خود را قبل از برنامه به پایان می رساند، کنترل به دستور بعدی منتقل می شود، اما بدون خروج از حلقه.

روال Exit برای تکمیل کار یک بلوک خاص در کد برنامه ضروری است. در داخل یک رویه (عملکرد) نامیده می شود و در همان لحظه، اجرای این «قطعه» بلافاصله متوقف می شود. اگر Exit در بلوک اصلی برنامه باشد، کار خود را تمام می کند.

رویه Halt اصل عملیات را به موارد زیر کاهش می دهد: برنامه به طور کامل به پایان می رسد.

نمونه هایی از وظایف با راه حل

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

وظیفه 1

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

الگوریتم اقدام:

  1. یک آرایه دو بعدی ایجاد کنید.
  2. هر شماره را برای مطابقت با شرایط بررسی کنید:

الف) اگر 9< Х < 100, то разделить его нацело на 10 посредством div;

ب) رقم دوم عدد را با تقسیم بر mod استخراج کنید.

ج) اعداد برجسته شده را جمع کنید.

د) مجموع داده شده را بر 2 تقسیم کنید.

ه) اگر نتیجه 0 باشد، شمارنده 1 افزایش می یابد.

وظیفه 2

یک آرایه تک بعدی از عناصر عدد صحیح داده می شود. تعداد اعداد مثبت را بیابید.

الگوریتم اقدام:

  1. یک آرایه از عناصر عدد صحیح ایجاد شده توسط تصادفی ایجاد کنید.
  2. IF را با پارامتر به حلقه متصل کنید، که عنصر داده شده را برای مطابقت با شرط بررسی می کند: X>0.
  3. اگر شرط برآورده شود، شمارنده 1 افزایش می یابد.
  4. پس از حلقه، مقدار شمارنده حاصل باید روی صفحه نمایش داده شود.

داده های داخل پرانتز () نظرات هستند. در خط 11، می توانید آرایه را به دو صورت روی صفحه نمایش دهید: بین اعداد فاصله بگذارید یا تعداد مشخصی سلول برای هر عنصر اختصاص دهید (در این مورد، 5 مورد وجود دارد).

در خط 12، متغیر شمارنده را نیز می توان به دو صورت افزایش داد: یا 1 را به مقدار قبلی اضافه کنید، یا از تابع استاندارد Inc استفاده کنید.

وظیفه 3

با توجه به یک ماتریس مربع. تعداد عناصر مثبت روی قطر اصلی را پیدا کنید.

توضیحات:

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

الگوریتم اقدام:

  1. یک ماتریس مربع ایجاد کنید.
  2. متغیر مسئول شمارش عناصر مثبت را روی "0" قرار دهید.
  3. یک چرخه برای ایجاد یک ماتریس مربع ایجاد کنید.
  4. یک حلقه سازماندهی کنید تا شرایط را بررسی کنید: اگر عدد روی مورب اصلی > 0 باشد، شمارنده 1 افزایش می یابد.
  5. پس از پایان حلقه، مقدار متغیری را که تعداد عناصر مثبت را روی صفحه ذخیره می کند، نمایش دهید.

تقابل دو زبان برنامه نویسی C و Turbo Pascal

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

در فضای مجازی، در میان سه ده زبان برنامه نویسی، سه تا از درخشان ترین جفت ها قابل تشخیص است که مخالفت آن ها بزرگ ترین اذهان فضای مجازی را شگفت زده کرد: Algol-60 و Fortran، Pascal و C، Java و C ++. البته، این احساسات ذهنی هستند، اما در یک زمان یا زمان دیگری یکی از این زوج رهبر بود. این به دلیل نیازهای صنعت و نیاز به یک محصول نرم افزاری خاص بود. در دهه 70. فرترن "جهان را اداره کرد"، در دهه 80 - توربو پاسکال، در دهه 90 - C ++. البته هیچ کدام «مرده» نبودند. در عوض، آنها به محصولات نرم افزاری بهبود یافته تبدیل شده اند.

هنگام مطالعه زبان های برنامه نویسی متوجه خواهید شد که در برخی از مباحث سینتکس مشابه است. بنابراین، حلقه های با پارامتر در C مشابه ساختارهای مشابه در پاسکال هستند، به استثنای برخی از نقاط.

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

یک حلقه با یک پارامتر فرمت زیر را دارد:

برای (آغازسازی، بیان، اصلاحات) عبارت;

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

برای (int i = 0، j = 2؛ ...

برای (k=1، m=0؛ ...

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

اصطلاحیک شرط اجرای حلقه را تعریف می کند: اگر نتیجه آن، cast to bool، درست باشد، حلقه اجرا می شود. حلقه با یک پارامتر به عنوان یک حلقه با یک پیش شرط پیاده سازی می شود.

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

مثال (اپراتوری که مجموع اعداد از 1 تا 100 را محاسبه می کند):

برای (Int i = 1، s = 0؛ 1<=100; i++) s += i;

مثال (برنامه جدولی از مقادیر تابع را چاپ می کند y \u003d x 2 +1در محدوده وارد شده):

#عبارتند از

شناور Xn، Xk، Dx، X;

printf("محدوده و افزایش آرگومان را وارد کنید:");

scanf("%f%f%f"، &Xn، &Xk، &Dx);

printf("|X|Y|\n");

برای (X = Xn؛ X<=Xk; X+=Dx)

printf (" | %5.2f | %5.2f |\n»، X*X + 1);

مثال (برنامه همه مقسوم علیه های یک عدد صحیح مثبت را پیدا می کند):

#عبارتند از int main()(

int num, half, div;

کوت<< “\n Введите число: "; cin >> تعداد

برای (نیم = تعداد / 2، div = 2؛ تقسیم<= half; div++)

اگر (!(num %div))cout<< div <<"\n";

دو مثال آخر همان اقداماتی را انجام می‌دهند که مثال‌های حلقه را با یک پیش‌شرط انجام می‌دهند، اما فشرده‌تر و واضح‌تر نوشته شده‌اند: تمام اقدامات مربوط به کنترل حلقه در هدر آن محلی است.

هر حلقه while را می توان به حلقه معادل خود برای حلقه ریخت و بالعکس، به صورت زیر:

برای (b1: b2; b3) عملگر b1;

while (b2) (گزاره؛ b3;)

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

q بررسی کنید که آیا به تمام متغیرهای موجود در سمت راست عبارات انتساب در بدنه حلقه، مقادیر اولیه قبل از آن اختصاص داده شده است (و همچنین آیا امکان اجرای دستورات دیگر وجود دارد).


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

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

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

عبارات حلقه قابل تعویض هستند، اما برخی از آنها توصیه هاانتخاب بهترین در هر مورد

دستور do while معمولاً زمانی استفاده می شود که حلقه باید حداقل یک بار اجرا شود (مثلاً اگر داده ورودی در حلقه وجود داشته باشد).

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

دستور for در بیشتر موارد دیگر ارجحیت دارد (قطعا - برای سازماندهی چرخه ها با شمارنده).

به طور کلی، امروز در مورد هر یک از چرخه های پاسکال با جزئیات بیشتری آشنا خواهیم شد و نحوه تنظیم آنها را مشاهده خواهیم کرد. ما از هم جدا خواهیم کرد حلقه while با پیش شرط, برای حلقه با پارامترو تکرار - تا زمانی که حلقه با شرط پس از آن انجام شود.

1. حلقه با پارامتر در پاسکال - FOR

حلقه FOR شرط خاصی را تعیین می کند که طبق آن برنامه تا زمانی که اجرا شود کار می کند، فرض کنید باید برنامه را 5 (یا n) بار حلقه کنیم، سپس این کار با استفاده از این حلقه آسان است. حلقه FOR یک ویژگی مشخص دارد - یک شمارنده که معمولاً با حرف i یا j نشان داده می شود.

ظاهر چرخه با یک پارامتر در پاسکال:

برای i:= 1 به n انجام دهید // i را ابتدا به یک، سپس دو، سه، ...، n اختصاص دهید

بعد از پاس 1 به متغیر i عدد 1 و بعد از پاس دوم عدد 2 و همینطور ادامه می دهیم تا به n برسیم. به تا .. به ترتیب صعودی است، به ترتیب نزولی به پایین تا .. نیز وجود دارد.

بلوک دیاگرام یک چرخه با یک پارامتر:

2. حلقه با پیش شرط در پاسکال - WHILE

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

ساختار حلقه با پیش شرط:

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

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

هر گونه دستور زبان اجرایی

دستور اجرای حلقه:

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

بلوک دیاگرام یک چرخه با پیش شرط:


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

مثال:

وظیفه: محاسبه مجموع سری 1+1.5+2+2.5+3+3.5+ .. + 30

برنامه مثال-while;

varsum:real; n:واقعی; BEGIN sum:=0; n:=1; در حالی که n

3. حلقه با postcondition - تکرار - تا.

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

لطفا توجه داشته باشید که این دستور حلقه وجود چندین دستور را در بدنه حلقه فرض می کند، یعنی می توانید چندین عمل انجام دهید، بنابراین کلمات سرویس Begin و End مورد نیاز نیستند.

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

بلوک دیاگرام یک چرخه با یک شرط پس:

فرمت ضبط، ساختار چرخه:
تکرار کنید تا ؛

مثال:

آزمون برنامه 2; ورب:واقعی; شروع b:=100; تکرار b:=b/2; تا ب

نتیجه گیری:

1. یک حلقه با یک پارامتر از متغیری به نام پارامتر حلقه یا شمارنده استفاده می کند. قبل از اجرای حلقه، پارامتر (counter) روی مقدار اولیه خود تنظیم می شود. پس از اجرای مرحله حلقه، مقدار پارامتر یک افزایش می یابد. حلقه ادامه می یابد تا زمانی که پارامتر به مقدار نهایی خود برسد که بعد از (downto) مشخص شده است.

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

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