حلقه های تکرار For و While در متلب (جلسه سی و نهم)

حلقه های while و for در متلب
حلقه های while و for در متلب

در این دوره آنلاین آموزش متلب به صورت رایگان با سری آموزش‌های نرم افزار متلب در خدمت شما هستیم. در واقع آنچه که شما به طور کاملا عملی برای استفاده در انجام پروژه متلب نیاز دارید در این جلسات ارائه خواهد شد.

جلسه‌ی پیش ساختارهای کنترلی در زبان متلب (حلقه‌های If و Switch) را به صورت تئوری بررسی کردیم و متوجه شدیم که این حلقه ها چه هستند. در این جلسه قصد داریم راجع به حلقه‌های تکرار For و While صحبت کنیم که به صورت تئوری چه هستند.

حلقه‌های تکرار for

for  x = set

دستورات تکرارشونده

  end

اولین تکراری که می‌خواهیم با هم راجع به آن صحبت کنیم، حلقه‌ی تکرار for است که در این حلقه ما for داریم و x متغیر ما است که آن را با i هم نشان می‌دهیم و مساوی set. Set یعنی چه؟ یعنی آن اعداد و آن چیزهایی که می‌خواهد بررسی کند. مثلاً اگر در set بنویسیم ۱ تا ۲۰، مثلا می‌شود اعداد ۱ تا ۲۰ در متغیر x.

چیزهای زیادی می‌توان نوشت و حتما نباید عدد باشد و آن را در متغیر می‌ریزیم. در خط بعد هم دستورات تکرارشونده را داریم که برای آنها می‌خواهیم انجام دهیم. مثلا برای همان ۱ تا ۲۰ دستورات را انجام می‌دهیم و در خط بعد هم end را داریم.

برای مثال:

for i=1:100

disp(i^2);

end

برای i از ۱ تا ۱۰۰ disp یعنی display یعنی این‌که iهای به توان ۲ نشان دهد. این مثال را در محیط برنامه متلب هم می‌خواهیم نشان دهیم.

وقتی می‌نویسیم for به رنگ آبی درمی‌آید زیرا از قبل در خود متلب تعریف شده است. برای iهای از ۱ تا ۱۰۰ چه کار کند؟ iهای به توان ۲ را display کند. و در خط بعد end را داریم.

مشاهده می‌کنید که از ۱ تا ۱۰۰ همه را به توان ۲ رسانده است. مثلاً ۱ به توان ۲، ۱ می‌شود. ۲ به توان ۲، ۴ می‌شود و ۳ به توان ۲ تا ۱۰۰ به توان ۲ را انجام داد و نمایش داده است.

اجرای دستور FOR
نمایش نحوه اجرای دستور FOR در متلب
ادامه اجرای دستور FOR
ادامه نمایش نحوه اجرای دستور FOR در متلب

مثلاً می‌توانیم بنویسیم for i=1: 20، هم خود i و هم i^2 و هم i^3 را display کند. مشاهده می‌کنید که به همان صورت در کنار هم برای ما آنها را نوشت. حال اینکه در یک جا تغییر مکان داده است، به دلیل این است که اعداد دو رقمی شدند. خود iها را از ۱ تا ۲۰ نوشته است و بعد به توان ۲ها را نوشته است و در کنار آن هم به توان ۳ها را نوشته است.

ادامه اجرای دستور FOR-تصویر 3
نمایش نحوه اجرای دستور FOR در متلب-تصویر 3
ادامه اجرای دستور FORتصویر 4
نمایش نحوه اجرای دستور FOR در متلب-تصویر 4

حال به نظر شما اگر در همین مثال فقط اعداد فرد را بخواهیم، چگونه باید این را بنویسیم؟ جواب ساده است.

به این صورت می‌نویسیم که for i=1: 2 : 20 یعنی از ۱، دوتا دوتا تا ۲۰ جلو برود و در خط بعد دقیقا همان دستور مثال قبلی را می‌نویسیم. و در خط بعد هم end قرار می‌دهیم.

ادامه آموزش دربار نحوه اجرای دستور FORتصویر 5
نمایش نحوه اجرای دستور FOR در متلب-تصویر 5

مشاهده می‌کنید که به سادگی اعداد فرد را فقط به ما نشان داد و مثلاً ۲ که عدد زوج است را دیگر در اینجا نداریم. زیرا با قدرنسبت ۲، دوتا دوتا جلو رفتیم. که این مباحث را به طور کامل در فصل اول توضیح داده بودیم.

در اینجا for حتما نباید تا (:) داشته باشد. مثلا می‌توانیم بگوییم for i=[ 1 4 5 6 30] هر عدد دلخواهی را می‌توانیم قرار دهیم و دستورش این باشد که i/2 را display کند و end کند.

