در این قسمت از دوره آموزشی متلب در فنولوژی، در مورد عبارات شرطی در متلب صحبت میکنیم. در عبارات شرطی، برنامه نویس باید تعیین کند چه شرطی را میخواهد توسط برنامه ارزیابی کند و در ادامه اگر شرط درست باشد، یک یا مجموعه دستورات کد شرط توسط برنامه اجرا شود و در غیر اینصورت اگر شرط نادرست باشد، کاری انجام نشود یا (به صورت اختیاری) مجموعه دستورات دیگری انجام شود. در این قسمت از آموزش رایگان متلب فنولوژی به طور کامل عبارات شرطی در متلب را بررسی میکنیم و ساختارهای مختلف را به همراه مثالهای کاربردی آموزش میدهیم. با ما همراه باشید.
دیاگرام عبارات شرطی در متلب
در تصویر زیر یک دیاگرام کلی در مورد عبارات شرطی در متلب را مشاهده میکنید که در اکثر زبانهای برنامه نویسی نیز به همین صورت انجام میشود.
انواع عبارات شرطی در متلب
قبل از بررسی کامل عبارات شرطی در متلب ابتدا در جدول زیر میتوانید به صورت کلی ۶ نوع عبارت شرطی به همراه کاربرد آنها را مشاهده کنید.
عبارت شرطی | توضیحات |
if … end | شامل یک عبارت شرط بولین (صحیح یا غلط) و یک کد شرط (جملاتی که باید اجرا شوند) |
if … else…end | مانند حالت قبل است با این تفاوت که اگر شرط اشتباه باشد، جملات بعد از else اجرا میشوند. |
if … elseif …elseif…else…end | ترکیبی از حالت اول و دوم است با این تفاوت که میتوان با عبارات elseif چندین شرط دیگر را نیز بررسی نمود و این حالت برای بررسی متغیرهای زیاد مناسب است. |
nested if | برای استفاده از if تو-در-تو که میتوانید از دستورات if یا elseif درون سایر دستورات if یا elseif استفاده کنید. |
switch…case…case…end | با استفاده از این دستور میتوانید یک متغیر را تست کنید و مقدار آن را با یک لیست از مقادیر شرط مقایسه کنید و اگر برابر هر کدام از مقادیر بود، فرمان خاصی اجرا شود. |
nested switch | به طور مشایه میتوانید از switch های تو-در-تو استفاده کنید. |
if در متلب
همانطور که در توضیحات اشاره شد، این دستور شامل یه نوع داده boolean جلوی if است که شرط مورد نظر بوده و در ادامه مجموعه جملاتی (عبارات موجود در بین if و end) میآیند که باید در صورت صحت شرط اجرا شوند. اگر شرط نادرست باشد، دستورات بعد از end اجرا خواهد شد. در زیر سینتکس ابتدائی عبارات شرطی در متلب را مشاهده میکنید:
1 2 3 4 |
if <expression> % دستورات شرط <statements> end |
مثال:
یک فایل اسکریپت با نام زیر در متلب ایجاد کنید:
1 2 3 4 5 6 7 8 |
a = 10; %بررسی شرط اندازه a با دستور if if a < 20 % اگر شرط برقرار بود عبارت زیر را نمایش بده fprintf('a is less than 20\n' ); end fprintf('value of a is : %d\n', a); |
با اجرای فایل نتایج زیر را خواهید دید:
1 2 |
a is less than 20 value of a is : 10 |
if else در متلب
عبارت if میتواند شامل یک عبارت else به صورت اختیاری باشد که اگر شرط نادرست بود اجرا شود. اگر شرط درست باشد بلوک اول (پس از if) و اگر شرط نادرست باشد بلوک دوم (پس از else) اجرا میشود. در ادامه سینتکس مذکور را مشاهده میکنید:
1 2 3 4 5 6 7 |
if <expression> % دستورات شرط <statement(s)> else <statement(s)> % اگر شرط نادرست باشد end |
مثال:
یک فایل اسکریپت با کد زیر اجرا بنویسید:
1 2 3 4 5 6 7 8 9 10 11 |
a = 100; % شرط را چک کن if a < 20 % اگر شرط درست بود: fprintf('a is less than 20\n' ); else % اگر شرط اشتباه بود: fprintf('a is not less than 20\n' ); end fprintf('value of a is : %d\n', a); |
نتایج کد بالا به شکل زیر است:
1 2 |
a is not less than 20 value of a is : 100 |
if elseif else در متلب
عبارات شرطی میتوانند شامل یک یا چندین دستور دلخواه elseif باشند که در ادامه میتواند با یک else پایانی همراه باشد. همانطور که اشاره شد استفاده از این دستور برای بررسی شرایط متفاوت یک متغیر بسیار کاربرد دارد. در ادامه برخی نکات مربوط به این سینتکس را بررسی میکنیم و سپس سینتکس اصلی این عبارات شرطی در متلب را مشاهده میکنید.
- یک عبارت if میتواند هیچ یا یک عبارت else داشته باشد که باید پس از همه elseif ها بیاید.
- یک عبارت if میتواند هیچ یا چندین عبارت elseif داشته باشد که باید قبل از else بیاید.
- اگر یکی از elseif ها درست باشد، دیگر سایر elseif ها یا else اجرا نمیشوند.
مشاهده سینتکس:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
if <expression 1> % اگر عبارت ۱ درست باشد <statement(s)> elseif <expression 2> % اگر عبارت ۲ درست باشد <statement(s)> Elseif <expression 3> % اگر عبارت ۳ درست باشد <statement(s)> else % اگر هیچکدام درست نباشند <statement(s)> end |
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
a = 100; if a == 10 fprintf('Value of a is 10\n' ); elseif( a == 20 ) fprintf('Value of a is 20\n' ); elseif a == 30 fprintf('Value of a is 30\n' ); else fprintf('None of the values are matching\n'); fprintf('Exact value of a is: %d\n', a ); end |
نتیجه:
1 2 |
None of the values are matching Exact value of a is: 100 |
if تو-در-تو در متلب
این نوع از عبارات شرطی در متلب همواره مجاز است و شما میتوانید طبق سینتکس زیر از چندین if (و یا else و elseif) در دستورات if دیگر استفاده کنید:
1 2 3 4 5 6 |
if <expression 1> % Executes when the boolean expression 1 is true if <expression 2> % Executes when the boolean expression 2 is true end end |
مثال:
1 2 3 4 5 6 7 8 9 10 11 |
a = 100; b = 200; if( a == 100 ) if( b == 200 ) fprintf('Value of a is 100 and b is 200\n' ); end end fprintf('Exact value of a is : %d\n', a ); fprintf('Exact value of b is : %d\n', b ); |
نتیجه:
1 2 3 |
Value of a is 100 and b is 200 Exact value of a is : 100 Exact value of b is : 200 |
Switch در متلب
بلوک switch به طور معین یکی از مجموعه دستورات از گزینههای مختلف را اجرا میکند. هر گزینه با یک جمله در case مشخص میشود. عبارت سوئیچ (switch_expression) ارزیابی شده یک نوع داده اسکالر یا رشته است و عبارت کیس (case_expression) یک نوع داده اسکالر، رشته یا آرایه سلولی از اسکالرها یا رشتهها است. Case ها یکی یکی چک میشوند تا جایی که یکی از آنها درست باشد (در این صورت دستورات آن case اجرا شده و بلوک switch خارج میشود). بلوک otherwise اختیاری است و اگر هیچ کیسی درست نباشد اجرا میشود. در ادامه شروط درست بودن یک کیس را بررسی میکنیم:
- برای اعداد: eq(case_expression,switch_expression)
- برای رشتهها: strcmp(case_expression,switch_expression)
- برای اشیائی که از دستور روبرو پشتیبانی میکنند: eq(case_expression,switch_expression)
- برای آرایههای سلولی عبارت کیس که حداقل یکی از اعضای آن با عبارت سوئیچ مطابقت داشته باشد.(طبق فرمتی که در بالا برای اعداد، رشتهها و اشیا گفت شد.)
سینتکس switch در متلب:
1 2 3 4 5 6 7 8 9 10 |
switch <switch_expression> case <case_expression> <statements> case <case_expression> <statements> ... ... otherwise <statements> end |
مثال:
یک فایل اسکریپت مانند زیر ایجاد کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
grade = 'B'; switch(grade) case 'A' fprintf('Excellent!\n' ); case 'B' fprintf('Well done\n' ); case 'C' fprintf('Well done\n' ); case 'D' fprintf('You passed\n' ); case 'F' fprintf('Better try again\n' ); otherwise fprintf('Invalid grade\n' ); end |
نتیجه:
1 |
Well done |
switch تو-در-تو در متلب
میتوان از سوئیچ تو در تو نیز مانند if تو در تو استفاده کرد. حتی اگر مقادیر کیسهای درونی و بیرونی یکسان باشد، مجاز است. در زیر سینتکس مربوطه را مشاهده کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
switch(ch1) case 'A' fprintf('This A is part of outer switch'); switch(ch2) case 'A' fprintf('This A is part of inner switch' ); case 'B' fprintf('This B is part of inner switch' ); end case 'B' fprintf('This B is part of outer switch' ); end |
مثال:
کدهای زیر را در یک فایل اسکریپت بنویسید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
a = 100; b = 200; switch(a) case 100 fprintf('This is part of outer switch %d\n', a ); switch(b) case 200 fprintf('This is part of inner switch %d\n', a ); end end fprintf('Exact value of a is : %d\n', a ); fprintf('Exact value of b is : %d\n', b ); |
1 2 3 4 |
This is part of outer switch 100 This is part of inner switch 100 Exact value of a is : 100 Exact value of b is : 200 |