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

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

شرح:

عملگر چرخه For برای تکرار چرخه ای عملگرهایی که در داخل ساختار Cycle - EndCycle قرار دارند در نظر گرفته شده است.

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

حلقه تا زمانی اجرا می شود که مقدار متغیر VariableName کمتر یا مساوی با مقدار Expression 2 باشد. شرط اجرای حلقه همیشه در ابتدا، قبل از اجرای حلقه بررسی می شود.

نحو:

مولفه های:

Variable_name شناسه یک متغیر (حلقه شمارنده) که هر بار که حلقه تکرار می شود مقدار آن به طور خودکار 1 افزایش می یابد. به اصطلاح سیکل شمارنده.عبارت 1 عبارت عددی که مقدار اولیه تخصیص یافته به شمارنده حلقه در اولین تکرار حلقه را مشخص می کند.توسط پیوند نحوی برای پارامتر Expression 2.عبارت 2 حداکثر مقدار شمارنده حلقه. زمانی که متغیر VariableName از عبارت 2 بزرگتر شود، اجرای دستور حلقه For متوقف می شود.حلقه عبارات زیر کلمه کلیدی Loop تا زمانی اجرا می شوند که مقدار متغیر VariableName کمتر یا مساوی با مقدار Expression 2 باشد.

چرخه برای همه

شرح:

دستور For every loop برای حلقه زدن مجموعه ای از مقادیر است. هر تکرار حلقه یک عنصر جدید از مجموعه را برمی گرداند. پیمایش تا زمانی که تمام عناصر مجموعه تکرار شوند ادامه می یابد.

نحو:

مولفه های:

Variable_name_1 متغیری که هر بار که حلقه تکرار می شود، مقدار عنصر بعدی مجموعه را به آن اختصاص می دهد.از پیوند Syntax برای پارامتر variable_name_2.variable_name_2 متغیر یا عبارتی که مجموعه را نشان می دهد. عناصر این مجموعه به پارامتر variable_name_1 اختصاص داده می شود.حلقه عبارات زیر کلمه کلیدی Loop برای هر عنصر از مجموعه اجرا می شود.// Statements عبارتی که باید اجرا شود یا دنباله ای از این عبارات.Abort به شما امکان می دهد حلقه را در هر نقطه قطع کنید. پس از اجرای این دستور، کنترل به دستور زیر کلمه کلیدی End of Loop منتقل می شود.Continue بلافاصله کنترل را به ابتدای حلقه منتقل می کند، جایی که شرایط اجرای حلقه ارزیابی و بررسی می شود. عبارات زیر آن در بدنه حلقه در این تکرار از پیمایش اجرا نمی شوند.EndLoop یک کلمه کلیدی که به ساختار یک عبارت حلقه پایان می دهد.

چرخه بای

شرح:

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

نحو:

مولفه های:

بیان بولیبیان بولی.حلقه عبارات زیر کلمه کلیدی Loop تا زمانی اجرا می شوند که نتیجه عبارت منطقی باشد. درست است، واقعی. // Statements عبارتی که باید اجرا شود یا دنباله ای از این عبارات.Abort به شما امکان می دهد حلقه را در هر نقطه قطع کنید. پس از اجرای این دستور، کنترل به دستور زیر کلمه کلیدی End of Loop منتقل می شود.Continue بلافاصله کنترل را به ابتدای حلقه منتقل می کند، جایی که شرایط اجرای حلقه ارزیابی و بررسی می شود. عبارات زیر آن در بدنه حلقه در این تکرار از پیمایش اجرا نمی شوند.EndLoop یک کلمه کلیدی که به ساختار یک عبارت حلقه پایان می دهد.
دسامبر 12, 2014 در 01:13 ب.ظ

کدام چرخه سریعتر است؟ تست 1C

  • عملکرد بالا،
  • برنامه نویسی غیر عادی
  • برنامه نويسي

من چندین سال است که برنامه نویسی 1C را انجام می دهم و بعد این فکر به وجود آمد - "چرا نوعی دوره آموزشی را نمی گذرانید، ناگهان شکاف هایی در دانش وجود دارد که من قبلاً حتی به آنها مشکوک نبودم"؟زودتر گفته شود. من می نشینم، به دوره گوش می دهم، به اپراتورهای چرخه ای می رسم و سپس فکر دوم (بله، آنها اغلب به نظر من نمی رسند) - "کدام چرخه سریعتر است؟"باید بررسی کنیم
پس پیدا کردم پنج راهچگونه می توانید چرخه را با استفاده از 1C سازماندهی کنید.

اولین نوع چرخه، اجازه دهید آن را مشروط بنامیم "ForPo"به نظر می رسد که:

برای n = 0 توسط تعداد تکرارها حلقه SomeAction(); چرخه پایان
نمای دوم "برای هر":

برای هر ItemCollection From Collection Loop SomeAction(); چرخه پایان
سومین "خدا حافظ":