ادامه آموزش دربار نحوه اجرای دستور FORتصویر 6
نمایش نحوه اجرای دستور FOR در متلب-تصویر 6

مشاهده می‌کنید که همه را بر ۲ تقسیم کرده است. مثلاً یک را تقسیم بر کرده است که 0.5000 شده است و ۴ را تقسیم بر ۲ کرده است که جواب ۲ شد و همین‌طور الی آخر ۳۰ تقسیم بر ۲ شد که ۱۵ را نمایش داده است.

باید توجه داشته باشیم که حلقه‌ی for فقط زمانی استفاده می‌شود و استفاده دارد که حداکثر تعداد تکرارها مشخص باشد، یعنی بدانیم چند بار می‌خواهیم تکرار کنیم. در ۲ مثال قبلی ما می‌دانستیم که از ۱ تا ۱۰۰ تکرار داریم و به صورت کلی باید برای حلقه‌ی for، iها را بدانیم. اما اگر تعداد را ندانیم و i را نداشته باشیم یا شرایط دیگری وجود داشته باشد که با for نتوان آن کار را انجام داد، از حلقه‌ی دیگری به نام while استفاده می‌کنیم که با while می‌توان forها را نوشت اما با for نمی‌توان whileها را نوشت.

پس اگر بخواهیم به صورت جمع‌بندی توضیح دهیم، اگر جمله‌ی آخری که بیان کردم را متوجه نشدید، در جلسه قبل گفته شد که با while می‌توانیم forها را بنویسیم ولی ممکن است کار ما را سخت‌تر کند. دقیقا مانند همان switch می‌ماند که راجع به آن توضیح دادیم. Switch کار را برای ما بسیار آسان‌تر کرد. اما می‌توانستیم همان  Switch را با if بنویسیم. مثلاً بگوییم if =5، if=6 و … که کار را طولانی‌تر می‌کرد. در for و while هم به همین صورت است و در جایی که نیاز است ما while را استفاده کنیم، بهتر است از while استفاده کنیم تا برنامه ما هم‌ سریع‌تر لود شود و هم این‌که کار را برای خودمان راحت‌تر کنیم.  

حلقه‌های تکرار while

حال می‌خواهیم حلقه تکرار while را توضیح دهیم که چیست.

while (شرط)  شرط ادامه حلقه

    دستوراتی که داریم

end

While را می‌نویسیم و داخل آن یک شرط داریم. این شرط، شرط ادامه حلقه است و تا زمانی که شرط برقرار است، دستوراتی که داریم برقرار می‌شود و end.

برای مثال اگر بنویسیم:

while (true)

…..

end

این دستور را اگر بنویسیم، تا بی‌نهایت و همیشه ادامه دارد. تا وقتی که تابع ما true است دستور را اجرا کن. همیشه true است. پس این تا بی‌نهایت ادامه دارد و تنها کاری که می‌توان برای این حلقه کرد که ادامه نداشته باشد، استفاده از دستور break است.

ما break داریم و continue. توجه داشته باشید که break هم برای while و هم برای for استفاده می‌شود.اما continue فقط برای for استفاده می‌شود. پس به این نکته توجه داشته باشید.

continue

حال می‌خواهیم ببینیم continue چیست. یک مثال را ارائه می‌دهیم.

for i=1 : 20

            if (i==6)

                        continue

                                    end

                                                disp(i);

                                                            end

به نظر شما جواب این مثال چیست؟

اگر دستورهای if (i==6) و continue وجود نداشتند، برای ما از ۱ تا ۲۰ را display می‌کرد. یعنی همه را زیر هم می‌نوشت. حال که این دستورها وجود دارند، یعنی چه؟ در اینجا به همان صورت قبلی می‌نویسد. ۱ را display می‌کند، بعد ۲ را display می‌کند، ۳ را نشان می‌دهد، ۴ الی ۶. وقتی به ۶ می‌رسد، دیگر نوشته شده است if (i==6)، continue کند شاید فکر کنید که به معنی این است که ادامه دهد ولی یعنی این‌که عدد (شمارش) را ادامه دهد. یعنی ۶ را رد کند.

پس به ۷ می‌رسد. در اصل وقتی در اینجا ما از continue استفاده کردیم، برای رد کردن به کار رفته شده است و در اینجا از ۱ تا ۲۰ را برای ما می‌نویسد ولی ۶ را نمی‌نویسد و از ۵ به روی ۷ می‌رود.

اگر برای مثال بخواهیم این را به یک چیزی جایگزین کنیم، معادل continue را در for بنویسیم، به نظر شما چه چیزی می‌توان نوشت؟

در خود برنامه‌ی متلب این را نشان می‌دهیم.

