ساختارهای کنترلی در زبان متلب (جلسه سی و هشتم)

ساختارهای کنترلی در متلب
ساختارهای کنترلی در متلب

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

در جلسه گذشته از آموزش مقدماتی متلب با مفهوم cell array و structure در متلب آشنا شدیم. در این جلسه ما بیشتر صحبت‌های تئوری داریم و همچنین شاید جلسه‌ی دوم و سوم از بخش دوم مثال‌های زیادی را بیان کنیم. بنابراین فعلا سعی کنید که مفهوم را یاد بگیرید تا بتوانید مثال‌ها را خوب درک کنید.

معرفی ابتدایی ساختارهای کنترلی در زبان متلب

گفته شد که از لحاظ ریاضی اگر ۳ ساختار زیر که اکنون بیان می‌کنیم، در یک زبان برنامه‌نویسی وجود داشته باشند، با آن زبان می‌توان هر نوع الگوریتم دیگری را پیاده‌سازی نمود.

  1. توالی

اولین ساختار توالی است. یعنی چه؟ یعنی اگر به برنامه دستوری می‌دهیم، بدون به هم ریختن ترتیب به طور متوالی آن را تکرار کند. موضوع ساده‌ای است یعنی تمام موارد به این صورت هستند.

  1. انشعاب (تصمیم‌گیری)

یعنی این‌که برنامه یا هر چیزی انشعاب و شاخه‌های مختلفی داشته باشد که ببینیم از کدام راه باید برویم یعنی راه‌های مختلفی در برنامه وجود داشته باشد که این راه‌‌های مختلف که مثلاً راه ۱ و ۲ وجود دارد این باعث تصمیم‌گیری ما می‌شود که ببینیم از راه ۱ برویم یا از راه ۲ برویم و همین تصمیم‌گیری‌ها شاید فکر کنید که برنامه‌نویسی چیزی باشد که فقط برنامه‌نویسی شما را قوی می‌کند ولی همین تصمیم‌گیری‌ها در زندگی هم می‌تواند به شما کمک کند. زیرا شما با این تصمیم‌گیری‌ها دارید مغز خودتان را پرورش می‌دهید و سعی می‌کنید که بهترین تصمیم را در این پروسه بگیرید.

  1. تکرار (حلقه‌های تکرار)

یعنی برخی از دستورات که بتواند به تعدادی که می‌خواهیم تکرار شود.

این سه ساختار اگر وجود داشته باشند، زبان برنامه‌نویسی هم وجود دارد و ما می‌توانیم الگوریتم خودمان را بسازیم. در صورتی که این سه ساختار وجود داشته باشند.

برای مثال قبلاً دستور go to هم باید وجود داشته بود.

انشعاب (تصمیم‌گیری)

انشعاب یا تصمیم‌گیری چیست؟

  • If
  • Switch

If حالت کلی است که و چیزهایی را می‌توان با If گفت که با Switch نمی‌توان گفت ولی در بعضی جاها هم کار با Switch راحت‌تر است که راجع به آن می‌توان سخن گفت. بعداً راجع به این‌ها حسابی صحبت می‌کنیم. در همین جلسه راجع به انشعاب و تصمیم‌گیری به صورت تئوری صحبت می‌کنم و در جلسه دیگر راجع به حلقه‌های تکرار به صورت تئوری صحبت می‌کنم و مثال‌های آن را هم از جلسات بعد با هم شروع می‌کنیم تا برایتان این‌ها خوب جا بیفتد که در هر زبان برنامه‌نویسی هم می‌توانید این‌ها را ببینید که تفاوت‌هایی نیز با هم دارند.

تکرار (حلقه‌های تکرار)

تکرار و حلقه‌های تکرار چیست؟

  • For
  • While

در اینجا While حالت کلی است یعنی بعضی چیزها را می‌توان با While نوشت و با For نمی‌توان نوشت ولی تمام Forها را می‌توانیم به صورت While درآوریم و بنویسیم.

