تکرار و حلقه در برنامهٔ ربات
الگوی تکرارشونده را در مسیر پیدا میکنی و با حلقه، برنامهای کوتاهتر و کمخطاتر مینویسی.
در پایان این درس میتوانید
- الگوی تکرارشونده را در یک مسیر تشخیص بدهی.
- تعداد دستورهای اجراشده در حلقهٔ ساده و تودرتو را حساب کنی.
- درصد صرفهجویی در طول برنامه با استفاده از حلقه را به دست بیاوری.
- تفاوت تعداد دستورهای نوشتهشده و اجراشده را توضیح بدهی.
وقتی ربات باید یک مسیر مربعی را دور بزند، میتوانی بیستوچند دستور را یکییکی بنویسی؛ اما همان الگوی کوتاه چهار بار تکرار میشود. حلقه ابزاری است که به تو اجازه میدهد یک تکه از برنامه را یکبار بنویسی و بگویی چند بار اجرا شود. حلقه کارِ ربات را کم نمیکند — ربات همان تعداد گام را برمیدارد — بلکه نوشتن و نگهداری برنامه را کوتاه و کمخطا میکند.
ساختار حلقه و دو عدد کلیدی آن
هر حلقهٔ ساده دو عدد دارد: تعداد تکرار که آن را k مینامیم و طول بدنه که تعداد دستورهای داخل حلقه است و آن را m میگیریم. تعداد دستورهایی که ربات واقعاً اجرا میکند برابر k ضربدر m است، ولی تعداد واحدهایی که تو مینویسی برابر m بهعلاوهٔ یک سرآیند حلقه است. اختلاف این دو عدد همان صرفهجویی در طول برنامه است. در حلقهٔ تودرتو که یک حلقه داخل حلقهٔ دیگر قرار میگیرد، تعداد اجرا برابر حاصلضرب هر دو شمارنده در طول بدنهٔ داخلی است.
الگو را پیدا کن، بعد حلقه بساز
مهمترین مهارت این درس، دیدنِ الگوی تکرارشونده است. اگر بدنهٔ تکرار طوری انتخاب شود که در پایان هر دور، جهت ربات به حالت اول برگردد، آنگاه هر تکرار دقیقاً همان جابهجایی قبلی را روی ربات اعمال میکند و پیشبینی نتیجه بسیار ساده میشود. اگر جهت پایانی با جهت شروع فرق داشته باشد، تکرارها ربات را روی یک مسیر بسته یا مارپیچ میچرخانند.
مثال عددی حلشده
میخواهیم ربات یک مربع به ضلع ۵ خانه را دور بزند و هر خانه ۲۰ سانتیمتر باشد. هر ضلع یعنی پنج دستور F و یک دستور R؛ پس بدون حلقه باید ۴ × (۵ + ۱) = ۲۴ دستور بنویسی. با حلقه فقط مینویسی «۴ بار تکرار کن: F, F, F, F, F, R» که یک سرآیند بهعلاوهٔ ۶ دستور بدنه، یعنی ۷ واحد نوشتاری است. درصد صرفهجویی برابر است با (۲۴ − ۷) ÷ ۲۴ = ۱۷ ÷ ۲۴ = ۰٫۷۰۸ یعنی حدود ۷۰٫۸ درصد.
اما توجه کن که تعداد دستورهای اجراشده همچنان ۴ × ۶ = ۲۴ است. مسافت پیمودهشده برابر ۴ × ۵ × ۲۰ = ۴۰۰ سانتیمتر یعنی ۴ متر میشود. اگر هر گام ۰٫۸ ثانیه و هر چرخش ۰٫۵ ثانیه طول بکشد، زمان کل برابر ۲۰ × ۰٫۸ + ۴ × ۰٫۵ = ۱۶ + ۲ = ۱۸ ثانیه است و سرعت متوسط ربات روی مسیر برابر ۴۰۰ ÷ ۱۸ = ۲۲٫۲ سانتیمتر بر ثانیه به دست میآید.
نمونهٔ دوم یک حلقهٔ تودرتوست: «۳ بار تکرار کن: ۴ بار تکرار کن: F, R». بدنهٔ داخلی ۲ دستور دارد، پس تعداد کل دستورهای اجراشده برابر ۳ × ۴ × ۲ = ۲۴ است. چون هر چهار تکرار داخلی یک مربع کامل میسازد و ربات به نقطهٔ شروع برمیگردد، هر سه تکرار بیرونی همان مربع را دوباره میپیمایند و جابهجایی خالص در پایان صفر است — نمونهای از برنامهای که پرکار است ولی هیچ پیشرفتی ندارد.
پیش از ساختن حلقه، بدنه را یکبار دستی اجرا کن و ببین در پایان آن، جهت ربات به حالت اولیه برگشته است یا نه. اگر برنگشته باشد، تکرار دوم مسیر را میچرخاند و نتیجه با تصور تو یکی نخواهد بود.
یک کاربرد واقعی
رباتهای چاپ سهبعدی و دستگاههای برش لیزری با همین منطق کار میکنند: یک لایه با حلقهٔ داخلی کشیده میشود و حلقهٔ بیرونی همان لایه را صدها بار روی هم تکرار میکند. برنامهای که بهجای حلقه، تکتک حرکتها را مینوشت، به فایلی با میلیونها خط تبدیل میشد که نه در حافظهٔ دستگاه جا میگیرد و نه قابل ویرایش است.
در شبیهساز چه میبینی
بدنهٔ F,F,L,F,F,R را سه بار پشت سر هم بنویس و اجرا کن. چون در پایان هر دور جهت ربات دوباره شمال میشود، هر تکرار او را دقیقاً دو خانه به چپ و دو خانه به بالا میبرد و یک پلکان منظم میسازد.
رابطههای کلیدی
مأموریت شبیهسازی
بدنهٔ تکرارشوندهٔ برنامه را پیدا کن و آن را چند بار پشت سر هم بنویس تا اثر حلقه را ببینی.
- برنامهٔ پیشفرض را اجرا کن و بدنهٔ تکرارشونده یعنی F,F,L,F,F,R را در آن پیدا کن.
- برنامه را به F,F,L,F,F,R,F,F,L,F,F,R تغییر بده تا بدنه دو بار اجرا شود و الگوی پلکانی را ببین.
- همان بدنه را سه بار بنویس و بگو ربات در مجموع چند خانه جابهجا شده است.
- برنامه را به F,R,F,R,F,R,F,R تغییر بده و ببین چرا ربات پس از چهار تکرار به نقطهٔ شروع برمیگردد.
آزمون این درس
۵ پرسش چهارگزینهای. پس از ثبت، پاسخ درست و توضیح هر پرسش را میبینید. میتوانید هر چند بار که خواستید تلاش کنید؛ بهترین نمره در کارنامه ثبت میشود.