گفتیم که اگر continue را بزنیم، دیگر ۶ را برای ما نشان نمی‌دهد. زیرا گفته بودیم، if(i==6)، continue

به این صورت است که می‌گوییم for i=1: 20 (علامت % را قبل از هر دستور قرار می‌دهیم زیرا نمی‌خواهیم مثال بنویسیم. این‌ها را می‌‌توانید در منزل تمرین کنید و بنویسید)

اگر بگوییم که  if (i~=6)(i مساوی با ۶ نباشد) در این صورت، i  را display کند یا نشان دهد.

این‌ها را می‌نویسیم که شما هم متوجه شوید که داریم چه کاری انجام می‌دهیم و بتوانم توضیح دهم.

end آخر برای for اولی است و end قبلی برای if است. در اینجا دقیقا همان کار continue را انجام می‌دهد. می‌گوید که ۱ تا ۲۰ را بدون ۶ نشان دهد. یعنی اگر ۶ را نشان ندهد.

ادامه آموزش دربار نحوه اجرای دستور FORتصویر 7
نمایش نحوه اجرای دستور FOR در متلب-تصویر 7

بسیار ساده است و اگر این زبان را یاد بگیرید، دیگر کار با آن بسیار راحت می‌شود و می‌توانید بسیاری از موارد پیچیده را به سادگی در ذهنتان بیاورید. ابتدا بررسی کنید و به این زبان بیاورید.

حال به نظر  شما break در دو مثال قبلی چگونه کار می‌کند؟ اگر به جای continue، break نوشته شود، چه اتفاقی می‌افتد؟

 break

for i=1 : 20

            if (i==6)

                        break

                                    end

                                                disp(i);

                                                            end

در اینجا همان‌طور که می‌خواهد از ۱ تا ۲۰ display کند، باز هم می‌آید نشان می‌دهد و آنها را display می‌کند ولی وقتی که ۶ شد، دیگر تمام می‌کند و مستقیم می‌آید بعد از end. یعنی وقتی که i=6 بود، مستقیم به بعد از end می‌رود. حال در اینجا ما بعد از end چیزی نداریم. پس ۱ تا ۵ را برای ما نمایش می‌دهد.

اگر i=7 بودِ، از ۱ تا ۶ را نمایش می‌داد. 

حال همین را در برنامه متلب می‌نویسیم که خیالتان راحت باشد که به همین صورت است.

گفتیم که برای iهای از ۱ تا ۲۰ اگر که i=6 در این صورت break کند یعنی بیرون برود و end و i display کند و باز هم end داریم.

ادامه آموزش دربار نحوه اجرای دستور FORتصویر 8
نمایش نحوه اجرای دستور FOR در متلب-تصویر 8

مشاهده می‌کنید که از ۱ تا ۵ را برای ما نوشت؛ یعنی وقتی که به ۶ رسید، کلا بیرون آمد و به بعد از end رفت که دستور خاصی هم بعد از end وجود نداشت. پس این را برای ما می‌نویسد.

continue در while

continue در while به چه صورت است؟

اولا توجه داشته باشید که چنین چیزی که در اینجا نوشتیم i=1:20 را نمی‌توان در متلب انجام داد. باید فقط بنویسیم ۱ تا ۲۰. و این‌که continue هم در while نمی‌آید و چنین چیزی اصلاً امکان‌پذیر نیست ولی اگر به این صورت باشد، وقتی به continue رسید، به اول شرط می‌آید، آن را چک می‌کند و اگر درست بود، باز ادامه می‌دهد. یعنی اگر به این صورت بود، یک حلقه‌ی بی‌نهایت‌ می‌شد. چنین چیزی امکان دارد ولی یک حلقه بی‌نهایت می‌شود و در خط اول هم باید i را حذف کنید و بینویسید ۱ تا  ۲۰ و این حلقه یک حلقه‌ی بی‌نهایت می‌شود.

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

در جلسه آینده در رابطه با دنباله فیبوناچی صحبت خواهیم کرد.

در صورتی که شما پس از خواندن محتوای جلسات قبلی و این بخش که به ساده‌ترین زبان ممکن درباره‌ی برنامه‌ی متلب و محیط کاربری آن توضیح داده باز هم سردرگم هستید. می‌توانید با برون سپاری انجام پروژه متلب خود به کارشناسان حرفه‌ای کارت پروژه می‌باشد. میتوانید از طریق شماره‌ی 09104503300 با پشتیبانان کارت از طریق پیام یا تماس در ارتباط باشید.

برای کسب اطلاعات بیشتر در مورد متلب میتوانید به مقاله آموزش متلب مقدماتی مراجعه کنید.

برای ثبت سفارش لطفا در تلگرام یا واتساپ یا ایتا به شماره 09104503300 پیام دهید.