برنامه ریزی فرآیندهای پردازش داده های محاسباتی چرخه ای برنامه نویسی فرآیندهای محاسباتی چرخه ای نمونه ای از استفاده از عبارت for

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

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

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

5.4.1 اپراتور برای

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

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

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

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

پس از اتمام آخرین تکرار، دستور برنامه به دنبال دستور حلقه اجرا می شود. در این حالت، متغیری که به عنوان پارامتر حلقه تکمیل شده استفاده می شود، مقداری را که داشت حفظ می کند در آخرین مورد در واقع کامل شده استتکرار[*]. توجه داشته باشید که این مقدار همیشه با آخرین مقدار از لیست مشخص شده در سربرگ حلقه منطبق نیست، زیرا زمانی که اپراتور فعال می شود، خروج زودهنگام از حلقه امکان پذیر است. زنگ تفريح در بدنه حلقه گنجانده شده است.

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

سه برنامه نشان داده شده در شکل 21 کاربردهای مختلف اپراتور را نشان می دهد برای .

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

برنامه Ch(V,N,p) بردار ورودی را پردازش می کند V ، آن را با مقدار جایگزین کنید پ آن دسته از عناصری که شاخص های آنها توسط عناصر بردار ورودی دوم مشخص می شود ن . در این مثال، لیستی از مقادیر پارامتر حلقه من توسط مجموعه ای از عناصر برداری تعریف شده است ن . توجه داشته باشید که هر دوی این برنامه‌ها کنترل داده‌های ورودی را انجام می‌دهند و اگر آرگومان‌های واقعی برنامه به درستی مشخص نشده باشند، اجرای الگوریتم اصلی را مسدود می‌کنند.

برنامه L(M,z) در مثال ارائه شده است V ) همراه با توضیحات مفصل است و نیازی به توضیح ندارد. این برنامه امکان استفاده از دستورات حلقه متعدد را نشان می دهد که یکی از آنها در بین دستورات موجود است بدنیکی دیگر. استفاده حلقه های تو در تو- یک تکنیک معمولی که برای پردازش آرایه های چند بعدی استفاده می شود.

شکل 21 - نمونه هایی از برنامه ریزی چرخه برای


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

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

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

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

شکل 22 - نمونه هایی از استفاده از عملگرها زنگ تفريح و ادامه هید

تابع SumN(V) فقط آن دسته از عناصر بردار را که حاوی داده های اسکالر از نوع عددی هستند جمع می کند و از عناصر باقی مانده صرف نظر می کند. تابع معکوس (V) برداری را تشکیل می دهد که عناصر آن مقادیر معکوس عناصر متناظر بردار اصلی هستند. علاوه بر این، اگر عنصر بعدی حاوی عدد "0" باشد یا یک عدد اسکالر از نوع عددی نباشد، چرخه قطع می شود. توجه داشته باشید که اپراتور زنگ تفريح در مثال آخر برنامه را قطع نمی کند، اما کنترل را به اپراتور منتقل می کند برگشت ، بلافاصله اپراتور را دنبال می کند برای .

5.4.3 اپراتور در حالی که

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

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

نمونه هایی از استفاده از اپراتور در حالی که در شکل 23 نشان داده شده است. سه گزینه برای حل یک مشکل ارائه شده است: هر یک از برنامه ها F0 , F1 و F2 شاخص اولین عنصر بردار منبع را برمی گرداندV بیش از مقدار مشخص شدهz .

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

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

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

شاید موثرترین راه حل برای این مشکل همین گزینه باشد V ) که اصلا از اپراتور استفاده نمی کند در حالی که . در این برنامه متغیر ک فقط برای حفظ "خلاصه سبک" - برای حذف پردازش پارامتر حلقه استفاده می شود من خارج از اپراتور برای .

شکل 23 - نمونه هایی از برنامه ریزی چرخه در حالی که

هدف کار:

عملگرهای چرخه ای را برای، while، do - while مطالعه کنید، یاد بگیرید که چگونه الگوریتم های چرخه ای را بنویسید و برنامه ریزی کنید.

اطلاعات نظری مختصر

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

عملگر حلقه for

شکل اصلی دستور حلقه for به صورت زیر است:

برای (expression_1; express_2; ​​expression_3)

اپراتور؛

جایی که بیان_1- مقدار اولیه پارامتر چرخه؛

بیان_2- بررسی شرایط برای ادامه چرخه؛

بیان_3- تغییر پارامتر چرخه (اصلاح)؛

اپراتور- عملگر ساده یا مرکب در زبان C.

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

