همان طور که در آموزش ساختارهای کنترلی در متلب شرح دادیم، یکی از ملزومات کدنویسی با استفاده از هر زبان برنامه نویسی، قابلیت تکرار بخش های دلخواه برنامه با استفاده از حلقه های تکرار است. اشاره کردیم که یکی از حلقه های تکرار در متلب، حلقه for است. در این بخش قصد داریم این حلقه را بررسی کنیم و با حل مثال های کافی، مفهوم آن را به خوبی جا بیاندازیم.
حلقه for برای انجام تعدادی از دستورها به صورت تکراری و برای چند بار معین است.
ساختار حلقه for در متلب
ساختار حلقه for در متلب به صورت زیر است:
دربرابر کلمه for نام متغیری را می آوریم که شامل مجموعه ای از اعداد می شود. به ازای هر کدام از المان های این مجموعه عددی، یک دور حلقه تکرار می شود. مثلا اگر متغیر شامل 4 عدد باشد، 4 بار حلقه for تکرار می شود. در داخل حلقه (یعنی بین کلمه for و کلمه end) دستوراتی نوشته می شوند که در هر بار تکرار حلقه باید انجام شوند.
مثال های زیر نحوه استفاده از حلقه for در متلب را به خوبی روشن می کنند.
مثال: می خواهیم توان سوم اعداد 1 تا 10 را محاسبه کنیم. می توانیم به شیوه زیر این کار را به راحتی انجام دهیم.
اما برای توضیح نحوه استفاده از حلقه for در متلب، این مثال را با استفاده از حلقه for حل می کنیم.
متغیر حلقه یعنی i را برابر مجموعه اعداد 1 تا 10 قرار می دهیم. در دور اول i برابر 1 است. دستور داخل حلقه، 1 را به توان 3 می رساند و در درایه اول متغیر a ذخیره می نماید. (همه i ها برابر 1 قرار داده می شوند.) در دور دوم، همه i ها برابر 2 قرار داده می شوند و بنابر این مقدار 2 به توان 3 (یعنی 8) در درایه دوم متغیر a ذخیره می شود. به همین ترتیب این حلقه 10 بار و به ازای اعداد 1 تا 10 تکرار می شود و بردار a را با 10 درایه ایجاد می کند.
یک بار برای همیشه نحوه کار با help را در آموزش help متلب بخوانید.
نکته: حالت بالا مشکل عملکردی ندارد اما خیلی مطلوب متلب نیست. همان طور که می بینید در زیر متغیر a یک خط هم رسم شده است که نشان دهنده همین موضوع می باشد.
دلیل این امر این است که در هر دور از حلقه، یک درایه جدید به بردار a اضافه می شود و این باعث می شود که سرعت اجرای برنامه کند شود. البته در کد بسیار ساده مثال بالا، این قضیه نمود چندانی ندارد. اما در پروژه های سنگین تر، می تواند باعث کندی آزاردهنده برنامه شود.
برای رفع این مشکل، معمولا قبل از حلقه for یک بردار با تعداد درایه لازم ایجاد می کنیم و سپس با استفاده از حلقه for درایه های بردار را پر می کنیم. در نتیجه این کار، در هر دور طول متغیر a تغییر نمی کند و سرعت برنامه کاهش پیدا نمی کند.
به مثال زیر توجه کنید.
مثال: برای رفع مشکل سرعت مثال بالا، متغیر a با طول 10 را تعریف می کنیم. درایه های این بردار دلخواه هستند چون در حلقه for با اعداد مد نظر ما جایگزین می شوند. اما معمولا همه درایه ها را برابر 0 قرار می دهیم و برای این کار از دستور zeros در متلب استفاده می کنیم.
ممکن است اعدادی که برای متغیر حلقه انتخاب می کنیم، هیچ ترتیب خاصی نداشته باشند. مانند مثال زیر.
مثال: می خواهیم تعدادی از اعداد به همراه توان دومشان در کنار یک دیگر نمایش داده شوند. اعداد مورد نظر را داخل یک بردار در مقابل متغیر حلقه می نویسیم. سپس با استفاده از دستور disp در متلب آن ها را به شکل مورد نظر نمایش می دهیم.
الزامی وجود ندارد که متغیر حلقه for در متلب حتما برابر یک مجموعه عددی باشد. می توانیم از مجموعه های غیر عددی هم استفاده کنیم. به مثال زیر توجه کنید:
مثال: با استفاده از حلقه for قصد داریم تعداد کاراکترهای یک عبارت متنی را محاسبه کنیم. همانطور که می دانید یک آرایه متنی مانند برداری از کاراکترهاست. بنا بر این به ازای هر کدام از کاراکترهای عبارت متنی، یک دور حلقه اجرا می شود. در هر دور حلقه هم عدد یک به n اضافه می شود تا تعداد کاراکترها شمرده شود. (قبل از حلقه مقدار اولیه n را برابر 0 قرار دادیم. )
حلقه به تعداد کاراکتر ها دور می خورد و مقدار n به تعداد کاراکتر ها زیاد می شود و در نتیجه تعداد نهایی کاراکترهای عبارت متنی مورد نظر نمایش داده می شود.
نکته: همانطور که در مثال بالا هم مشاهده شد، خیلی از وقت ها متغیر حلقه صرفا نقش شمارنده را دارد و در دستورات داخل حلقه نقش مستقیم بازی نمی کند.
در انتها این نکته را یادآوری می کنم که حلقه for کاربرد بسیار زیادی در کدنویسی با متلب دارد. برای تسلط بر این ساختار باید مثال های زیادی حل کنید. در آینده تعداد زیادی مثال حل شده در ویکی مکانیک برای شما خواهیم آورد.
امیدوارم این آموزش برای شما مفید بوده باشد.
میخام برنامه ای بنویسم ک وقتی یک عدد پارد مردی بزرگترین عدد دنباله فیبوناتوی ک قبل از اون هست رو چاپ کنه میشه کمک کنین