عبارت حلقه با شرط - while


هنگام مطالعه حلقه for گفتیم که اگر تعداد تکرارهای هر عمل مشخص باشد، می توانید با استفاده از عملگر حلقه for برنامه را کوتاه کنید. اما اگر تعداد تکرارها مشخص نباشد چه؟ و این اغلب اتفاق می افتد.
به عنوان مثال، بیایید تبدیل یک عدد از یک سیستم اعشاری به هر سیستم دیگر را به خاطر بسپاریم: باید عدد (و سپس نتیجه تقسیم) را بر پایه سیستم اعداد تقسیم کنیم تا زمانی که در پاسخ به صفر برسیم. چند بار به اشتراک خواهیم گذاشت مشخص نیست. و برنامه های بسیار زیادی وجود دارند که چنین الگوریتمی را پیاده سازی می کنند. 
این چگونه پیاده سازی می شود؟
برای چنین مواردی در برنامه نویسی، یک عملگر حلقه با یک شرط وجود دارد. 
در زبان برنامه نویسی پاسکال، یک دستور حلقه شرطی با کلمه while شروع می شود و ساختار زیر را دارد. <پیش> در حالی که <شرایط> شروع کن بدنه حلقه پایان همانطور که قبلاً می دانیم:
- شرط عبارتی است که نتیجه آن می تواند درست یا نادرست باشد (مانند یک عبارت شرطی)
- بدنه حلقه دستوراتی است که باید تکرار شوند
- اگر بدنه حلقه فقط از یک عملگر تشکیل شده باشد، شروع و پایان را می توان حذف کرد

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

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

نمونه‌ای از برنامه‌ای که آن را «شمارش بی‌صدا»
می‌نامیم بیایید برنامه را به جای ما، مثلاً تا 10، شمارش کنیم.
برنامه باید عبارت "شروع" را خروجی کند. و "Finish" و بین این اقدامات اعدادی را که در حال محاسبه هستند نمایش دهید.
مانند این، 
شروع
1 2 3 4 5 6 7 8 9 10
پایان
برنامه ای که از حلقه while استفاده می کند به این شکل است. <پیش> var i: عدد صحیح; شروع     writeln('شروع');     من := 1;     در حالی که من <= 10 شروع می کنم         write(i, ' ');         i += 1; //عملیاتی که بر تغییر متغیر در شرایط         پایان؛     writeln();     writeln('پایان'); پایان. در این برنامه به متغیر i := 1 مقداری اختصاص می دهیم - مبدا
علاوه بر این، تا زمانی که مقدار متغیر i بزرگتر از (یعنی کمتر یا مساوی) مقدار مورد نیاز ما نباشد، 
 1 - نمایش مقدار متغیر i 
 2 - مقدار متغیر i را 1 افزایش دهید - این عملگر بر مقدار شرط در براکت ها تأثیر می گذارد. متغیر i افزایش می یابد، یعنی در نقطه ای شرط i<=10 نادرست می شود. این اتفاق زمانی می افتد که i برابر با 11 شود. در این حالت، بدنه حلقه دیگر اجرا نمی شود و برنامه عبارت بعدی را بعد از حلقه اجرا می کند، i.e. writeln();
writeln('Finish');

بیایید سعی کنیم برنامه ای برای حل مشکل زیر بنویسیم:

شما باید عددی را وارد کنید (بگذارید کمتر از 3,000,000 باشد) و تعداد ارقام آن را تعیین کنید.

ایده راه حل


بیایید شمارنده ارقام یک عدد را شروع کنیم. در ابتدا، شمارنده 0 است. فقط باید به ترتیب آخرین رقم را از عدد جدا کنیم (این کار را می توان با کاهش عدد 10 برابر، با استفاده از تقسیم اعداد صحیح بر 10 انجام داد)، و هر بار باید شمارنده را افزایش دهیم. 1. 
در نتیجه بعد از اینکه همه ارقام را قطع کردیم، در شمارنده تعداد ارقام موجود در عدد بدست می آید.
به روشی دیگر، الگوریتم را می توان به صورت زیر فرموله کرد:
تا زمانی که عدد صفر نباشد، آن را 10 بار کاهش دهید و شمارنده را 1 افزایش دهید. <سر> <بدن>
شماره (n) counter
123 0
12 1
1 2
0 3
برنامه به این شکل خواهد بود. <پیش> var n، count: integer; شروع     خواندن (n);     count := 0;     در حالی که n <> 0 برای شروع         شمارش += 1;         n := n div 10;     پایان؛     writeln('Number - ', n, ' حاوی ', count, ' اعداد'); پایان. شما باید این برنامه را از روی قلب بدانید، زیرا. بر اساس آن، بسیاری از مشکلات دیگر مربوط به محاسبه اعداد با ارقام حل می شود.

وظیفه

ورودی برنامه جریان داده — دنباله ای از اعداد صحیح که به صفر ختم می شود (صفر در دنباله گنجانده نشده است). شما باید مجموع عناصر این دنباله را پیدا کنید.
 
الگوریتم حل
<پیش> مجموع = 0 ورودی x // اولین عدد را وارد کنید در حالی که x != 0 // علامت پایان ورودی در شرایط تنظیم شده است،  nc // یعنی تا زمانی که صفر را وارد کنید    جمع = مجموع + x // می توانید کاری را با شماره اصلی انجام دهید. // می توانید یک بررسی عددی برای برخی شرایط و غیره اضافه کنید.     ورودی x // عدد بعدی را وارد کنید kts جمع چاپ //خروجی نتیجه