عبارت حلقه با یک پارامتر در پاسکال. عملگرهای حلقه در پاسکال عملگر حلقه پاسکال حسابی با گام دلخواه
چرخه
برنامه هایی هستند که بارها و بارها تکرار می شوند. الگوریتم ساختار چرخه ای
یک الگوریتم حاوی چرخه است.
سه دستور حلقه در TR وجود دارد:
- حلقه با پیش شرط;
- حلقه با شرط پست;
- حلقه با پارامتر
همه چرخه ها با ویژگی های زیر مشخص می شوند:
- مقادیر متغیرهای مورد استفاده در چرخه، و عدم تغییر در آن، باید باشد قبل از ورود به حلقه تعریف شده است.
- ورود به چرخه فقط از طریق شروع آن امکان پذیر است.
- خروج از چرخه آنها هم در نتیجه خاتمه طبیعی آن و هم با کمک اپراتورهای انتقال انجام می شود.
عبارت حلقه با پیش شرط در پاسکال
عملگر حلقه با یک پیش شرط ساختار اصلی زیر را پیاده سازی می کند:
فرمت ضبط:
در حالی که L انجام OP;
جایی که:
در حالی که- نه هنوز؛
انجام دادن- اجرا کردن؛
L- بیان نوع بولی؛
OP-
برنج. 9.3. بلوک دیاگرام یک اپراتور حلقه با پیش شرط
کار اپراتور:مقدار عبارت منطقی ارزیابی می شود، اگر مقدار محاسبه شده درست باشد، دستور اجرا می شود. OPپس از آن بررسی شرط تکرار شده و دستورات بدنه حلقه اجرا می شوند. در غیر این صورت، حلقه خارج می شود.
ارزیابی مقدار یک عبارت منطقی قبل از اجرای دستورات بدنه حلقه انجام می شود، بنابراین این دستور حلقه یک حلقه با پیش شرط نامیده می شود.
مثال 9.3. برنامه ای بنویسید تا تابع y را برای مقدار معین x محاسبه کند.
جایی که: C=2.7; n=2; a=0.5; 0 برنامه Ex_2; عملگر حلقه با یک شرط پست ساختار زیر را اجرا می کند: فرمت ضبط: برنج. 9.4. بلوک دیاگرام یک اپراتور حلقه با یک شرط پس کار اپراتور: بیانیه در حال انجام است OPپس از آن مقدار عبارت منطقی محاسبه می شود Lاگر مقدار محاسبه شده نادرست، سپس دستور دوباره اجرا می شود OPدر غیر این صورت، حلقه خارج می شود. ارزیابی مقدار یک عبارت منطقی پس از اجرای دستورات بدنه حلقه انجام می شود، بنابراین این دستور حلقه یک حلقه با یک شرط پس نامیده می شود. بر خلاف یک حلقه با پیش شرط، در یک حلقه با شرط پس، بدنه حلقه بدون توجه به شرایط، حداقل یک بار اجرا می شود. برنامه Ex_2; عملگر حلقه با یک پارامتر ساختار اصلی زیر را پیاده سازی می کند: برنج. 9.5. بلوک دیاگرام یک اپراتور حلقه با یک پارامتر. قالبسوابق:
کار اپراتور: مقدار اولیه پارامتر حلقه محاسبه می شود پ.نو به پارامتر اختصاص داده می شود پ. وضعیت بررسی می شود پ?
pk،و اگر آن را درست است، واقعیدستورات بدنه حلقه اجرا می شوند OP.پس از آن، ارزش افزایش می یابد پیک بار و دوباره شرایط را بررسی کنید پ?Pk. اگر شرط نادرستحلقه خارج شده است. نمونه های ضبط: برای i:=1 تا n n:=sqr(i)+1 را انجام دهید. مثال 9.5. برنامه ای برای محاسبه تابع y برای مقدار معین n بنویسید. برنامه Ex_3; اساس برنامه نویسی حلقه ها است، به عنوان مثال، برای. پاسکال مانند هر زبان کامپیوتری، این زبان نیز شامل چنین ساختارهایی در نحو خود است. یک کار معمولی این است که کامپیوتر را مجبور کنیم یک عمل را چندین بار انجام دهد. اینجاست که سازه هایی که به شما امکان سازماندهی تکرار کد را می دهند به کمک می آیند. بنابراین، یک چرخه در برنامه نویسی یک عمل تکراری است که با استفاده از ابزارهای زبان سازماندهی می شود. زبان برنامه نویسی پاسکال شامل چندین ساختار از این قبیل است: علیرغم سادگی و آشکار بودن ساختارهای چرخه ای، برنامه نویسان مبتدی در اجرای آنها با مشکلات متعددی روبرو هستند. بزرگترین مشکل بیان شرایط برای خروج از حلقه است. از این نظر، عملگر for شمارش ساده ترین است. برای نوشتن یک ساختار تکرار با یک پارامتر، باید کد زیر را تایپ کنید: برای (الف) := (ب) برای (ج) انجام (د). در مثال، کلمات رزرو شده زبان برای راحتی کار با حروف بزرگ نوشته شده اند؛ در عمل می توانید از حروف کوچک استفاده کنید. متغیرها و عملگرهای مورد استفاده در بریس های فرفری نشان داده شده اند. منظور آنها این است که: تمرین طراحی برای، پاسکال مقدار را محاسبه می کند {
ب)، اختصاص می دهد {
الف) := (ج)، پس از آن تکرار اقدامات راه اندازی می شود: از آنجایی که تعداد تکرارها در داخل بدنه for مشخص است، این ساختار به عنوان حلقه های قطعی شناخته می شود. برای درک اینکه چگونه کار خواهد کرد برای، در ادامه، یک مثال ارائه شده است، کدی که در زبان پاسکال برای "dummies" است. با درک دستورالعمل های نوشته شده، می توانید مقادیر را در هر تکرار بنویسید: در نتیجه، کاربر عدد "15" را روی صفحه می بیند - مجموع اعداد از 1 تا 5. برای اینکه برنامه اول همه کاره تر شود، اعداد 1 و 5 را با متغیرها جایگزین کنید. هنگام استفاده از حلقه برای، پاسکال نیاز به توجه دقیق به ارزش ها دارد {
آ)،(ب) (ج). اگر قوانین نوشتن برنامه ها را رعایت نکنید، کامپایلر یک خطا را گزارش می کند. پنج قانون از این دست وجود دارد. قانون زیر به طور کلی پذیرفته شده است و با "شکل خوب" در برنامه نویسی مطابقت دارد: برای راحت کردن کار با کد، لازم است که عبارات بدنه حلقه را نه از ستون اول بنویسید. به عنوان مثال، ایجاد 2-3 فاصله در سمت چپ یا استفاده از کلید Tab. این نسخه نه تنها برای زبان پاسکال قابل اجرا است. برای آدمکها، به شما این امکان را میدهد که به سرعت یک خطا را در دستورالعملها پیدا و تصحیح کنید. بیایید بگوییم که باید کاری انجام دهیم f(x) = 3*x+15یعنی جدولی از ممقادیر تابع در محدوده [ x 1; x2]، جایی که x 1و x2- حداقل و حداکثر مقادیر آرگومان. ساخت و ساز به حل این مشکل و مشکلات مشابه کمک می کند. برای. پاسکال نوشتن کد را به روش زیر توصیه می کند: چون مرحله تغییر ایکستنظیم نشده است، مقدار آرگومان در طول برنامه در هر تکرار با استفاده از فرمول محاسبه می شود: x:=x1+(x2-x1)*(a-1)/(M-1). با توجه به مجاز بودن هر اپراتور در داخل ساختمان، مجاز است یک چرخه دیگر را در بدنه آن قرار دهد برای. پاسکال یک توضیح استاندارد برای این کار دارد، مشابه سایر زبان های برنامه نویسی: برای اینکه ساخت و ساز به درستی کار کند، باید شرایط را رعایت کرد: شمارنده ها در هر چرخه باید متفاوت باشند. در غیر این صورت، حلقه داخلی مقدار پارامتر حلقه بیرونی را تغییر می دهد که منجر به خطاهای منطقی می شود. با این عبارت، متغیرهای توربو پاسکال می توانند مقادیر خود را به صورت برنامه ای (یعنی نه از صفحه کلید) دریافت کنند. قالب: <идентификатор
(имя) переменной>:=
<выражение> سیستم ابتدا مقدار عبارت را ارزیابی می کند، سپس آن را به یک متغیر اختصاص می دهد. عملگر مرکب دستور مرکب دنباله ای از هر عبارت توربو پاسکال است که در پرانتزهای آغاز و پایان محصور شده است. مثلا: شروع a:=5; نوشتن('a=',a); پایان؛ عبارات یک دستور مرکب ممکن است شامل گزاره های مرکب دیگری نیز باشد، یعنی هر گونه عمق تودرتو مجاز است. مثلا: عملگرهای پرش شرطی آنها برای سازماندهی شاخه ها بسته به درستی یا نادرستی برخی شرایط وجود دارند. دو عملگر از این دست وجود دارد: عملگر شرطی کامل و عملگر شرطی ناقص. بیانیه شرطی کامل ساختار الگوریتمی "full fork" را پیاده سازی می کند: فرمت آن این است: اگر
<логическое выражение> سپس
<оператор 1> دیگر
<оператор 2> اگر، پس، دیگری - کلمات خدمات "اگر"، "پس"، "در غیر این صورت". قبل از کلمه else هیچ نقطه ویرگول وجود ندارد. عملگر 1 و عملگر 2 می توانند عملگرهای ساده یا مرکب باشند. یک دستور ترکیبی باید در پرانتزهای آغاز و پایان قرار داده شود. اقدامات عملگر شرطی: اگر عبارت منطقی به درستی ارزیابی شود، عبارت 1 اجرا می شود، اگر عبارت منطقی به غلط ارزیابی شود، عبارت 2 اجرا می شود. عبارت شرطی ناقص ساخت الگوریتمی "چنگال ناقص" را پیاده سازی می کند فرمت آن این است: اگر<логическое
выражение> سپس<оператор
> اگر، پس - کلمات خدمات "اگر"، "پس". یک عملگر می تواند یک عملگر ساده یا یک عملگر مرکب باشد. اقدامات عبارت شرطی: اگر عبارت منطقی به درستی ارزیابی شود، دستور اجرا می شود، اگر عبارت منطقی به false ارزیابی شود، دستور شرطی حذف شده و عبارت زیر اجرا می شود. عملگرهای شرطی (کامل و ناقص) را می توان تودرتو کرد، یعنی بعد از کلمات THEN یا ELSE دوباره از عملگر شرطی استفاده می شود. کلمه کلیدی ELSE همیشه به کلمه بعدی THEN در سمت چپ اشاره دارد. یک دستور شرطی می تواند شامل یک عبارت ساده باشد. اگر با توجه به معنای کار، نیاز به درج چندین عملگر باشد، آنها در یک ترکیب ترکیب می شوند. اظهار نظر:بعد از کلمه THEN، یک دستور شرطی جدید را نمی توان بلافاصله نوشت، اما بعد از ELSE، می تواند. مثلا: در مواردی که باید چندین شرط را بررسی کنید، از عبارات شرطی پیچیده استفاده می شود. آنها از عملیات منطقی و، نه، یا استفاده می کنند. مثلا: اگر ((x>3) و (y>3) و (z>3)) سپس ... اپراتورهای سازمان حلقه حلقه بخشی از یک برنامه است که چندین بار تکرار می شود. برای سازماندهی یک چرخه در پاسکال، از سه عملگر استفاده می شود: یک عملگر با پیش شرط، یک عملگر با یک شرط پس و یک عملگر با یک پارامتر. بیانیه حلقه با پیش شرط این دستور فلوچارت حلقه ای را با پیش شرط پیاده سازی می کند: فرمت آن این است: در حالی که
<логическое выражение> انجام دادن
<тело цикла> در حالی که ("در حالی که")، آیا ("انجام") - کلمات خدمات. اقدامات عملگر: در حالی که عبارت منطقی به درستی ارزیابی می شود، بدنه حلقه اجرا می شود. به محض اینکه عبارت منطقی به false ارزیابی شود، عبارت به پایان می رسد و عبارت زیر اجرا می شود. مقدار عبارت منطقی قبل از بدنه حلقه بررسی می شود. اگر عبارت منطقی از همان ابتدا نادرست باشد، بدنه حلقه بلافاصله حذف می شود. اگر بدنه حلقه حاوی دنباله ای از دستورات باشد، می گویند که یک دستور مرکب را تشکیل می دهد که در ابتدا و در انتهای آن باید براکت های اپراتور Begin و End را بنویسید. اگر بدنه حلقه یک دستور واحد باشد (نه ترکیبی)، پس هیچ براکتی لازم نیست. سپس کامپایلر در نظر می گیرد که بدنه حلقه به نزدیکترین کاراکتر ";" ختم می شود. در پاسکال کلمه خاصی برای نشان دادن شروع یک چرخه و پایان یک چرخه وجود ندارد. برای همه موارد، کلمات جهانی Begin و End وجود دارد. بیانیه حلقه با شرط پست این دستور یک بلوک دیاگرام یک حلقه را با یک شرط پست پیاده سازی می کند: فرمت آن این است: تکرار
<тело цикла> تا زمان
<логическое выражение> تکرار ("تکرار")، تا ("تا") - کلمات خدمات. بدنه حلقه می تواند یک دستور منفرد یا ترکیبی باشد، اما استفاده از Begin و End لازم نیست، زیرا کلمات Repeat و Until خود به عنوان براکت عملگر عمل می کنند. اقدامات عملگر: بدنه حلقه اجرا می شود، سپس مقدار عبارت منطقی بررسی می شود. اگر عبارت بولی نادرست ارزیابی شود، بدنه حلقه دوباره اجرا می شود. این کار تا زمانی ادامه می یابد که عبارت بولی به درستی ارزیابی شود. یعنی اگر شرط نادرست باشد، بدنه حلقه اجرای خود را تکرار می کند. زمانی که شرط درست شود، تکرار پایان می یابد. عمل دستور به پایان می رسد و دستور بعد از آن اجرا می شود. مقدار عبارت منطقی بعد از بدنه حلقه بررسی می شود. یادداشت: قبل از هر اجرای بدنه حلقه، عبارت بولی باید مقدار مشخصی داشته باشد. بدنه حلقه باید حداقل یک عبارت داشته باشد که بر مقدار عبارت منطقی تأثیر بگذارد، در غیر این صورت حلقه به طور نامحدود اجرا می شود. در نهایت، عبارت بولی باید مقداری به خود بگیرد که حلقه را به پایان برساند. بیانیه حلقه با پارامتر این دستور بلوک دیاگرام یک حلقه را با شمارنده پیاده سازی می کند. فرمت آن این است: برای
<параметр цикла>:=
<арифметическое
выражение 1> به
<арифметическое выражение 2> انجام دادن
<тело цикла> برای
< параметр цикла >:=
<
арифметическое выражение 1> پایین به
< арифметическое выражение 2> انجام دادن
<тело цикла> پارامتر حلقه یک متغیر از هر نوع به جز واقعی است. عبارات حسابی 1 و 2 باید از همان نوع پارامتر حلقه باشند. بدنه حلقه هر عملگر پاسکال (ساده، پیچیده، مرکب) است. عمل عملگر: به پارامتر چرخه مقدار عبارت حسابی 1 اختصاص داده می شود. اگر کمتر باشد (برای برای-
به-
انجام دادن) یا بیشتر (برای برای-
پایین به-
انجام دادن) مقدار عبارت حسابی 2، سپس بدنه حلقه اجرا می شود. سپس پارامتر حلقه به مقدار مشخص شده در بدنه حلقه افزایش (کاهش) می یابد. سپس دوباره با عبارت حسابی 2 مقایسه می شود. و به همین ترتیب تا زمانی که پارامتر حلقه بزرگتر (کمتر) از مقدار عبارت حسابی 2 شود. سپس عملگر حلقه کار خود را تمام می کند و عملگر بعدی اجرا می شود. اگر پارامتر حلقه از نوع عدد صحیح باشد، با کلمه به مرحله تغییر پارامتر برابر با یک است (با پایین به مرحله 1- است). این عملگر کاربرد محدودی دارد، یعنی فقط در مواردی می توان از آن استفاده کرد که تعداد تکرارهای بدنه حلقه مشخص باشد. هنگام حل اکثریت قریب به اتفاق مشکلات (از جمله موارد بسیار ساده)، عملاً غیرممکن است که به صراحت تمام عملیاتی را که باید در برنامه انجام شوند مشخص کنید. در واقع، لازم است مجموع n جمله اول سری هارمونیک را محاسبه کنیم: Y= 1+ 1/2+ 1/3 + …+ 1/n بدیهی است که تنها با استفاده از انواع عملگرهایی که در بالا در نظر گرفته شد، می توان برنامه ای را فقط برای مقدار ثابت n نوشت. به عنوان مثال، با n=5، محاسبات مورد نیاز را می توان با استفاده از عملگر انتساب فرم مشخص کرد: Y:= 1+1/2+1/3+1/4+1/5 اگر مقدار n ثابت نباشد، اما داده های اولیه ای است که در طول اجرای برنامه وارد می شود (و حتی ثابتی که در برنامه توضیح داده شده است)، نمی توان یک عملگر انتساب مشابه را نوشت. برای رکوردی به شکل Y:= 1+1/2+1/3+…+1/ n در زبان های برنامه نویسی مجاز نیست. برای از بین بردن مشکلات پیش آمده عبارات حلقه. آنها به شما امکان می دهند اجرای بخش های جداگانه برنامه را تکرار کنید. چهار تا هست اپراتور چرخهبه یک شکل در همه زبان های برنامه نویسی وجود دارد: عملگر حلقه محاسباتی ساده(حلقه با پارامتر مرحله 1)، عملگر حلقه محاسباتی پیچیده(حلقه با پارامتر گام دلخواه)، عملگر حلقه تکراری با پیش شرط, عملگر حلقه تکرار شونده با شرط پست. برگردیم به مسئله بالا در محاسبه مجموع n جمله اول یک سری هارمونیک که اگر مقدار n از قبل ثابت نباشد قوانین آن را نمی توان به صورت یک عبارت حسابی مشخص کرد. در واقع، محاسبه این مجموع را می توان بر اساس یک الگوریتم بسیار ساده و فشرده انجام داد: ابتدا y=0 (با استفاده از عملگر انتساب y:=0) تنظیم می کنیم و سپس عملگر انتساب y:= y+ را اجرا می کنیم. 1/i برای مقادیر متوالی i= 1,2,…, n. با هر اجرای بعدی این عملگر، عبارت بعدی به مقدار فعلی y اضافه می شود. همانطور که مشاهده می شود، در این مورد فرآیند محاسبه چرخه ای خواهد بود: اپراتور y:= y+1/iباید بارها و بارها اجرا شود، یعنی. به صورت دوره ای، برای مقادیر مختلف i. این مثال از یک فرآیند محاسباتی چرخه ای کاملاً معمولی است. ویژگی های بارز آن این است که برای یک کار فشرده از این نوع فرآیندهای محاسباتی، آن است بیانیه حلقه با پارامتر. رایج ترین شکل استفاده شده از این عملگر در پاسکال به شرح زیر است: برای V:= E1 تا E2 S را انجام دهید، جایی که برای(برای)، به(افزایش به) و انجام دادن(انجام، انجام دادن) - کلمات خدماتی، Vیک متغیر از نوع ترتیبی است که پارامتر حلقه نامیده می شود، E1و E2- عباراتی از همان نوع پارامتر حلقه، اس- عبارتی که به طور مکرر در یک چرخه به نام بدنه چرخه اجرا می شود. توجه داشته باشید که در Pascal after انجام دادنباید یک اپراتور وجود داشته باشد، اگر لازم است چندین عمل انجام شود، باید آنها را با قرار دادن در براکت های عملگر در یک عملگر ترکیبی ترکیب کرد. این عملگر حلقه پاسکال مقادیر متوالی را به پارامتر حلقه V از مقدار اولیه برابر با مقدار عبارت E1 تا مقدار نهایی برابر با مقدار عبارت E2 اختصاص می دهد. در هر تکرار، دستور انتساب اجرا می شود V:= succ(V)و اجرای عملگر S در هر مقدار از پارامتر سیکل V. در این حالت مقادیر عبارات E1 و E2 یک بار در ورودی عملگر چرخه و مقدار پارامتر سیکل ارزیابی می شود. V نباید در نتیجه اجرای عملگر S تغییر کند. اگر مقدار نهایی مشخص شده کمتر از مقدار اولیه (که مجاز است) باشد، دستور S هرگز اجرا نمی شود. در پاسکال در نظر گرفته شده است که در طول اجرای عادی دستور حلقه، مقدار پارامتر حلقه تعریف نشده است. استفاده كردن عملگر حلقه با پارامترالگوریتم محاسبه مجموع n جمله اول سری هارمونیک را می توان به صورت زیر ارائه کرد: readln(n); در برخی موارد، برای پارامتر چرخه پاسکال راحت است که مقادیر متوالی را بگیرد، اما نه افزایش، بلکه کاهش می دهد. برای چنین مواردی، پاسکال یک عملگر حلقه با پارامتری به شکل زیر ارائه می دهد: برای V:= E1 تا E2 انجام دهید S، جایی که پایین به(کاهش به) یک کلمه خدماتی است و همه کلمات و عبارات دیگر به همین معنی هستند. تغییر پارامتر چرخه از یک مقدار بزرگتر به یک مقدار کوچکتر زمانی اتفاق می افتد که تخصیص V:=pred(V) انجام شود. توجه داشته باشید که مقدار شروع ممکن است کمتر از مقدار پایان باشد. در این حالت دستور S هرگز اجرا نخواهد شد. مقدار پارامتر حلقه در پایان اجرای چنین حلقه ای نیز تعریف نشده در نظر گرفته می شود. همچنین باید به خاطر داشت که برای هر دو گزینه ضبط حلقه با پارامتر true: اگر مقادیر اولیه و نهایی برابر باشند، بدنه حلقه (عبارت S) یک بار اجرا می شود. به این نکته نیز توجه کنیم پارامتر حلقهممکن است در بدنه حلقه استفاده نشود، بنابراین هدف اصلی آن کنترل تعداد تکرارهای حلقه است. به عنوان مثال، مقدار y= x n، که در آن n>=0 یک عدد صحیح است، می تواند با استفاده از الگوریتم زیر محاسبه شود: ابتدا y=1 را قرار داده و سپس این مقدار را در x n ضرب کنید: readln(n); همانطور که می بینید، در اینجا پارامتر حلقه i فقط برای اطمینان از اینکه بدنه حلقه (اپراتور y:= y* x) به تعداد دفعات مورد نیاز اجرا می شود خدمت می کند. یک عارضه طبیعی چرخه حسابی ساده پاسکال، چرخه ای است که در آن پارامتر چرخه نه با 1، بلکه با یک مقدار دلخواه تغییر می کند - مرحله افزایشی. در این حالت، در طول اجرای چرخه، گام طبق قانون معین تغییر می کند. عملگرهای استاندارد برای اجرای چنین چرخه ای در Forth هستند، در زبان های دیگر آنها باید از ساده ترین چرخه حسابی سازماندهی شوند. حلقههای تکرار شونده با حلقههای دارای پارامتر تفاوت دارند زیرا تعداد تکرارها از قبل مشخص نیست. اجازه دهید بریم سراغ قارچ و وقتی سبد پر شد به خانه برگردیم. تمام جمع کننده های قارچ به 2 دسته تقسیم می شوند: این منجر به دو گزینه برای پیاده سازی چرخه های تکراری می شود: در یک حلقه با پیش شرط، ابتدا شرط بررسی می شود و سپس مرحله انجام می شود. جمع کننده قارچ با یک سبد کامل یا تقریباً پر عرضه می شود. در یک حلقه با یک شرط پس، ابتدا یک مرحله، و سپس یک بررسی. مانند هر جمع کننده قارچ معمولی، این یکی نیز یک سبد پر یا کمی پر می آورد. کدام الگوریتم را انتخاب کنیم؟ بستگی به کار خاص دارد. اگر با برداشتن یک قدم بدون بررسی، می توانید در سوراخی بیفتید، بهتر است در ابتدا بررسی کنید (مثل یک مرد کور با چوب). خوب، اگر مرحله بدون بررسی شما را نمی ترساند، می توانید آن را تا اتمام مرحله به تعویق بیندازید. همچنین باید رویدادی را که انتظار داریم تحلیل کنیم. اگر می تواند قبل از مرحله اول اتفاق بیفتد، یک حلقه با یک پیش شرط لازم است. و اگر رویداد نتواند قبل از مرحله اول اتفاق بیفتد، یک حلقه با یک شرط پس مورد نیاز است. اکنون یک مسئله ریاضی را در نظر بگیرید. اجازه دهید مجموع اولین جمله های سری هارمونیک را که شرط 1/i>= e را برآورده می کند، محاسبه کنیم، جایی که 0< e<1, а i=1,2,3…...Эту задачу можно решить по следующему алгоритму: положить предварительно y=0 и i=0, а затем в цикле увеличивать i на 1, к значению y добавлять очередное слагаемое 1/ i до тех пор, пока текущее значение 1/ i впервые окажется больше заданного значения 0< e<1. بدیهی است که تعداد تکرارهای این چرخه از قبل مشخص نیست. در چنین مواردی، ما فقط می توانیم شرایطی را فرمول بندی کنیم که تحت آن فرآیند اضافه کردن عبارت بعدی به جمع باید تکمیل شود. برای تعیین چنین فرآیندهای محاسباتی، از عملگر چرخه پاسکال با یک شرط پس استفاده می شود. این اپراتور به شکل زیر است: S1 را تکرار کنید؛ S2;…; Si تا B، جایی که تکرار(تکرار) و تا زمان(قبل از) - کلمات خدماتی، از طریق سیهر عملگر پاسکال و از طریق را نشان می دهد که دریک بیان منطقی است هنگامی که این دستور حلقه اجرا می شود، دنباله ای از دستورات بین کلمات تکرار و تا یک یا چند بار اجرا می شود. این فرآیند زمانی به پایان می رسد که، پس از اجرای بعدی دنباله ای از دستورات، عبارت منطقی B (برای اولین بار) به درستی ارزیابی شود. بدین ترتیب با استفاده از عبارت منطقی B شرط تکمیل اجرای دستور حلقه مشخص می شود. از آنجایی که در این حالت شرط پس از اجرای دنباله ای از دستورات (بدن حلقه) بررسی می شود، به این دستور حلقه یک دستور حلقه با شرط پسین می گویند. با استفاده از این نوع عملگر سیکل پاسکال، مسئله جمعبندی اولین جملههای یک سری هارمونیک که یک شرط معین را برآورده میکنند، میتوان به صورت زیر پیادهسازی کرد: readln(e); توجه داشته باشید که عملگر حلقه با یک شرط پست کلی تر از عملگر حلقه با یک پارامتر است - هر فرآیند چرخه ای مشخص شده با استفاده از یک حلقه با یک پارامتر می تواند به عنوان یک حلقه با یک شرط پستی نمایش داده شود. این صحبت درست نیست. به عنوان مثال، مشکل جمع n جمله اول یک سری هارمونیک، که قبلا در نظر گرفته شد، با یک عملگر حلقه با یک شرط پس، به این صورت خواهد بود: readln(n); در مورد عملگر حلقه پاسکال با یک شرط پس، حتماً دنباله عملگرهای موجود در آن حداقل یک بار اجرا می شود. در همین حال، اغلب اوقات چنین فرآیندهای چرخه ای وجود دارد که تعداد تکرارهای چرخه نیز از قبل ناشناخته است، اما برای برخی از مقادیر داده های اولیه، اقدامات ارائه شده در چرخه به هیچ وجه نباید انجام شود، و حتی یک اجرای منفرد این اقدامات می تواند منجر به نتایج نادرست یا نامشخص شود. مثلاً یک عدد واقعی M داده شود، باید کوچکترین عدد صحیح غیرمنفی k را که برای آن 3 k> M است، پیدا کنید. ; سپس در یک حلقه مقدار y را در 3 ضرب کنید و مقدار k را 1 افزایش دهید تا زمانی که مقدار فعلی y برای اولین بار از مقدار M بیشتر شود. در نگاه اول، در اینجا می توانید از عبارت حلقه با یک استفاده کنید. پس شرط: Y:=1; k:=0; با این حال، تأیید آن برای M آسان است<1 будет получен неправильный результат k=1, тогда как должно быть получено k=0: в этом случае предварительно сформированное значение k=0 является окончательным результатом и действия, предусмотренные в цикле, выполняться не должны. برای تنظیم این نوع فرآیندهای محاسباتی، زمانی که تعداد تکرارهای چرخه از قبل مشخص نیست و ممکن است اقدامات پیش بینی شده در چرخه اصلاً انجام نشود، از عملگر چرخه با پیش شرط استفاده می شود. این عملگر حلقه در پاسکال شکل زیر را دارد: جایی که در حالی که(خدا حافظ)، انجام دادن(انجام، انجام) - کلمات خدماتی، که در- بیان بولی، اس- اپراتور. در اینجا دستور S صفر یا چند بار اجرا می شود، اما قبل از هر اجرا، مقدار عبارت B ارزیابی می شود و دستور S تنها در صورتی اجرا می شود که مقدار عبارت B درست باشد. دستور حلقه زمانی به پایان می رسد که عبارت B برای اولین بار نادرست ارزیابی شود. اگر عبارت B اولین باری که ارزیابی می شود این مقدار را بگیرد، دستور S حتی یک بار هم اجرا نمی شود. در مسئله ای که در نظر داریم، مقدار صحیح k برای هر مقدار M را می توان به صورت زیر بدست آورد: Y:=1; k:=0; عملگر چرخه پاسکال با یک پیش شرط را می توان جهانی ترین عملگر در نظر گرفت - با استفاده از چنین عملگرهایی، می توان فرآیندهای چرخه ای تعریف شده توسط عملگرهای چرخه را با یک پارامتر و یک پس شرط تعریف کرد. توجه داشته باشید تفاوت ها و ویژگی های یک سبک کار خوببا عملگرهای چرخه ای در نظر گرفته شده دستوری که در یک حلقه اجرا می شود خود می تواند یک حلقه باشد. این برای همه انواع چرخه ها صدق می کند. در نتیجه می گیریم حلقه های تو در تو. در نظر گرفتن مکانیسم حلقه های تو در تو با استفاده از مثال حلقه های تو در تو با یک پارامتر راحت تر است. فرض کنید باید عملکرد یک ساعت الکترونیکی را از نقطه زمانی 0 ساعت، 0 دقیقه، 0 ثانیه توصیف کنیم. مقدار دقیقه تنها پس از اینکه ثانیهها از تمام مقادیر متوالی از 0 تا 59 عبور کردند به 1 تبدیل میشود. ساعتها تنها پس از اینکه دقیقهها از تمام مقادیر متوالی از 0 به 0 گذشتند، مقدار آن به 1 تغییر میکند. 59. بنابراین، خروجی تمام مقادیر زمان از ابتدای روز تا پایان روز را می توان با قطعه برنامه زیر نشان داد: برای h:=0 تا 23 انجام دهید برای سهولت پیاده سازی ساختارهای چرخه ای در پاسکال، آخرین نسخه های زبان عملگرها را معرفی می کنند. زنگ تفريحو ادامه هیددر داخل حلقه ها استفاده می شود. آنها امکانات استفاده از حلقه ها را گسترش می دهند و ساختار برنامه را بهبود می بخشند. در طول اجرای بدنه حلقه قبل از تکمیل کامل حلقه، ممکن است شرایط اضافی ایجاد شود که به پایان حلقه نیاز دارد. در این مورد، حلقه را می توان با یک دستور break خاتمه داد. در حین اجرای حلقه، ممکن است شرایطی ایجاد شود که در آن لازم است از تمام یا برخی از اقدامات پیش بینی شده در حلقه صرفنظر شود، بدون اینکه حلقه به طور کلی متوقف شود. برای این کار از دستور continue استفاده می شود که کنترل را به نقطه ای از برنامه منتقل می کند که شرط ادامه یا خاتمه حلقه بررسی می شود. اغلب اوقات نیاز به اجرای یک دستور (یا گروهی از دستورات) چندین بار وجود دارد. برای این، در زبانپاسکال ارائه شده است عملگرهای حلقه
1. اپراتور چرخه با پیش شرط.
فرم ضبط: در حالی که<условие>انجام دادن<оператор>;
اینجا در حالی که(خدا حافظ)،انجام دادن (انجام دادن)- کلمات رزرو شده عملگر می تواند هر عملگر ساده یا مرکب باشد. اینجا<оператор>فقط در صورت و تا زمانی که true باشد اجرا می شود<условие>، که با هر بار اجرای دستور بررسی می شود. اگر از ابتدا شرط مهم استنادرست ، دستور حلقه هرگز اجرا نخواهد شد. بلوک دیاگرام الگوریتم عملکرد چنین اپراتور در شکل نشان داده شده است. 1. برنج. 1. عملگر حلقه با پیش شرط مثال من
مسیر .
محاسبه فاکتوریل یک عدد پ(یعنی محصولات 1 2 ...پ):
برنامه Fact_1; Const n=5; Vari, fact:integer; شروع i:=1; واقعیت:=1; در حالی که من<=n do {заголовок цикла}
شروع (آغاز حلقه) واقعیت:= واقعیت*i; i:= i + 1 پایان؛ (پایان چرخه) WriteLn("factorial", n, " = ",Fact:10) پایان. 2. اپراتور سیکل با شرط پست.
بلوک دیاگرام الگوریتم کار اپراتور در شکل 2 نشان داده شده است. فرم ضبط:
تکرار <оператор1>;
<оператор2>;
تا زمان<условие>;
در اینجا تکرار کنید (تا آن زمان تکرار کنید)
تا زمان (تا زمانی که شرط برقرار شود)
- کلمات رزرو شده دنباله ای از عبارات می تواند از یک یا چند عبارت تشکیل شده باشد. برخلاف مورد قبلی، در این حلقه، شرط همیشه پس از اجرای عملگر (یا دنباله عملگرها) بررسی می شود، اگر نادرست باشد، عملگر دوباره اجرا می شود، در غیر این صورت، حلقه از پیش اجرا می شود. کوتاه می کند. با چنین ساختاریاپراتور باید حداقل یک باربه طور موثر اجرا خواهد شد. مثال:
II
مسیر .
محاسبه فاکتوریل یک عدد پ(یعنی محصولات 1 2 ...پ):
برنامه Fact_2; Const n=5; Vari, fact:integer; شروع i:=1; واقعیت:=1; تکرار شروع (آغاز حلقه) واقعیت:= واقعیت*i; i:= i + 1 پایان؛ (انتهای بدنه حلقه) تا i >n; ( وضعیت ) WriteLn(‘ Factorial ", n, " = ", Fact:10) پایان. اینجا من یک شمارنده تکرار است که باید به صورت دستی در حلقه تغییر کند. 3. اپراتور چرخه با یک پارامتر.
این حلقه به شما این امکان را می دهد که عمل را چندین بار تکرار کنید. شمارنده متغیری است که تعداد تکرارهای حلقه را می شمارد. در چنین چرخه ای، شمارنده به طور خودکار دقیقاً 1 افزایش می یابد. فرم ضبط:
برایشمارنده = مقدار_شروعبهارزش_پایانیانجام دادن شروع .
. . .
پایان;
اگر می خواهید پارامتر 1 کاهش یابد، از آن استفاده کنیدکلمه را صدا کن پایین به(مقدار شروع بزرگتر از مقدار پایان است). مثال:
III
مسیر محاسبه فاکتوریل یک عدد پ(یعنی محصولات 1 2 ...پ):
برنامه Fact_3; Const n=5; Vari, fact:integer; شروع واقعیت:=1; برای i:=1 تا n انجام شروع (آغاز حلقه) واقعیت:= واقعیت*i; پایان؛ (پایان چرخه) WriteLn ("عاملی"، n، "="، Fact:10) پایان. به عنوان یک اپراتور، می توانید از هر ساده یا استفاده کنیداپراتور مجموعه هنگام استفاده از این دستور حلقه، قوانین زیر را به خاطر بسپارید: 1)
به عنوان یک پارامتر، می توانید از یک متغیر ساده استفاده کنید،شرح داده شده در همان بلوک؛ 2)
پارامتر باید از نوع گسسته باشد. 3)
مقادیر شروع و پایان باید از همان نوع باشندپارامتر؛ 4) در بدنه حلقه (اپراتور) تغییر صریح مقدار پارامتر(به عنوان مثال، توسط یک عملگر انتساب) می تواند به بی نهایت منجر شودچرخه؛ 5)
شما نمی توانید مقادیر شروع و پایان را در بدنه حلقه تغییر دهیدپارامترها، اگر توسط متغیرها داده شوند. 6)
پس از پایان چرخه، اگر چرخه قطع نشده باشد، مقدار پارامتر برابر با مقدار نهایی پارامتر می شود.اپراتور انتقال بدون کمک دیگری 1.
برنامه ای بنویسید که اعداد را در قالب منطقه نمایش دهد: 7
49
5
25
3
9
1
1
2.
مشکل را به سه روش حل کنید(با استفاده از انواع مختلف حلقه): بعد از چند سال L مبلغ واریزی به میزان دلخواه خواهد رسیداس (مالش)، با سپرده اولیه V (روبل)، اگر سود سالانه تضمین شده توسط بانک 10٪ از مبلغ سپرده باشد. الگوریتم را برای S = 100000 روبل، V = 10000 روبل.
از crt استفاده کنید.
Var
y، C، a، t:real;
n:عدد صحیح
شروع
clrscr;
Writeln ("C, a, n" را وارد کنید)؛ خواندن (C, a, n);
WriteIn("نتیجه:");
Writeln("t':5,'y':15);
t:=0;
در حالی که تی<1 do
شروع
y:=C*exp(a*t)*cos(n*t);
Writeln(t:4:1،' ':5, y:10);
t:=t+0.1;
پایان؛
پایان.عملگر حلقه با شرط پست در پاسکال
تکرار
OP
تا L;
جایی که:
تکرار- تکرار؛
تا زمان- نه هنوز؛
L- بیان نوع بولی؛
OP-بدن چرخه؛ عملگر (ساده یا مرکب).
در یک دستور حلقه با یک شرط پس، کلمات کلیدی تکرارو تا زماننقش براکت های اپراتور را بازی می کند.
مثال 9.4. برنامه ای بنویسید تا تابع y را برای مقدار معین x محاسبه کند.
جایی که: C=2.7; n=2; a=0.5; 0
از crt استفاده کنید.
Var
y، C، a، t:real;
n:عدد صحیح
شروع
clrscr;
Writeln ("C, a, n" را وارد کنید)؛
خواندن (C, a, n);
WriteIn("نتیجه:"); Writeln("t':5,'y':15);
t:=0;
تکرار
y:=C*exp(a*t)*cos(n*t);
Writeln(t:4:1،' ':5, y:10);
t:=t+0.1;
تا اینکه t>=1;
پایان.عبارت حلقه با پارامتر در پاسکال
1. برای P:=Pn به Pk انجام OP;
2. برای P:=Pk پایین به Pn انجام OP;
جایی که:
برای- برای؛
به- قبل از؛
پایین به-کاهش به
انجام دادن- اجرا کردن؛
OP-بدن چرخه؛ عملگر (ساده یا مرکب)؛
پ-پارامتر حلقه، متغیر از نوع ترتیبی.
Pn، Pkمقدار اولیه و نهایی پارامتر
در اپراتور با پایین بهمرحله تغییر پارامتر سیکل برابر است با –1
.
برای s:='A' تا 'Z' R:=R+ord(s)/127;
برای L:=False to True H:= (False or L) And Not (L);
جایی که: C=2.7; a=0.5; t=0.1; 0
از crt استفاده کنید.
Var
y، C، a، t:real;
n:عدد صحیح
شروع
clrscr;
Writeln ("C, a, t را وارد کنید");
خواندن (C, a, n);
WriteIn("نتیجه:");
WriteIn('n':5,'y':15);
برای n: = 1 تا 10 انجام دهید
شروع
y:=C*exp(a*t)*cos(n*t);
Writeln(n:4,' ':5, y:10);
پایان؛
پایان.هدف گزاره های چرخه ای
ساختار
مثال
اشتباهات رایج
وظایف معمولی
چرخه در یک چرخه
عملگر حلقه محاسباتی ساده پاسکال (حلقه با پارامتر)
Y:= 0;
برای i:= 1 تا n y:= y+1/i;
readln(x);
Y:= 1;
برای i:= 1 تا n y:= y*x;عملگر حلقه پاسکال حسابی با گام دلخواه
عملگرهای حلقه پاسکال تکرار شونده
با پیش شرط و پس شرطعملگر حلقه پاسکال با شرط پست
i:=0;
y:=0;
تکرار
i:=i+1;
y:=y+1/i;
تا 1/i
i:=0;
y:=0;
تکرار
i:=i+1;
y:=y+1/i;
تا i>n;عملگر حلقه پاسکال با پیش شرط
تکرار
y:=y*3;
k:=k+1;
تا y> M;
در حالی که شما شروع می کنید
y:=y*3;
k:=k+1;
پایان؛حلقه با پیش شرط while (در حالی که شرط درست است)
حلقه با شرط پست تکرار (تا زمانی که شرط درست باشد)
حلقه با شمارنده (با پارامتر) For
برای m:=0 تا 59 انجام دهید
برای s:=0 تا 59 انجام دهید
Writeln(h":"m":"s);