خداحافظ n<>NumberIterations حلقه SomeAction(); n = n + 1; چرخه پایان
سپس به یاد جوانی مونتاژکننده افتادم - چرخه "اگر":

~LoopStart: اگر n<>NumberIterations سپس SomeAction(); n = n + 1; پرش ~StartCycle. EndIf
و در نهایت "بازگشت"

Procedure RecursiveLoop(n, Number ofIterations) SomeAction(); اگر n<>تعداد تکرارها سپس حلقه بازگشتی (n+1، تعداد تکرارها). EndIf پایان رویه
به طور طبیعی، نسبت دادن بازگشت به چرخه ها کاملاً صحیح نیست، اما با این وجود، با کمک آن می توانید به نتایج مشابهی دست پیدا کنید. من فوراً رزرو می کنم که بازگشت در آزمایش بیشتر شرکت نکرده است. اولاً، همه آزمایش‌ها با 1000000 تکرار انجام شده‌اند و بازگشت مجدد در 2000 تکرار می‌شود. ثانیاً، سرعت بازگشت ده برابر کمتر از سرعت حلقه‌های دیگر است.

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

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


یا، هنگام استفاده از حلقه "ForEach".

گیرنده TestValue = elem;
آزمایش بر روی پلت فرم 8.3.5.1231 برای سه نوع رابط (برنامه معمولی، برنامه مدیریت شده و تاکسی) انجام شد.
اعداد زمان بر حسب میلی ثانیه هستند که با استفاده از تابع به دست می آیند CurrentUniversalDateInMilliseconds()، که قبل از حلقه و بعد از اتمام آن صدا زدم. اعداد کسری هستند زیرا من از میانگین حسابی پنج اندازه گیری استفاده کردم. چرا از Benchmarking استفاده نکردم؟ من هدفی برای اندازه‌گیری سرعت هر خط کد نداشتم، فقط سرعت چرخه‌ها با نتیجه کار یکسان بود.

به نظر می رسد که تمام است، اما - برای آزمایش، بنابراین آزمایش کنید!
نتیجه برای پلتفرم 8.2.19.106
به طور متوسط ​​پلت فرم 8.2 25٪ سریعتر از 8.3 است. من کمی انتظار چنین تفاوتی را نداشتم و تصمیم گرفتم آن را روی دستگاه دیگری آزمایش کنم. من نتایج را ارائه نمی دهم، شما می توانید آنها را خودتان با استفاده از این پیکربندی ایجاد کنید. فقط میتونم بگم اونجا 8.2 20 درصد سریعتر بود.

چرا؟ نمی‌دانم، جداسازی هسته بخشی از برنامه‌های من نبود، اما هنوز به اندازه‌گیری عملکرد نگاه کردم. معلوم شد که خود عملیات چرخه ای در 8.3 تا حدودی سریعتر از 8.2 است. اما در خط
TestValue Receiver = TestArray.Get(n);
به این معنی که هنگام خواندن یک مجموعه در یک متغیر، عملکرد قابل توجهی وجود دارد.

در نهایت:
چرا این همه؟ برای خودم چندین نتیجه گرفتم:

1. اگر امکان استفاده از یک حلقه تخصصی - "برای هر" وجود دارد، بهتر است از آن استفاده کنید. به هر حال، به خودی خود طولانی تر از سایر حلقه ها کار می کند، اما سرعت دسترسی به عنصر مجموعه بسیار بالاتر است.
2. اگر از قبل تعداد تکرارها را می دانید - از "For" استفاده کنید. "بای" کندتر کار می کند.
3. اگر از حلقه "If" استفاده کنید، برنامه نویسان دیگر واضح است که شما را درک نمی کنند.

توجه! در انتهای مقاله لینک یک فیلم آموزشی قرار داده شده است.
اگر قبلاً با برنامه نویسی مواجه نشده اید، احتمالاً نیاز به استفاده از چرخه در برنامه 1C کاملاً مشخص نیست. در این مقاله، من در مورد دستورات حلقه و همچنین هدف اصلی آنها صحبت خواهم کرد.

اما ابتدا، برای وضوح، چند توضیح در مورد عبارات استفاده شده در مقاله:
تکراریک تکرار است
براکت های اپراتورکلمات رزرو شده هستند که همیشه به صورت جفت نوشته می شوند، یک بیانیه آغازین و یک بیانیه پایانی. به عنوان مثال: Function - EndFunction، If - EndIf، For - EndCycle و غیره.
بدنه حلقه- کد برنامه که در داخل براکت های اپراتور چرخه قرار دارد.
چرخهساختاری است که اجرای خطوط واقع در بدنه حلقه را تکرار می کند، تعداد تکرارها به نتیجه شرایط ابتدای حلقه بستگی دارد.