مثلا:برای (k=1; k<5; k++)

printf("\n %d"، k);

در نتیجه اجرای این عملگر، اعداد 1 تا 4 در یک ستون چاپ می شوند.

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

مثلا:

برای (ch='a'; ch<=’z’; ch++) // Вывод на экран букв

printf(" %c",ch); // الفبای لاتین

لازم است ساختار حلقه های for را در برنامه به دقت کنترل کنید تا با یک حلقه بی پایان (که خروجی از آن وجود ندارد) مواجه نشوید.

مثلا:

برای (k=10; k>6;k++)

printf("حلقه بی پایان\n");

حلقه خروجقبل از برنامه به روش های زیر:

با شرط اضافی؛

با استفاده از عملگرهای زیر:

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

خروج (int Kod)؛- خروج از برنامه؛

برگشت؛- خروج از تابع؛

با استفاده از عملگر پرش بدون قید و شرط رفتن به<метка>;

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

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

ممکن است هر یک از عبارات حلقه for در پرانتز وجود نداشته باشد، اما نماد ";" است نمی توان پایین آورد

مثلا:

برای (; i<3; i++)

قرار می دهد ("سلام!");

عبارات چرخه ای while و do–while

شکل اصلی عملگر چرخه ای در حالی که:

در حالی که (شرط)

اپراتور؛

جایی که اپراتور

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

شکل اصلی اپراتور انجام در حالی که:

اپراتور؛

while(شرط);

جایی که اپراتوریک عبارت ساده، مرکب یا خالی است.

اپراتور انجام دادندر حالی که- عملگر حلقه با شرط پست، یعنی. ابتدا عبارت اجرا می شود و سپس شرط از نظر صحت بررسی می شود. از آنجایی که در یک حلقه do–while شرط در انتهای حلقه بررسی می شود، حلقه حداقل یک بار اجرا می شود.

در حلقه‌هایی مانند while و do–while، همان روش‌های خروج زودهنگام از حلقه و تکمیل زودهنگام مرحله فعلی حلقه مانند دستور for مجاز است، اما در مورد دوم، برخلاف حلقه for، کنترل منتقل می‌شود. برای بررسی وضعیت برای جلوگیری از یک حلقه بی پایان در داخل حلقه های while و do-while، باید متغیرهای موجود در شرط را تغییر دهید.

مثلا:

برای (i=1;i<=300;i++) // Печать целых чисел, кратных 5

اگر (i%5!=0) ادامه یابد.

printf("%5d",i);

نمونه هایی از حلقه های بی نهایت:

اپراتور؛

2) while(number_not_0) // همیشه درست است!

اپراتور؛

اپراتور؛

while(number_not_0); // همیشه درسته!

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

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

در مورد حلقه های تو در تو، یک حلقه داخل حلقه دیگری است، به عنوان مثال:

