در این جلسه از آموزش رایگان متلب هوسم میخواهیم نحوه نوشتن حلقه در متلب را یاد بگیریم. حلقه های for و while در متلب برای تکرار یک یا چند دستور مورد استفاده قرار میگیرند. حلقه ها نیز همانند عبارات شرطی بسیار مهم و کاربردی هستند. در پایان این جلسه شما با دستور for و while در متلب آشنا خواهید شد. همچنین نحوه ترکیب دستور for و if در متلب را بررسی خواهیم کرد. با هوسم همراه باشید…
مقدمه حلقه های for و while در متلب
اگر متولد دهه شصت یا هفتاد باشید، احتمالا یادتان هست که وقتی لغتی را در املا غلط مینوشتیم، معلم از ما میخواست 100 بار آن کلمه را بنویسیم! حالا فکر کنید استاد برنامهنویسی از شما خواسته کلمه “apple” را 100 بار در متلب بنویسید!! شما چکار میکنید؟ آیا 100 بار این کلمه را تایپ میکنید؟؟ از آنجایی که فکر میکنم متلب را خوب میشناسید، محال است این کار را بکنید. مگر میشود متلب چنین امکاناتی را نداشته باشد. احتمالا اول مرورگرتان را باز کرده و در گوگل مینویسید “چطور یک کلمه را 100 بار در متلب بنویسم”! درست است؟
قطعا متلب فکر اینجا را هم کرده. حلقه های for و while در متلب برای تکرار ساخته شدهاند. هرچیزی را که بخواهید تکرار کنید، کافی است آن را در یک حلقه for یا while قرار دهید. در بخشهای بعدی نحوه نوشتن حلقه های for و while در متلب را بررسی خواهیم کرد. دوستان، این دو دستور همانند عبارات شرطی از اهمیت زیادی برخوردار هستند. پس خواهش میکنم حتما حتما تمام تمرکز و انرژیتان را روی این جلسه بگذارید. تمرینها و مثالها را خودتان حل کنید. سوالات خودتان را در پایین همین صفحه برایمان کامنت کنید. تیم هوسم در اسرع وقت به سوالهایتان پاسخ خواهد داد. خب شروع کنیم …
ساختار حلقه for در متلب
درست مانند دستور if ، دستور for نیز یک ساختار مشخص دارد. ساختار حلقه for در متلب ، در تصویر زیر نشان داده شده است. دستور for در متلب ، دو کلیدواژه دارد; for و end. یک حلقه for در متلب با عبارت for شروع میشود و با عبارت end تمام میشود. دقت کنید که حتما این دو عبارت باید در حلقه وجود داشته باشند. خصوصا end، که اوایل معمولا فراموش میشود! در غیر این صورت با خطا مواجه خواهیم شد.
علاوه بر for و end، در تصویر زیر دو عبارت index=values و <statements> وجود دارند. فرض کنید کسی به ما بگوید «کلمه سلام را تکرار کن!». ما قطعا میپرسیم «خب چند بار؟!». عبارت index=values دقیقا جواب سوال «خب چند بار؟!» است. به جای index یک اسم دلخواه میتوانیم قرار دهیم. بهتر است این اسم قبلا در کد استفاده نشده باشد. در قسمت values اما لیستی از مقادیر نوشته میشود. در هر تکرار از حلقه، مقدار index برابر با یکی از المانهای لیست قرار داده میشود. در بخش بعدی مفصل در این باره صحبت خواهیم کرد.
در قسمت <statements> نیز کدهایی که میخواهیم تکرار شوند نوشته میشوند. این یک آشنایی سریعالسیر با دستور for در متلب بود. که اصلا هم کافی نیست! در ادامه ما با چندین مثال، نحوه نوشتن یک حلقه در متلب را به شما یاد خواهیم داد. پس برویم سرغ اصل متلب…
نکته قبلا گفتیم دستوراتی که چندخطی هستند مثل if، for و while بهتر است در m-file نوشته شوند. پس لطفا یک m-file با نام loops بسازید و کدها را در آن بنویسید. در صورتی که هنگام اجرای کدها با پیغامی شبیه به پیغام زیر مواجه شدید، گزینه change folder را انتخاب کنید. اگر میخواهید دلیل این کار را بدانید به جلسه آشنایی با محیط متلب 2 مراجعه کنید.
نحوه تعریف حلقه for در متلب
در این بخش بهصورت کامل نحوه تعریف حلقه for در متلب را تشریح خواهیم کرد. برای این کار، با هم چند مثال حل خواهیم کرد. فرض کنید بخواهیم کدی بنویسیم که اعداد 1 تا 9 را در Command Window نمایش دهد. برای این کار میخواهیم از حلقه for در متلب استفاده کنیم. با حل این مثال با نحوه کار کردن دستور for نیز بهتر آشنا خواهید شد. برای این کار کافی است بنویسیم:
clc clear for i = 1 : 9 disp(i) end
در کد بالا ما به وسیله 9 : 1، لیستی از اعداد 1 تا 9 تعریف کردیم. در هر تکرار از حلقه for، مقدار i تغییر میکند! در هر تکرار مقدار i برابر با یکی از عناصر لیستی که با 9 : 0 ساختیم قرار میگیرد. یعنی در تکرار اول، i = 1 است، در تکرار دوم i = 2 ، …. و در تکرار دهم، i = 9 خواهد بود. بنابراین اگر ما به جای <statement> بنویسیم disp(i)، آنگاه در هر تکرار مقدار i نمایش داده خواهد شد. یعنی اعداد 1 تا 9 در Command Window نمایش داده خواهند شد! کد بالا را اجرا کنید و نتیجه را مشاهده کنید. آیا اعداد 1 تا 9 در Command Window نمایش داده شدند؟
نکته در کد بالا قبل از نوشتن کد اصلی دو دستور clc و clear گذاشتیم. دستور clc در متلب مربوط به پاک کردن Command Window و دستور clear مربوط به پاک کردن Workspace است. قرار دادن این دو خط کد در ابتدای m-file بسیار رایج است. دلیل استفاده از clc که واضح است. قطعا با پاک کردن Command Window خروجیهای برنامه از کدهایی که قبلا در این پنجره نوشتیم تفکیک میشوند. دستور clear هم برای جلوگیری از تداخل متغیرهایی که در m-file نوشتیم با متغیرهایی که قبلا در workspace وجود دارند استفاده میشود.
تمرین 1: با استفاده از دستور for کدی بنویسید که اعداد فرد بین 1 تا 20 را نمایش دهد.
clc clear for i = 1 : 20 disp(i) end
برویم سراغ مثال دوم. مثالی که در مقدمه گفتیم یادتان هست؟ گفتیم استاد برنامهنویسی از شما خواسته کلمه “apple” را 100 بار در متلب بنویسید! بیایید کدی بنویسیم که کلمه “apple” را 100 بار نمایش دهد. برای این کار کافی است بنویسیم:
clc clear for i = 1 : 100 disp('apple') end
کد بالا را Run کنید. با اجرای کد بالا خواهید دید که کلمه “apple” صد بار در command Window نمایش داده خواهد شد!
تمرین 2: کدی بنویسید که جمله «!I am sorry» را 20 بار نمایش دهد.
clc clear for i = 1 : 20 disp('!I am sorry') end
با کمک دستور for میتوانیم در یک بردار نیز حلقه بزنیم! یعنی به جای استفاده از : ، از یک بردار سطری استفاده کنیم. مثلا فرض کنید یک بردار تصادفی به طول 10 داریم و میخواهیم هرکدام از عناصر این بردار را نمایش دهیم. برای این کار کافی است بنویسیم:
clc clear r = rand(1, 10); for i = r disp(i) end
با اجرای کد بالا عناصر موجود در بردار r به ترتیب از اندیس 1 تا اندیس 10 نمایش داده خواهند شد.
ترکیب for و if در متلب
در این بخش میخواهیم دستور for و if در متلب را باهم ترکیب کنیم! با این ترکیب این دو دستور میتوانیم کدهای جالبی بنویسیم. اگر با if آشنا نیستید به جلسه دستور if در متلب مراجعه کنید. در این بخش یک مثال جالب در نظر گرفتهایم. میخواهیم با کمک for و if کد بازی «هُپ» را با متلب بنویسیم. این کار را برای اعداد 1 تا 100 انجام میدهیم. به این شکل که اعداد به ترتیب نوشته شوند. اما به جای مضارب 5، عبارت “HOP” نوشته شود! در این مثال به دستوری برای محاسبه باقیمانده نیاز داریم. برای محاسبه باقیمانده در متلب میتوانیم از دستور rem استفاده کنیم. کد مربوط به بازی HOP به شکل زیر خواهد بود:
clc clear for i = 1 : 100 if rem(i, 5) == 0 disp("HOP") else disp(i) end end
با اجرای دستور بالا در Command Window چه میبینید؟ آیا بازی HOP به درستی انجام شده است؟
چرا نباید در استفاده از for زیادهروی کرد؟
متلب دستورات متنوع با امکانات زیاد در اختیار شما قرار دادهاست. بسیار پیش آمده که در کدهای دانشجویان دیدهایم به وفور از حلقه for استفاده کردهاند. درحالیکه در بعضی از بخشهای کدشان اصلا نیازی به for نبوده. کافی بود با دستورات متلب آشنا باشند تا بدون for به اهدافشان برسند.
شاید برای شمایی که در سطح مقدماتی از متلب هستید، این مساله چندان واضح نباشد. فرض کنیم از ما خواسته شده یک بردار تصادفی به طول 5 تولید کنیم. سپس هر المانی که بزرگتر از 0.5 باشد با یک جمع شده و در غیر اینصورت یکی از آن کم شود. آیا میتوان این عمل را بدون for نوشت؟ به کد زیر نگاه کنید. دقیقا همان کار بدون استفاده از for انجام شده است:
>> a = rand(1, 5); >> a(a > 0.5) = a(a > 0.5) - 1; >> a(a < 0.5) = a(a < 0.5) + 1;
سوال این است که چرا نباید از for استفاده کنیم؟ دقت کنید، نگفتیم از for استفاده نکنید، بلکه گفتیم هرجایی و به هردلیلی از for استفاده نکنید. بلکه در جایی که لازم است از for استفاده کنید. استفاده بی مورد از حلقه for منجر به افزایش زمان اجرای کدتان میشود.
دستور while در متلب
دستور while در متلب یکی دیگر از دستورها برای نوشتن حلقه است. ساختار دستور while در تصویر زیر نشان داده شده است:
با استفاده از دستور while میتوان تا زمانی که شرط (condition) برقرار است، کد یا کدهای خاصی را اجرا کرد! چطور؟ بیایید یک مثال حل کنیم. فرض کنید بخواهیم اعداد 1 تا 9 را به ترتیب در Command Window نمایش دهیم. خب شرط ما چه باید باشد؟ حالا که هیچ indexی وجود ندارد که با هر تکرار تغییر کند، چه طور اعداد را به ترتیب نمایش دهیم؟ برای این کار یک متغیر بیرون از while تعریف میکنیم و مقدار آن را برابر با 1 قرار میدهیم. سپس داخل حلقه while یکی یکی به آن اضافه میکنیم. یعنی به شکل زیر:
clc clear num = 1; while num < 10 disp(num) num = num + 1; end
حلقه بی نهایت در متلب
با استفاده از while میتوانیم یک حلقه بی نهایت بسازیم! دقیقا برعکس for که همیشه تعداد تکرارهای حلقه مشخص است. برای این کار کافی است به جای شرط 1 یا true قرار دهیم. در این صورت حلقه تا زمانی که ما دستور بدهیم ادامه خواهد داشت! ما میتوانیم با دستور break این کار را انجام بدهیم. بیایید مثال بالا را با حلقه بینهایت انجام دهیم! برای این کار کافی است بنویسیم:
clc clear num = 1; while 1 if num == 10 break end disp(num) num = num + 1; end
منابع آموزش متلب
در فهرست زیر، تعدادی از منابع خوب آموزش متلب را معرفی کردهایم. ضرورتی وجود ندارد که اینها را نگاه کنید. چون ما برای آموزش متلب، این منابع را مطالعه و استفاده کردهایم.
در این پست نحوه نوشتن حلقه در متلب را بررسی کردیم. گفتیم که حلقه از نوشتن کدهای تکراری جلوگیری میکند. دیدیم که با دستور های for و while در متلب میتوان حلقه نوشت. امیدوارم این آموزش مورد توجه شما قرار گرفته باشد. سوالات خود را پایین 👇 برایمان کامنت کنید. حتما سوالات شما پاسخ داده خواهد شد.