اگر این عملگر وجود نداشت، کد داخل حلقه باید هر چند بار که نیاز به تکرار داریم نوشته شود. تصور کنید که 100 خط در یک سند وجود دارد و شما باید آنها را مرتب کنید و مثلاً مقدار را تغییر دهید، و اگر در همان زمان تعداد آنها به طور دوره ای تغییر کند، یعنی. اضافه و حذف می شوند. آسان نخواهد بود.
حلقه به شما اجازه می دهد تا کار اجرای خطوط مکرر کد را ساده کنید.
در برنامه 1C 8.1، سه ساختار حلقه وجود دارد:
"For.. To.. Loop" - تعداد حلقه ها را از مقدار اولیه شمارنده تا مقدار مشخص شده نهایی تکرار می کند و در هر تکرار 1 به متغیر شمارنده اضافه می کند. زمانی استفاده می شود که تعداد تکرارها مشخص باشد.

چرخه 1C برای

برای شمارنده = 1 در 3 حلقه // حلقه بدنه پایان حلقه;

چرخه 1C خداحافظ

"While... Loop" - در حالی اجرا می شود که مقدار محاسبه شده True است. می توان از آن در مواردی استفاده کرد که متغیرهای محاسبه عبارت در بدنه حلقه تغییر کرده باشند، یا اگر مجموعه دوباره تکرار شود و دارای یک متد متناظر است که یک Boolean برمی گرداند که در ابتدای حلقه فراخوانی می شود.

در حالی که Selection.Next() حلقه //Body of Loop EndCycle;

چرخه 1C برای هر کدام

"For Every...From...Loop" از اولین تا آخرین عنصر در مجموعه حلقه می زند. نوشتن روی یک متغیر (در مثال: CurrentElement ) مقدار عنصر.

برای هر عنصر فعلی از ArrayElements Loop // Loop Body End Loop;

چرخه معکوس 1C

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

تعداد آیتم ها = آرایه اقلام Quantity(); برای ReverseIndex = 1 بر اساس تعداد آیتم ها حلقه CurrentItem = آرایه آیتم ها[تعداد آیتم ها - ReverseIndex]; چرخه پایان

اپراتورهای ادامه و لغو در ویدیو، لینک زیر پوشش داده شده است.

الگوریتم های بسیاری از برنامه ها اغلب شامل تکرار چرخه ای اقدامات خاصی است. 1C در این مورد استثنا نیست. چرخه های 1C به شما امکان می دهد:

  • تکرار روی عناصر دایرکتوری؛
  • قسمت های طرح بندی را پر کنید.
  • انجام اقدامات خاصی با مجموعه ای از اسناد؛
  • و بسیاری بسیار دیگر.

انواع حلقه

در 1C مرسوم است که بسته به مجموعه کلمات موجود در ساخت، سه نوع چرخه را متمایز کنید:

  1. برای هر "متغیر" از "مجموعه ارزش ها"؛
  2. برای "Variable" = "شروع کنید. مقدار "با توجه به" Kon. معنی"؛
  3. در حالی که «بیان».

بیایید آنها را با جزئیات بیشتر در نظر بگیریم.

برای هر یک از

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

  • متغیری که عنصر فعلی مجموعه را مشخص می کند.
  • تعریف مجموعه ای از ارزش ها

رایج ترین خطا در این مورد در شکل 1 نشان داده شده است

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

برای توسط

در این حالت، پارامترهای ارسال شده به رشته عبارتند از:

  1. نام متغیر یک تکرار کننده است.
  2. مقدار اولیه متغیر؛
  3. مقدار نهایی متغیر

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

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

هنگام استفاده از این خزنده، مهم است که بین تعداد ردیف ها در بخش جدول و شاخص یک ردیف گرفته شده تمایز قائل شوید. در حالت اول، مقدار اولیه برابر با 1 خواهد بود، مقدار نهایی را می توان با استفاده از عملگر Quantity() بدست آورد. ایندکس ها از 0 شروع می شوند و به Count()-1 ختم می شوند. در غیر این صورت، می توانید یک خطا دریافت کنید (شکل 2).

خدا حافظ

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

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

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

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

با فشار دادن یک کلید ترکیبی، اجرا را قطع کنید

اگر رویه UserInterrupt Handling() را در بدنه حلقه بنویسید، در هر زمانی در طول اجرای آن، با فشردن کلیدهای ترکیبی Ctrl + PauseBreak، می توانید کار آن را متوقف کنید. در این صورت یک خط در پنجره پیام نمایش داده می شود (شکل 3).

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

وقفه مشروط

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

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

پرش برخی از عملیات حلقه

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

  • در روش اول یک شرط می گذاریم و داخل If Then End اگر کد اجرایی را می نویسیم در صورت عدم برقراری شرط کد بر اساس آن اجرا نمی شود. عیب آشکار این رویکرد این است که کاملاً دست و پا گیر است و در مورد تعداد زیادی از شرایط به راحتی می توان اشتباه کرد که یکی از «اگر» در کجا شروع می شود و دیگری در کجا پایان می یابد.
  • استفاده از ساختاری که به جای بیان شرط، نفی آن گرفته شود (به جای مساوی، نابرابر گرفته شود و غیره) و عملگر Continue در داخل ساختار قرار گیرد، بسیار صحیح تر است.

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

برترین مقالات مرتبط