برای (i=nn;i

برای (j=mn;j

اپراتور؛

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

مثال:

برای (i=1;i<10;i++) // Печать таблицы умножения

برای (j=1;j<4;j++)

printf("\n %d*%d=%2d", i, j, i*j);

printf("\n");

نمونه ای از استفاده از عبارت for

محاسبه. برنامه باید نتایج میانی و نهایی را چاپ کند.

متن برنامه ممکن است شبیه باشد

#عبارتند از

#عبارتند از

puts ("Enter N");

scanf("%d"،&N);

برای (s=0، k=1؛ k<=N; k++) // В заголовке цикла можно выпол-

(// take and double assignment

printf(" \n k=%d s=%f ", k, s);

printf("\n پاسخ: s=%f، هر کلیدی را فشار دهید...",s);

گزینه هایی برای تکالیف فردی

برنامه ای بنویسید تا جدولی از مقادیر تابع را تعیین کند دردر محدوده دلخواه [ آ,ب] آرگومان تغییر می کند ایکسبا مراحل دلخواه ساعت. ارزش های a، b، hاز صفحه کلید وارد شد جدول باید شامل ستون های زیر باشد: شماره دنباله، مقدار آرگومان ایکس، مقدار تابع، پیام در مورد افزایش یا کاهش تابع، تفاوت دو مقدار تابع مجاور.

حداکثر و حداقل مقدار تابع را تعیین کنید.

1. a=-p; b=p; h=0.4.

2. a=0.7; b=1.8; h=0.1.

3. a=-0.5; b=2.5; h=0.2.

4. a=-0.9; b=2.7; h=0.3.

5. a=-2; b=0.8; h=0.2.

6. a=-1.9; b=2.7; h=0.3.

7. a=-0.4p; b=0.4p; h=0.5.

8. a=-0.3p; b=1.3p; h= p/10.

9. a=-p/2; b= p/2; h=p/10.

10. a=-3; b=3; h=0.5.

"برنامه نویسی فرآیندهای محاسباتی چرخه ای"

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

بخش تئوری

4.1.1. الگوریتم های چرخه ای

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

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

3 نوع چرخه وجود دارد:

حلقه با پیش شرط؛

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

حلقه با شمارنده (حلقه شمارش).

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

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

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

1. با یک شمارنده حلقه بزنید.

2. حلقه با پیش شرط. 3. حلقه با postcondition.

4.1.2 عملگرهای حلقه در زبان برنامه نویسی C++.

در C++ برای هر نوع حلقه یک عملگر مربوطه وجود دارد:

حلقه مانند while (با پیش شرط);

حلقه مانند do...while (با شرط پست);

حلقه مانند برای (شمارش).

عملگر 1.Loop مانند while

فرم ورودی:

while (condition) statement;

جایی که: (شرط) - بیان منطقی.

عملگر - عملگر یا بدنه حلقه اجرا شده در یک حلقه.

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

در حالی که (شرط)

گروهی از اپراتورها

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

2. عملگر حلقه مانند do…while

فرم ورودی:

اپراتور؛

while(شرط);

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

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



گروهی از اپراتورها

while(شرط);

3. عملگر حلقه مانند for

فرم ورودی:

اپراتور؛

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

i=0، x=0.5، p=1، s=0

B یک عبارت شرطی است که شرط ادامه حلقه را بررسی می کند. مثلا:

C یک عبارت افزایشی است که افزایش پارامتر حلقه و در صورت لزوم سایر پارامترها را مشخص می کند، سپس آنها در یک لیست نوشته می شوند. به عنوان مثال: x+=0.1، i++

4.1.3 نمونه ای از کامپایل یک الگوریتم و برنامه در C++ برای یک فرآیند محاسباتی چرخه ای.

مقدار یک عبارت را محاسبه کنید:

ب- مقدار اولیه، مقدار آن از صفحه کلید وارد می شود و تغییر نمی کند.

آ- تغییرات در محدوده در مراحل 1.

y- در نتیجه، مقادیر آن روی صفحه نمایش داده می شود.

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

بلوک دیاگرام الگوریتم حل این مشکل با استفاده از چرخه شمارش به شرح زیر است:

#عبارتند از

#عبارتند از

#عبارتند از

printf("ب را وارد کنید:");

scanf("%f"،&b);

printf("a y\n");

برای (a=0;a<=10;a++)

printf("%3d",a);

printf("%8.2f\n",y);

y=(a-b)/sqrt(a);

printf("%8.2f\n",y);

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

متن برنامه C++ مربوط به این الگوریتم به شرح زیر است:

#عبارتند از

#عبارتند از

#عبارتند از

printf("ب را وارد کنید:");

scanf("%f"،&b);

printf("a y\n");

printf("%3d",a);

printf("%8.2f\n",y);

y=(a-b)/sqrt(a);

printf("%8.2f\n",y);

else printf(" y وجود ندارد\n");

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

متن برنامه C++ مربوط به این الگوریتم به شرح زیر است:

#عبارتند از

#عبارتند از

#عبارتند از

printf("ب را وارد کنید:");

scanf("%f"،&b);

printf("a y\n");

printf("%3d",a);

printf("%8.2f\n",y);

y=(a-b)/sqrt(a);

printf("%8.2f\n",y);

else printf(" y وجود ندارد\n");

در حالی که (الف<=10);

بخش عملی

4.2.1 الزامات برای انجام کار:

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

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

ترتیب کار.

1. تجزیه و تحلیل کار را انجام دهید، بیانیه ای از مسئله را تدوین کنید.

2. بلوک دیاگرام از الگوریتم ها ایجاد کنید.

3. یک برنامه در C++ ایجاد کنید. ورودی داده های اولیه را از صفحه کلید و خروجی نتایج را به صفحه ارائه دهید.

4. عملکرد برنامه را روی داده های اولیه مختلف بررسی کنید.

5. نتایج به دست آمده را تجزیه و تحلیل کنید.

گزینه هایی برای تکالیف فردی

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

جدول 4. گزینه هایی برای وظایف فردی

خیر متغیر قابل تغییر انواع چرخه ها
10 ≤ a ≤ 10،Δ a=1
-4 ≤ d ≤ 4, Δ d = 0.5
-6 ≤ x ≤ 3, Δ x = 0.5
0 ≤ b ≤ 3 0, Δ b = 1.5 1. با پیش شرط، 2. قابل شمارش
-15 ≤ j ≤ 1 0, Δ j = 0.5 1. با پیش شرط، 2. با پیش شرط
5 ≤ e ≤ 35،Δ e = 2 1. قابل شمارش، 2. با postcondition
-5 ≤ متر ≤ 15،Δ m = 1 1. با پیش شرط، 2. قابل شمارش
1 ≤ c ≤ 70،Δ c = 3 1. با پیش شرط، 2. با پیش شرط
1.5 ≤ c ≤ 15،Δ c = 0.5 1. قابل شمارش، 2. با postcondition
-8 ≤ b ≤ 28،Δ b = 2 1. با پیش شرط، 2. قابل شمارش
-4.5 ≤ x ≤ 11.5،Δ x = 0.5 1. با پیش شرط، 2. با پیش شرط
-7 ≤ k ≤ 2،Δ k = 0.3 1. قابل شمارش، 2. با postcondition
-1 ≤ متر ≤ 21،Δ m = 1 1. با پیش شرط، 2. قابل شمارش
-2 ≤ e ≤ 34،Δ e = 2 1. با پیش شرط، 2. با پیش شرط
-11 ≤ c ≤ 23،Δ c = 2 1. قابل شمارش، 2. با postcondition
-13 ≤ p ≤ 50،Δ p = 3 1. با پیش شرط، 2. قابل شمارش
3.3 ≤ b ≤ 9.3،Δ b = 0.3 1. با پیش شرط، 2. با پیش شرط
3.5 ≤ y ≤ 12.3،Δ y = 0.4 1. قابل شمارش، 2. با postcondition
-7.5 ≤ a ≤ 5.7،Δ a = 0.6 1. با پیش شرط، 2. قابل شمارش
-1.5 ≤ h ≤ 1.2،Δ h = 0.1 1. با پیش شرط، 2. با پیش شرط
0 ≤ ساعت ≤ 10،Δ h=0.5 1. قابل شمارش، 2. با postcondition
-15 ≤ b ≤ 15, Δ b = 2 1. با پیش شرط، 2. قابل شمارش
-7 ≤ l ≤ 3, Δ l = 0.5 1. با پیش شرط، 2. با پیش شرط
-5.5 ≤ b ≤ 6.5, Δ b = 0.5 1. قابل شمارش، 2. با postcondition
1 ≤ k ≤ 9, Δ k = 0.4 1. با پیش شرط، 2. قابل شمارش
0 ≤ b ≤ 6.9،Δ b = 0.3 1. با پیش شرط، 2. با پیش شرط
-3 ≤ v ≤ 9،Δ v = 0.6 1. قابل شمارش، 2. با postcondition
-2 ≤ p ≤ 2.6،Δ p = 0.2 1. با پیش شرط، 2. قابل شمارش

4.3 سوالات آزمون و وظایف عملی:

1. دستور while چگونه کار می کند؟

2. دستور do ... while چگونه کار می کند؟

3. دستور for چگونه کار می کند؟

4. زیر عباراتی در برنامه که یک چرخه را تشکیل می دهند خط بکشید.

5. تفاوت بین دستورات while و do ... while چیست؟

6. یک عملگر حلقه در برنامه را با دیگری جایگزین کنید.

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

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

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

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

ما با مفهوم چرخه نه تنها در برنامه نویسی مواجه هستیم. چرخه هایی در بسیاری از زمینه های زندگی ما وجود دارد.

به عنوان مثال، چرخه آب در طبیعت یک چرخه طبیعی در زندگی ما است.

حال بیایید قوانین و مفاهیم کلی مورد استفاده در چرخه های محاسباتی را بررسی کنیم.

مراحل فرآیند چرخه ای

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

1. روش های ساخت فرآیندهای محاسباتی چرخه ای در برنامه ها.

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

معرفی

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

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

برنامه ها، اجرای یک فرآیند چرخه ای را برنامه های چرخه ای می نامند.

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

آماده سازی (راه اندازی اولیه) چرخه (AND)؛

انجام محاسبات حلقه (بدنه حلقه) (T);

اصلاح پارامترها (M)؛

بررسی وضعیت پایان چرخه (U).

ترتیب این مراحل، مانند T و M، ممکن است متفاوت باشد. بسته به محل بررسی وضعیت پایان چرخه، بین چرخه هایی با انتهای پایین و بالایی تمایز قائل می شود. برای یک حلقه پایانی پایین، بدنه حلقه حداقل یک بار اجرا می شود زیرا ابتدا محاسبات انجام می شود و سپس شرط خروج از حلقه بررسی می شود.


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

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

بدنه حلقه- این یک بخش مکرر تکرار شده از برنامه است.

پارامتر حلقهمتغیری است که هر بار که حلقه تکرار می شود مقادیر جدیدی به خود می گیرد (حلقه ها می توانند ساده یا پیچیده باشند).

نمای کلی حلقه n بار

به طور کلی یک حلقه n بار به صورت زیر نوشته می شود:

nc تعداد دفعات تکرار

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

تعداد تکرارها یک عدد صحیح دلخواه است.

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

نمای کلی از چرخه تا کنون

به طور کلی، چرخه در حال حاضر به صورت زیر نوشته می شود:

هنوز شرطی نیست

| بدنه حلقه (توالی دستورات)

هنگام انجام یک چرخه، رایانه اقدامات زیر را تکرار می کند:

الف) شرایطی را که بعد از کلمه تابع while نوشته شده است بررسی می کند.

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

نمای کلی چرخه برای

nc برای i از i1 تا i2

| بدنه حلقه (توالی دستورات)

در اینجا i نام یک مقدار از نوع عدد صحیح است، i1، i2 اعداد صحیح یا عباراتی با مقادیر صحیح دلخواه هستند. بدنه حلقه به صورت متوالی برای i = i1، i = i1 + 1، i1 + 2، …i = i2 اجرا می شود.

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

حلقه n بار و حلقه while

حلقه‌ها n بار و تا کنون تقریباً به همین شکل در زبان الگوریتمی قالب‌بندی می‌شوند. این تعجب آور نیست، زیرا هر دوی این دستورات یک حلقه را تعریف می کنند - یک دنباله تکراری از دستورات. کلمات سرویس nts و kts نشان می دهد که یک حلقه در حال اجرا است و سربرگ حلقه مکانیسم خاصی را برای اجرای آن مشخص می کند.

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

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

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


عکس. 1. ساختار معمولی یک برنامه کنترلی با یک حلقه بی نهایت.

MCPها ساختار متنوعی دارند که پیچیدگی آن باید بر اساس معیارهای خاص ارزیابی شود. V.V. Lipaev یک معیار راحت و عینی برای پیچیدگی ماژول های نرم افزاری پیشنهاد کرد، یعنی: تعداد و طول کل مسیرها در نمودار کنترل ماژول. فقط عبارات شرطی و انتخابی در نظر گرفته می شود. با این حال، این معیار به وضوح برای یک MCP با حافظه استاتیک کافی نیست، زیرا هنگام تجزیه و تحلیل یک MCP لازم است مقادیر تمام متغیرهای استاتیک تنظیم شده در چرخه قبلی را به خاطر بسپارید. علاوه بر این، هیچ توصیه ای برای استانداردسازی الگوریتم ها و برنامه ها وجود ندارد، به جز برنامه نویسی ساختاریافته شناخته شده در زبان های برنامه نویسی رایج مانند C و Pascal. این مقاله پیشنهاد می‌کند این شکاف‌ها را در رابطه با MCP پر کند.

2. قطعاتی از ماژول های برنامه چرخه ای

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

روش قطعات مستقل برای سنتز ساختار ماژول هایی که جداول تصمیم را پیاده سازی می کنند، پیشنهاد شده است. در این حالت، قطعه ای که می تواند در هر جایی از دنباله قطعات ماژول درج شود، مستقل در نظر گرفته می شود. مستقل بودن مکان چنین قطعه ای به این دلیل است که داده های تجزیه و تحلیل شده در آن در دنباله قطعه مشخص شده تولید نمی شوند و داده های تولید شده در قطعه مستقل در این دنباله قطعات تجزیه و تحلیل نمی شوند. بنابراین، قطعات مستقل را می توان به صورت موازی (شبه موازی) اجرا کرد. در شکل شکل 2 گزینه های پیاده سازی ممکن را برای یک ماژول با دو قطعه مستقل نشان می دهد. در گزینه های "a" و "b" قطعات بدون تحریف ماهیت برنامه دوباره مرتب می شوند. در گزینه "c" قطعات به صورت موازی پیاده سازی می شوند.


شکل 2. گزینه هایی برای اجرای یک ماژول با قطعات مستقل:

الف) و ب) - اجرای متوالی،

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

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

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

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




بالا