• عبارت حلقه با یک پارامتر در پاسکال. عملگرهای حلقه در پاسکال عملگر حلقه پاسکال حسابی با گام دلخواه

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

    • حلقه با پیش شرط;
    • حلقه با شرط پست;
    • حلقه با پارامتر

    همه چرخه ها با ویژگی های زیر مشخص می شوند:

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

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

    عملگر حلقه با یک پیش شرط ساختار اصلی زیر را پیاده سازی می کند:

    فرمت ضبط:
    در حالی که L انجام OP;
    جایی که:
    در حالی که- نه هنوز؛
    انجام دادن- اجرا کردن؛
    L- بیان نوع بولی؛
    OP-

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

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

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

    مثال 9.3. برنامه ای بنویسید تا تابع y را برای مقدار معین x محاسبه کند.

    جایی که: C=2.7; n=2; a=0.5; 0

    برنامه Ex_2;
    از 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. بلوک دیاگرام یک اپراتور حلقه با یک شرط پس

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

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

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


    جایی که: C=2.7; n=2; a=0.5; 0

    برنامه Ex_2;
    از 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;
    پایان.

    عبارت حلقه با پارامتر در پاسکال

    عملگر حلقه با یک پارامتر ساختار اصلی زیر را پیاده سازی می کند:

    برنج. 9.5. بلوک دیاگرام یک اپراتور حلقه با یک پارامتر.

    قالبسوابق:
    1. برای P:=Pn به Pk انجام OP;
    2. برای P:=Pk پایین به Pn انجام OP;
    جایی که:
    برای- برای؛
    به- قبل از؛
    پایین به-کاهش به
    انجام دادن- اجرا کردن؛
    OP-بدن چرخه؛ عملگر (ساده یا مرکب)؛
    پ-پارامتر حلقه، متغیر از نوع ترتیبی.
    Pn، Pkمقدار اولیه و نهایی پارامتر

    کار اپراتور: مقدار اولیه پارامتر حلقه محاسبه می شود پ.نو به پارامتر اختصاص داده می شود پ. وضعیت بررسی می شود پ? pk،و اگر آن را درست است، واقعیدستورات بدنه حلقه اجرا می شوند OP.پس از آن، ارزش افزایش می یابد پیک بار و دوباره شرایط را بررسی کنید پ?Pk. اگر شرط نادرستحلقه خارج شده است.
    در اپراتور با پایین بهمرحله تغییر پارامتر سیکل برابر است با –1 .

    نمونه های ضبط:

    برای i:=1 تا n n:=sqr(i)+1 را انجام دهید.
    برای s:='A' تا 'Z' R:=R+ord(s)/127;
    برای L:=False to True H:= (False or L) And Not (L);

    مثال 9.5. برنامه ای برای محاسبه تابع y برای مقدار معین n بنویسید.


    جایی که: C=2.7; a=0.5; t=0.1; 0

    برنامه Ex_3;
    از 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);
    پایان؛
    پایان.

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

    هدف گزاره های چرخه ای

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

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

    • برای- با یک پارامتر تکرار کنید.
    • در حالی که- تکرار با پیش شرط؛
    • تکرار ... تا زمان- تکرار با شرط پسین

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

    ساختار

    برای نوشتن یک ساختار تکرار با یک پارامتر، باید کد زیر را تایپ کنید:

    برای (الف) := (ب) برای (ج) انجام (د).

    در مثال، کلمات رزرو شده زبان برای راحتی کار با حروف بزرگ نوشته شده اند؛ در عمل می توانید از حروف کوچک استفاده کنید. متغیرها و عملگرهای مورد استفاده در بریس های فرفری نشان داده شده اند. منظور آنها این است که:

    • { آ)- یک متغیر از هر نوع قابل شمارش، اغلب INTEGER.
    • { ب) (ج)- عبارات یک نوع قابل شمارش، همان { آ);
    • { د)- یک عملگر/عملگر دلخواه زبان که بدنه حلقه نیز نامیده می شود.

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

    • بررسی وضعیت { ب) <= { ج)، پس از اجرای آن حلقه کار خود را متوقف می کند.
    • شروع اپراتور (د);
    • افزایش مقدار (a) توسط یک، یعنی. { الف) := (الف) + 1.

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

    مثال

    برای درک اینکه چگونه کار خواهد کرد برای، در ادامه، یک مثال ارائه شده است، کدی که در زبان پاسکال برای "dummies" است.

    • s:= 0;
    • برای یک: = 1 تا 5 انجام دهید
    • شروع
    • s:= s + a;
    • پایان؛
    • نوشتن (ها)؛

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

    • تکرار اول: a = 1; s = 1;
    • تکرار دوم: a = 2;s = 3;
    • تکرار سوم: a = 3;s = 6;
    • تکرار چهارم: a = 4;s = 10;
    • تکرار پنجم: a = 5;s = 15.

    در نتیجه، کاربر عدد "15" را روی صفحه می بیند - مجموع اعداد از 1 تا 5.

    برای اینکه برنامه اول همه کاره تر شود، اعداد 1 و 5 را با متغیرها جایگزین کنید.

    اشتباهات رایج

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

    1. شمارنده (پارامتر حلقه) { آ)به عنوان یک عدد صحیح داده می شود.
    2. ارزش های { ب)و { ج)همچنین باید از نوع انتگرال باشد. به عنوان مثال، شما باید مقادیر زاویه داده شده بر حسب رادیان را از 0 تا p محاسبه کنید. اما ورود کد زیر اشتباه خواهد بود برایa:=0بهپیانجام دادن.راه حل - از توابع گرد کردن استفاده کنید تنه() یا گرد(). اولی قسمت کسری یک عدد واقعی را دور می زند، دومی آن را به نزدیکترین عدد صحیح گرد می کند.
    3. اگر کاربر اشتباه کرد و نشان داد (ب) < (ج)، اپراتور (د)هرگز کار نخواهد کرد.
    4. پس از اجرای حلقه، شمارنده { آ)می تواند هر ارزشی داشته باشد اگرچه این در عمل با منطق مخالفت می کند { آ) <> { ج). نتیجه گیری: توصیه نمی شود { آ)پس از ساخت و ساز برای.
    5. در بدنه حلقه (یعنی بعد از کلمه انجام دادن) استفاده از عملگرهایی که مقادیر پارامتر را تغییر می دهند توصیه نمی شود { آ). رعایت این قانون خطایی ایجاد نمی کند، اما منطق برنامه نقض می شود.

    قانون زیر به طور کلی پذیرفته شده است و با "شکل خوب" در برنامه نویسی مطابقت دارد: برای راحت کردن کار با کد، لازم است که عبارات بدنه حلقه را نه از ستون اول بنویسید. به عنوان مثال، ایجاد 2-3 فاصله در سمت چپ یا استفاده از کلید Tab.

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

    وظایف معمولی

    بیایید بگوییم که باید کاری انجام دهیم f(x) = 3*x+15یعنی جدولی از ممقادیر تابع در محدوده [ x 1; x2]، جایی که x 1و x2- حداقل و حداکثر مقادیر آرگومان. ساخت و ساز به حل این مشکل و مشکلات مشابه کمک می کند. برای. پاسکال نوشتن کد را به روش زیر توصیه می کند:

    • برای یک: = 1 تا M انجام دهید
    • شروع
    • x:= x1+(x2-x1)*(a-1)/(M-1);
    • f:= 3*x + 15;
    • writeln(x, ‘’, f);
    • پایان.

    چون مرحله تغییر ایکستنظیم نشده است، مقدار آرگومان در طول برنامه در هر تکرار با استفاده از فرمول محاسبه می شود: x:=x1+(x2-x1)*(a-1)/(M-1).

    چرخه در یک چرخه

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

    • برای (الف) := (ب) برای (ج) انجام دهید
    • FOR (a1) := (b1) TO (c1) DO

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

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

    <идентификатор (имя) переменной>:= <выражение>

    سیستم ابتدا مقدار عبارت را ارزیابی می کند، سپس آن را به یک متغیر اختصاص می دهد.

      عملگر مرکب

    دستور مرکب دنباله ای از هر عبارت توربو پاسکال است که در پرانتزهای آغاز و پایان محصور شده است. مثلا:

    شروع 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.

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

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

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

    برای V:= E1 تا E2 S را انجام دهید،

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

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

    این عملگر حلقه پاسکال مقادیر متوالی را به پارامتر حلقه V از مقدار اولیه برابر با مقدار عبارت E1 تا مقدار نهایی برابر با مقدار عبارت E2 اختصاص می دهد. در هر تکرار، دستور انتساب اجرا می شود V:= succ(V)و اجرای عملگر S در هر مقدار از پارامتر سیکل V. در این حالت مقادیر عبارات E1 و E2 یک بار در ورودی عملگر چرخه و مقدار پارامتر سیکل ارزیابی می شود. V نباید در نتیجه اجرای عملگر S تغییر کند. اگر مقدار نهایی مشخص شده کمتر از مقدار اولیه (که مجاز است) باشد، دستور S هرگز اجرا نمی شود.

    در پاسکال در نظر گرفته شده است که در طول اجرای عادی دستور حلقه، مقدار پارامتر حلقه تعریف نشده است.

    استفاده كردن عملگر حلقه با پارامترالگوریتم محاسبه مجموع n جمله اول سری هارمونیک را می توان به صورت زیر ارائه کرد:

    نمونه ای از کد برنامه برای جمع n جمله اول یک سری هارمونیک

    readln(n);
    Y:= 0;
    برای i:= 1 تا n y:= y+1/i;

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

    برای V:= E1 تا E2 انجام دهید S،

    جایی که پایین به(کاهش به) یک کلمه خدماتی است و همه کلمات و عبارات دیگر به همین معنی هستند. تغییر پارامتر چرخه از یک مقدار بزرگتر به یک مقدار کوچکتر زمانی اتفاق می افتد که تخصیص V:=pred(V) انجام شود. توجه داشته باشید که مقدار شروع ممکن است کمتر از مقدار پایان باشد. در این حالت دستور S هرگز اجرا نخواهد شد. مقدار پارامتر حلقه در پایان اجرای چنین حلقه ای نیز تعریف نشده در نظر گرفته می شود.

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

    به این نکته نیز توجه کنیم پارامتر حلقهممکن است در بدنه حلقه استفاده نشود، بنابراین هدف اصلی آن کنترل تعداد تکرارهای حلقه است. به عنوان مثال، مقدار y= x n، که در آن n>=0 یک عدد صحیح است، می تواند با استفاده از الگوریتم زیر محاسبه شود: ابتدا y=1 را قرار داده و سپس این مقدار را در x n ضرب کنید:

    مثال کد برنامه حلقه پاسکال

    readln(n);
    readln(x);
    Y:= 1;
    برای i:= 1 تا n y:= y*x;

    همانطور که می بینید، در اینجا پارامتر حلقه 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);
    i:=0;
    y:=0;
    تکرار
    i:=i+1;
    y:=y+1/i;
    تا 1/i

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

    مثال کد عملگر حلقه پاسکال با شرط پست

    readln(n);
    i:=0;
    y:=0;
    تکرار
    i:=i+1;
    y:=y+1/i;
    تا i>n;

    عملگر حلقه پاسکال با پیش شرط

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

    مثلاً یک عدد واقعی M داده شود، باید کوچکترین عدد صحیح غیرمنفی k را که برای آن 3 k> M است، پیدا کنید. ; سپس در یک حلقه مقدار y را در 3 ضرب کنید و مقدار k را 1 افزایش دهید تا زمانی که مقدار فعلی y برای اولین بار از مقدار M بیشتر شود. در نگاه اول، در اینجا می توانید از عبارت حلقه با یک استفاده کنید. پس شرط:

    مثال کد عملگر حلقه پاسکال با شرط پست

    Y:=1; k:=0;
    تکرار
    y:=y*3;
    k:=k+1;
    تا y> M;

    با این حال، تأیید آن برای M آسان است<1 будет получен неправильный результат k=1, тогда как должно быть получено k=0: в этом случае предварительно сформированное значение k=0 является окончательным результатом и действия, предусмотренные в цикле, выполняться не должны.

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

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

    در مسئله ای که در نظر داریم، مقدار صحیح k برای هر مقدار M را می توان به صورت زیر بدست آورد:

    مثال کد عملگر حلقه پاسکال با پیش شرط

    Y:=1; k:=0;
    در حالی که شما شروع می کنید
    y:=y*3;
    k:=k+1;
    پایان؛

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

    توجه داشته باشید تفاوت ها و ویژگی های یک سبک کار خوببا عملگرهای چرخه ای در نظر گرفته شده

    حلقه با پیش شرط while (در حالی که شرط درست است) حلقه با شرط پست تکرار (تا زمانی که شرط درست باشد)
    • قبل از شروع حلقه، تنظیمات اولیه متغیرهایی که شرایط حلقه را کنترل می کنند باید برای ورود صحیح به حلقه انجام شود.
    • بدنه حلقه باید حاوی عباراتی باشد که متغیرهای شرط را تغییر می دهد تا حلقه پس از تعداد معینی از تکرار به پایان برسد.
    • حلقه در حالی اجرا می شود که شرط درست است (در حالی که True)
    • حلقه اجرا می شود در حالی که شرط false است (تا زمانی که False)
    • حلقه زمانی خاتمه می یابد که شرط false شود (به False)
    • حلقه زمانی خاتمه می یابد که شرط درست شود (به True)
    • اگر مقدار اولیه شرط هنگام ورود به حلقه False باشد، ممکن است هرگز حلقه اجرا نشود
    • حلقه باید حداقل یک بار اجرا شود
    • اگر نیاز به اجرای بیش از یک دستور در بدنه حلقه دارید، باید از دستور ترکیبی استفاده کنید
    • صرف نظر از تعداد دستورات موجود در بدنه حلقه، استفاده از دستور مرکب الزامی نیست.
    حلقه با شمارنده (با پارامتر) For
    • تنظیم اولیه متغیر شمارنده حلقه قبل از هدر لازم نیست
    • تغییر مقادیر متغیرها در هدر در بدنه حلقه مجاز نیست
    • تعداد تکرارهای حلقه به طور ثابت و دقیقاً با مقادیر کران پایین و بالایی و مرحله افزایش تعیین می شود.
    • جریان عادی حلقه را می توان با دستور goto یا رویه های Break و Continue شکست.
    • اگر مرحله حلقه مقدار شمارنده را از حد پایین در جهت مخالف حد بالا تغییر دهد، ممکن است حلقه حتی یک بار اجرا نشود.

    دستوری که در یک حلقه اجرا می شود خود می تواند یک حلقه باشد. این برای همه انواع چرخه ها صدق می کند. در نتیجه می گیریم حلقه های تو در تو. در نظر گرفتن مکانیسم حلقه های تو در تو با استفاده از مثال حلقه های تو در تو با یک پارامتر راحت تر است. فرض کنید باید عملکرد یک ساعت الکترونیکی را از نقطه زمانی 0 ساعت، 0 دقیقه، 0 ثانیه توصیف کنیم. مقدار دقیقه تنها پس از اینکه ثانیه‌ها از تمام مقادیر متوالی از 0 تا 59 عبور کردند به 1 تبدیل می‌شود. ساعت‌ها تنها پس از اینکه دقیقه‌ها از تمام مقادیر متوالی از 0 به 0 گذشتند، مقدار آن به 1 تغییر می‌کند. 59. بنابراین، خروجی تمام مقادیر زمان از ابتدای روز تا پایان روز را می توان با قطعه برنامه زیر نشان داد:

    برای h:=0 تا 23 انجام دهید
    برای m:=0 تا 59 انجام دهید
    برای s:=0 تا 59 انجام دهید
    Writeln(h":"m":"s);

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

    در طول اجرای بدنه حلقه قبل از تکمیل کامل حلقه، ممکن است شرایط اضافی ایجاد شود که به پایان حلقه نیاز دارد. در این مورد، حلقه را می توان با یک دستور 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 روبل.