مثلاً در قبلی (انشعاب و تصمیم‌گیری) If کار Switch را انجام می‌‌دهد یعنی ما تمام Switch ها را می‌توانیم به صورت If بنویسیم ولی باید توجه داشته باشیم که گاهی اگر برای مثال دستوری که با Switch داریم می‌نویسیم را با If بنویسیم، کار را سخت‌تر می‌کند و نیاز است که چند تا If نوشته شود و این دقیقاً برای While هم که در اینجا داریم، صدق می‌کند و این‌که باید توجه داشته باشیم که For در متلب با زبان‌های برنامه‌نویسی دیگر تفاوت‌های اساسی دارد که بعداً راجع به آنها صحبت می‌کنیم و بسیار هم قدرتمندتر است.

  • Try/ catch ساختاری برای اشکال‌یابی

ساختاری است که برای خطایابی و اشکال‌یابی است و این را هم در نظر بگیرید که راجع به این هم صحبت خواهیم کرد.

بررسی ساختار کنترلی انشعاب یا If

می‌خواهیم ببینیم ساختار If چگونه است.

If (شرط)

If را می‌نویسیم و روبه‌روی آن داخل پرانتز شرط یا همان condition را می‌نویسیم. پایین آن چه چیزی می‌نویسیم؟ در پایین مجموعه دستوراتی که در صورت صحیح بودن شرط اجرا خواهند شد را می‌نویسیم. یعنی اگر برای مثال شرط ما A>5 & A<10 باشد، در قسمتی که گفته است مجموعه دستوراتی که در صورت صحیح بودن شرط اجرا خواهند شد، برای مثال می‌نویسیم که اگر بزرگتر از ۵ و کوچکتر از ۱۰ بوده است، A جزو اعداد صحیح است یا موارد دیگر را می‌توان مثال زد.

در خط بعد end را داریم یعنی این‌که شرط تمام می‌شود.

حال ما می‌خواهیم این ساختار را که ساده‌ترین ساختار If است، کمی بهبود دهیم. توجه داشته باشید که در توضیحات بالا حتماً نیاز نیست که شرطمان داخل پرانتز نوشته شود و مانند زبان C# شرط حتماً نباید داخل پرانتز باشد.

ساختار دوم If

حال می‌خواهیم ساختار دوم If که بهبود یافته است را توضیح دهیم.

باز می‌آییم If  را به همراه شرط آن می‌نویسیم و در خط بعد دستوراتی که در صورت صحیح بودن شرط اجرا می‌شوند را داریم و در خط بعدی یک Else داریم و این Else چیست؟ مجموعه دستوراتی است که در صورت صحیح نبودن شرط اجرا می‌شوند. مثلاً اگر A بزرگتر از ۵ یا A کوچکتر از ۱۰ باشد، اگر جز این شرط‌ها و دستوراتی که در اینجا داریم نبود، در این صورت ما Else را اجرا می‌کنیم و در خط بعد از دستورات Else، end را داریم.

بنابراین در اینجا این Else ما اختیاری است و نیازی نیست که حتماً وجود داشته باشد اما می‌توانیم ساختار اول را به کار ببریم.

Elseif

یک ساختار به نام Elseif هم داریم. شما در قسمت help متلب هم می‌توانید این‌ها را سرچ کنید و ببینید.

بخشی از آن را در اینجا نشان می‌دهیم. گفتیم که وقتی می‌خواهیم در help متلب دنبال چیزی بگردید، مثلاً ما می‌خواهیم در مورد If جستجو کنیم و ببینیم چیست. doc if را سرچ می‌کنیم و برای ما می‌آورد.

دستور Elseif
دستور Elseif در متلب

مشاهده می‌کنید که Syntax آن را در اینجا نوشته است، کاری که می‌کند را در اینجا نوشته است. if, elseif, else در آن است. If exoeretion اگر آن شرط یا آن statement ما … elseif حالت کلی آن را برای ما نوشته که چیست و سپس توضیح داده است که معنی آن چیست. سپس مثال زده است و به سادگی در اینجا می‌توانید همه چیز را یاد بگیرید و نیازی به زبان خیلی قوی هم نیست که این‌ها را یاد بگیرید. زیرا اکثر آن زبان خود متلب است که در اینجا آمده است و دارد توضیح می‌دهد.

