همان طور که در آموزش ساختارهای کنترلی در متلب شرح دادیم، یکی از ملزومات کدنویسی با استفاده از هر زبان برنامه نویسی، قابلیت تکرار بخش های دلخواه برنامه با استفاده از حلقه های تکرار است. اشاره کردیم که حلقه های تکرار در متلب، با استفاده از for و while شکل می گیرند.
در آموزش حلقه for در متلب درباره نحوه استفاده از for و ساختار آن صحبت کردیم. در این قسمت قصد داریم به معرفی حلقه while در متلب بپردازیم. با ما همراه باشید.
تفاوت حلقه for و while در متلب
ابتدا اجازه بدهید روشن کنیم که تفاوت اصلی این دو حلقه تکرار چیست.
ساختار این دو با هم تفاوت می کند. این موضوع را در ادامه و هنگامی که ساختار while در متلب را بررسی کنیم متوجه می شوید. اما نکته مهم تر این است که حلقه while می تواند در دامنه گسترده تری از مسائل پاسخگو باشد و کاربرد داشته باشد.
در واقع ما هر حلقه تکراری را می توانیم با استفاده از حلقه while در متلب ایجاد کنیم. اما ممکن است بعضی حلقه ها قابلیت ایجاد با استفاده از for را نداشته باشند.
دقت کنید که این موضوع چیزی از ارزش های for کم نمی کند! دستور for در متلب هم کاربردهای بسیار وسیعی دارد و در بسیاری از مواقع استفاده از آن ساده تر از استفاده از while است.
ساختار حلقه while در متلب
تصویر زیر، ساختار و نحوه استفاده از حلقه while در متلب را نشان می دهد.
در ابتدای حلقه یک شرط وجود دارد که اگر این شرط صحیح باشد، متلب وارد حلقه می شود و دستوراتی را که داخل آن نوشته شده است اجرا می کند. اما اگر شرط صحیح نباشد از روی حلقه while پرش می کند و ادامه دستورات را اجرا می نماید.
انتهای حلقه while هم همانند حلقه for با استفاده از کلمه end مشخص می شود. دستورات مربوط به این حلقه هم در بین while و end نوشته می شود.
هنگامی که یک دور دستورات اجرا شد، متلب دوباره به ابتدای حلقه بر می گردد و شرط را دوباره چک می کند. اگر شرط صحیح باشد یک دور دیگر دستورات را اجرا می کند و اگر شرط غلط باشد از حلقه خارج می شود.
بنابر این تا زمان غلط شدن شرط حلقه while این تکرارها ادامه پیدا می کند. بنابراین می توان به تعداد مشخص یا حتی غیرمشخصی تکرار حلقه را ادامه داد. حتی ممکن است گاهی شرط همیشه درست باشد و حلقه تا بی نهایت کار کند!
برای اینکه بهتر متوجه نحوه استفاده از حلقه while در متلب شوید مثال های زیر را بررسی کنید.
مثال: می خواهیم مشابه مثالی را که با استفاده از حلقه for هم حل کردیم، اینجا با استفاده از while حل کنیم.
برنامه ای می نویسیم که توان سوم اعداد یک تا 6 را بنویسد. البته نوشتن این برنامه با استفاده از عملگر توان و یا حلقه for ساده تر است. اما اینجا برای آشنایی با حلقه while از این روش استفاده می کنیم.
مشاهده می کنید که یک شمارنده داخل حلقه توسط متغیر i ایجاد شده که باعث می شود تکرار حلقه از 6 فراتر نرود.
دستور disp در متلب هم که برای نمایش خروجی استفاده شده است. برای ترکیب متن و عدد در disp هم ناچاریم از دستور num2str در متلب استفاده کنیم.
نکته: همانطور که در مثال بالا مشاهده می کنید نیازی نیست که شرط حلقه حتما داخل پرانتز نوشته شود.
نکته: در مثال بالا زیر متغیر a یک خط کشیده شده است. این خط به ما می گوید اگرچه کد نوشته شده مشکل عملکردی ندارد اما می تواند بهتر نوشته شود تا سرعت بیشتری داشته باشد.
در حال حاضر و با برنامه ای که در بالا نوشته شده در هر دور حلقه طول متغیر a تغییر می کند و این باعث کاهش سرعت اجرای برنامه می شود. بنابراین به روش زیر این مورد را اصلاح می کنیم.
مثال: مثال بالا را اصلاح می کنیم. ابتدا متغیر a را با درایه های دلخواه و طول 6 تعریف می کنیم و سپس در تکرارهای حلقه، اعداد مورد نظر را در درایه های a جایگزین می نماییم. برای سادگی کار بردار a را با استفاده از تابع zeros در متلب تعریف می کنیم و همه درایه های بردار را برابر صفر قرار می دهیم.
مثال: برنامه ای می نویسیم که یک عدد را دریافت می کند و فاکتوریل آن را محاسبه می نماید.
دستور input برای برای دریافت یک ورودی از کاربر به کار می رود و متن داخل پرانتز روبه روی آن به کاربر نمایش داده می شود.
مثال: برنامه ای می نویسیم که اعداد کوچکتر از یک عدد (n) را به ترتیب می نویسد.
مهم ترین نکات مربوط به حلقه while در این آموزش بحث شد. برای تسلط بهتر در استفاده از این حلقه، نیاز به حل مثال های متعدد و تمرین دارید. در آینده سعی می کنیم مجموعه ای از مثال ها در سطوح گوناگون به همراه پاسخ را در ویکی مکانیک بارگذاری کنیم.
امیدوارم از این آموزش لذت برده باشید. هر گونه سوال یا ابهام را می توانید در پایین همین پست مطرح کنید.