اجرای دستور Elseif
اجرای دستور Elseif در محیط متلب

در قسمت Control Flow که بروید باز برایتان گفته است که کلا چه چیزهایی در متلب است و وقتی روی تمام این‌ها بزنید، مثلاً parfor، parallel for loop است که می‌توانید وارد تمام این‌ها شوید و راجع به آنها مطالعه کنید. مثلاً در دوره‌ای که ما داریم یا در هر دوره‌ی دیگری هرچقدر هم آن دوره طولانی باشد، در موردش صحبت شود باز هم تمام موارد را نمی‌تواند دربربگیرد. مگر این‌که شما توجه داشته باشید که همیشه دارد آپدیت‌های جدیدی برای برنامه می‌آید و باید یاد بگیرید با help چگونه کار کنید و راجع به آن مطالعه کنید.

حال به ادامه توضیح در مورد elseif می‌پردازیم.

در یک مثال توضیح می‌دهیم که elseif چیست. به این مثال دقت کنید که یک تابعی به نام f(x) داریم که این تابع به صورت زیر تعریف شده است:

اگر x<0، به ما رنگ قرمز را می‌دهد و اگر x=0 باشد، همان x را می‌دهد و اگر x>0، به ما رنگ green را می‌دهد. به همین‌ صورت که داریم این‌ها را می‌خوانیم، If یا همان اگر درون آن است. یعنی این‌که این مثال را می‌توان به سادگی با استفاده از If نوشت که به صورت زیر خواهد بود.

if(x<0)

Return ‘red’

Elseif(x>0)

Return ‘green’

Else

Return x

end

اگر یا if(x<0) رنگ قرمز را می‌خواهیم یعنی red را return کن. بعد از آن Elseif نوشته می‌شود و اگر x>0، برای ما رنگ سبز را می‌آورد. Otherwise یا در غیر این صورت یا else چه چیزی را به ما بدهد؟ خود x را Return کند.  مشاهده می‌کنید که دستور بسیار ساده است. هر چقد هم پیچیده‌تر شده باشد، شما وقتی مفهومی یاد بگیرید، به سادگی می‌توانید این‌ها را به کار بگیرید و در آخر هم end را داریم.

ساختار کلی

ساختار کلی If به صورت زیر است:

If                                 condition 1

else if                          condition 2

Else if                         condition 3

Else (otherwise)

end

اگر شرط ۱، در غیر این صورت اگر شرط ۲، در غیر این صورت اگر شرط ۳ و در غیر این صورت end.

در مثال قبل هم توضیح دادیم. اما در قسمتی که دو تا elseif داریم معنی آن چیست؟ یعنی اگر شرط ۱ برقرار نشد و شرط ۲ برقرار شد، بنابراین condition 2 یعنی زمانی که condition 1 یعنی if اولی برقرار نشده است وcondition 2 یا شرط ۲ برقرار شده است.  Else آخر یعنی زمانی که همه این‌ها برقرار نشده است.

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

و تمام قسمت‌ها از condition 1 تا Else (otherwise) اختیاری است و حتما نباید در ساختار If وجود داشته باشد.

Switch

حال می‌خواهیم در مورد Switch توضیح دهیم. Switch حالت خلاصه‌شده‌ای از If است. مفهوم Switch را در یک مثال به خوبی بیان می کنیم.

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

فرض کنید Z را داریم و عضوهای Z، ۱-، ۰، ۱ و ۲ هستند. در این صورت این Z ها را به طور مثال از یک کاربری گرفتیم و بر اساس این مقادیر ۱- و ۰ و ۱ و ۲ می‌خواهیم تصمیم‌گیری کنیم. تصمیم‌گیری‌های زیادی داریم که می‌توانیم با این‌ها انجام دهیم.

If (z==1)

else if (z==0)

Else if (z==-1)

با if می‌توان این کار را انجام داد. اما راه آن خیلی طولانی می‌شود. باید بگویید اگر z=1، یک دستوراتی را در زیر آن انجام دهد. باز elseif را داریم که اگر z=0 بود، باز یک دستوراتی را در زیر آن انجام دهد که ما آن دستورات را ننوشتیم. باز Else if را داریم که اگر مثلاً z=-1 بود یک دستورات دیگری را انجام دهد و الی آخر. در این صورت کار بسیار سخت می‌شود.

اما با دستور Switch:

با دستور Switch می‌گویید که Switch n و برای آن case تعریف می‌کنید. caseها همان اعدادی هستند که در اینجا داریم.

دستور switch
انجام دستور switch در متلب

Case 1 اگر ۱ باشد، case 0 اگر صفر باشد، اگر ۱- باشد و اگر ۲ باشد. دستورها را به سادگی اجرا می‌کند و در آخر end را داریم. در این صورت بسیار ساده‌تر از دستور If به جواب می‌رسیم و توجه داشته باشید که اگر مثلاً Z به صورت  باشد، یعنی اعداد ۶ و ۷ هم به آن اضافه شده باشند و این ۶ و ۷ دقیقاً دستوراتی را داشته باشند که مشابه دستورات اعداد صفر و ۱- باشد، در این صورت نیازی نیست که مانند دستور If بنویسیم که اگر ۶ باشد، این دستورات انجام شود و به راحتی می‌توانیم آن‌ها را اضافه کنیم.

یعنی گفتیم که دستورات ۶ و ۷ دقیقا مانند دستورات ۰ و ۱- است که به همان ۰ و ۱- اضافه می‌کنیم. فقط توجه داشته باشید که این‌ها را حتماً باید داخل کروشه قرار دهیم و با یک «,» و با یک آرایه سلولی گذاشتن، به راحتی این‌ها را به دست آوردیم.

استفاده از دستور switch
استفاده از دستور switch

توجه داشته باشید که در برنامه‌های دیگری مانند زبان‌های C، JS یا Javascript وقتی که caseها را می‌نویسیم، اگر این برنامه‌ها را خوانده باشید، در اینجا ما یک break قرار می‌دهیم. یعنی زیر این‌ها یک break می‌گذاریم که break  کند و به دستور بعدی برود.

اما در برنامه متلب چنین چیزی وجود ندارد و نیاز نیست که این کار را انجام دهید. همچنین مورد دیگری که در اینجا وجود دارد، در مثال قبلی اگر دقت کرده باشید، ما گفتیم که If (x>0) باشد، If(x<0) باشد و … به این‌ها relational operator می‌گویند. یعنی این‌که کوچک و بزرگ هستند می‌توانیم بگوییم کوچک و بزرگ و … به این‌ها کلاً relational operatorها می‌گویند.

مثلاً اگر در اینجا بگویید case <5 را برایتان پیدا کند، چنین چیزی امکان ندارد و تنها چیزی که در Switch است، مساوی است که می‌توانیم با مساوی کارها را انجام می‌دهیم و اگر بخواهیم مساوی هم نیست، از otherwise استفاده می‌کنیم.

ساختار کلی Switch

Switch x

Case c1

Case c2

Otherwise

end

ساختار کلی Switch را در اینجا آوردیم که case c1، case c2 و otherwise را داریم.

در مثال‌های قبلی که   را داشتیم، فرض کنیم اعداد دیگری هم در آن وجود داشت، می‌توانید If (z>1)  بگویید. ولی نمی‌توانستید بگویید Case >1 و چنین چیزی نداریم. در Switch فقط مساوی و otherwise داریم.

در جلسه بعد هم راجع به While و For به همین صورت صحبت می‌کنیم و از جلسه‌ی بعد آن سعی می‌کنیم که مثال‌ها را با هم شروع کنیم و به جلو برویم که شما دقیق و مفهومی این مباحث را متوجه شوید زیرا بسیار مهم هستند.

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

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

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

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