دستور if و switch در متلب
به نام خدا و سلام.
به جلسه هفدهم از سری جلسات آموزش متلب خوش آمدید. آموزش نرم افزار متلب رایگان از وبسایت متلبپلاس ارائه میشود. در این جلسه به عبارتهای شرطی و تصمیم گیری با if و switch در متلب میپردازیم. از این دستورات برای ایجاد یک گزاره شرطی و انجام دستورات درصورت برقراری شرایط در متلب استفاده میشود. از عملگرهای منطقی نیز برای ایجاد شرایط مختلف تصمیم گیری در متلب استفاده میکنیم. گزارههای منطقی، ساختار دستور if در متلب، دستور else، دستور elseif دستور switch و… از مباحث این جلسه هستند.
با متلب پلاس همراه باشید.
فیلم آموزش متلب بصورت پروژه محور (حل 149 نمونه سوال برنامه نویسی❤️) در وبسایت متلبپلاس ارائه شده است. برای مشاهده این پکیج آموزشی روی 👈 حل نمونه سوال برنامه نویسی متلب 👉 کلیک نمائید.
مقدمهای بر گزارههای شرطی در متلب
در این جلسه از آموزش متلب، با دستورات شرطی و تصمیم گیری در متلب آشنا میشویم. اساس دستورات شرطی در متلب را ساختار “اگر… آنگاه…” شکل میدهد. در واقع در سادهترین حالت، یک شرط (پرسش) در مقابل “اگر” (if) قرار میگیرد. پاسخ این شرط به صورت “درست” و “نادرست” است. پس از مشخص شدن پاسخ؛ “آنگاه…” تعیین میشود. مثلا برای جدا کردن اعداد زوج و فرد در دو گروه، از باقیمانده هر عدد بر 2 استفاده میکنیم. اگر باقیمانده عدد بر 2 صفر باشد، زوج و اگر نباشد، فرد است. در واقع تصمیمگیریها، جهت جریان رفتار و اعمال ما را تنظیم میکنند. در برنامهنویسی نیز گزارههای شرطی برای کنترل جریان اجرای برنامهها بوجود آمدند.
به صورت کلی دو ساختار if و switch در متلب برای برنامه نویسی تعبیه شدهاست. تفاوت آنها در “پاسخ” به “پرسش” است. اگر پاسخها معین و ثابت باشند و معمولاً تعداد آنها بیشتر از ۲ باشد از ساختار switch استفاده میکنیم. در غیر این صورت از ساختار if استفاده میکنیم که با انعطاف بیشترش، میتواند ساختار switch را نیز شامل شود. در واقع دستور if در متلب توانایی ایجاد هر شرایط تصمیم گیری را به ما میدهد.
لازم به ذکر است که صحیح بودن یا نبودن عبارت شرطی جلوی if با عبارات منطقی تعیین میشود. عبارت true و false. در جلسه یازدهم با اپراتورهای مقایسه و منطقی در متلب آشنا شدیم.
لطفا نرم افزار متلب را باز کنید و تمام مثالهایی که در ادامه میآیند را شما هم بنویسید!
بهتر است مثالهای این جلسه را در محیط editor متلب بنویسید.
گزارههای منطقی در متلب
دیدیم که جنس دادهها در استفاده از عملگرهای منطقی باید معادل جنس logical باشد. حال قصد داریم با استفاده از این عملگرهای منطقی، جریان اجرای برنامه را کنترل کنیم. برای تصمیم گیری بین چند حالت و شرایط مختلف امکان استفاده از ترکیبهای عطفی و فصلی نیز وجود دارد. در ادامه این شرایط را در مثالها مشاهده خواهیم کرد.
ساختار دستور if در متلب
دستور if در متلب، کاملترین و بهترین دستوری است که با استفاده از آن میتوان ساختار شرطی را پیاده کرد. این دستور میتواند به تنهایی، با else و با elseif همراه باشد. در ادامه هریک از این موارد تشریح میشود.
نکته بسیار مهم در دستور if در متلب وجود دارد که مربوط به شرط مقابل آن است. شرط مقابل دستور if، میتواند برابری (==) و یا نابرابری (کوچکتر و بزرگتری) باشد. درحالی که در ساختار switch فقط شرایط برابری بررسی میشود.
دستور if در متلب
ساختار ساده دستور if در متلب به صورت زیر است. در این ساختار فقط یک شرط بررسی میشود.
if expression statement1 statement2 statement3 .... end
در عبارت فوق، expression شرط مورد بررسی و statement1، statement2 و … دستوراتی اند که در صورت درست بودن شرط، انجام میشوند. لازم به ذکر است که محدودیتی در تعداد این دستورات وجود ندارد. همواره باید در انتهای ساختار if عبارت end نوشته شود.
به یک مثال بسیار ساده از دستور if توجه کنید.
a = 1; if a == 1 disp('a is equal to one') end
پس از اجرا داریم:
a is equal to one
در این مثال، بررسی میشود که آیا a برابر با یک هست یا نه. اگر برابر با یک باشد، برای ما عبارتی را نمایش میدهد. دستور disp هم برای نمایش دادن یک متن بکار میرود. با توجه به اینکه مقدار a برابر با یک است، متن موردنظر نمایش داده شده.
حال فرض کنید برای همه شرایطی که a برابر یک نباشد هم دستوری بنویسیم. در این مواقع از else استفاده میکنیم. در ادامه توضیحات بیشتر ارائه میشود.
دستور else در متلب
وظیفه دستور else در ساختار if این است که عدم برقراری شرایط را بررسی میکند. در واقع دستوراتی که پس از else میآیند، در صورتی که شرط مقابل if صحیح نباشد اجرا میشوند. ساختار کلی دستور else به صورت زیر است.
if expression statement1 statement2 statement3 .... else statement4 statement5 statement6 .... end
توجه کنید که جایگاه else همیشه در انتهای ساختار if است.
مثلا میخواهیم بررسی کنیم که عدد a زوج است یا فرد. کافیست یک حالت را در مقابل if بررسی کنیم و سایر حالات را با else بیان کنیم. چرا که اگر یک عدد زوج نباشد، فرد است. به مثال زیر دقت کنید.
a = 7; if rem(a,2) == 1 disp('a is odd') else disp('a is even') end
پس از اجرا داریم:
a is odd
توجه داریم که دستور rem(a,b) باقیمانده تقسیم a بر b را میدهد. برای بررسی زوج یا فرد بودن نیز از باقیمانده عدد بر 2 استفاده میکنیم. اگر باقیمانده برابر با یک باشد، عدد فرد (odd) و اگر نباشد، زوج (even) است.
دستور elseif در متلب
حال فرض کنید که بخواهیم شرایط دیگری هم به ساختار if اضافه کنیم. وجود شرطهای دیگر را با استفاده از دستور elseif در متلب ایجاد میکنیم. این حالت کاملترین نوع ساختار دستور if در متلب است که در زیر ارائه شدهاست. توجه شود که elseif تنها پس از if و قبل از else به کار میرود.
if expression statement1 statement2 elseif expression statement3 statement4 else statement5 statement6 end
لازم به ذکر است که elseif میتواند چندین بار در این ساختار وجود داشته باشد. برای درک بهتر مثال زیر را با استفاده از ساختار if در متلب ایجاد میکنیم. این مثال برای بررسی مثبت، منفی یا صفر بودن اعداد است. برای این بررسی، 3 حالت مثبت، منفی و صفر داریم. یک حالت را با if، حالت دیگر را با elseif و سایر حالتها را با else ایجاد میکنیم.
a = 7; if a > 0 disp('a is positive') elseif a < 0 disp('a is negative') else disp('a is zero') end
پس از اجرا داریم:
a is positive
میتوانید مقدار a را تغییر دهید تا درستی کد را بررسی کنید.
بررسی شرایط چندگانه با دستور if در متلب
حال حالتی را درنظر بگیرید که شرط مورد بررسی دارای چند حالت باشد. در این شرایط از عملگرهای منطقی (ترکیب فصلی یا عطفی) کمک میگیریم. مثلا بخواهیم وضعیت مثبت، منفی یا صفر بودن دو عدد x و y در یک مسئله را بررسی کنیم. شرایطی که ممکن است داشته باشیم:
- x و y هر دو مثبت باشند. (x >0 && y>0)
- x مثبت و y منفی باشد. (x>0 && y<0)
- x منفی و y مثبت باشد. (x<0 && y>0)
- x و y هردو منفی باشند. (x<0 && y<0)
مثلا در مورد اول، x بزرگتر از صفر و y بزرگتر از صفر است. این و بسیار مهم است. چرا که باید هر دو شرط همزمان برقرار باشد. برای مطالعه جزئیات بیشتر درباره ترکیبهای فصلی یا عطفی به عملگرهای منطقی در متلب مراجعه کنید. کلیک بر روی عبارت سبز شده.
این مسئله را در متلب ایجاد میکنیم. توجه کنید که حالتی که یکی از x یا y صفر باشد (یا هردوی آنها)، را جزو سایر حالات درنظر گرفتهایم.
x = 4; y = -1; if x > 0 && y > 0 disp('x and y are positive') elseif x > 0 && y < 0 disp('x is positive and y is negative') elseif x < 0 && y > 0 disp('x is negative and y is positive') elseif x < 0 && y < 0 disp('x and y are negative') else disp('x = 0 or y = 0') end
پس از اجرا:
x is positive and y is negative
با تغییر مقادیر x و y صحت این کد را بررسی کنید.
دستور switch در متلب
ساختار سوییچ در متلب کاربرد کمتری نسبت به ساختار if دارد، چراکه در این ساختار تنها “برابری” یک مقدار بررسی میشود. نوشتار ساختار switch, case, otherwise در متلب را در کد زیر مشاهده میکنید.
switch switch_expression case case_expression statements case case_expression statements ... otherwise statements end
در مقابل switch مقداری که قرار است برابری آن با دیگر مقدارها بررسی شود، قرار میگیرد. هر گزینهای که برای این برابری در نظر داریم در مقابل case قرار میدهیم. پس از آن دستوراتی که باید در صورت برابری اجرا شوند قرار میگیرند. کلیدواژه otherwise همانند else در ساختار if است و هنگامیکه switch_expression با هیچیک از case_expressionها برابر نباشد دستوراتش اجرا میشوند. در حالت کلی میتوان گفت دو حالت زیر معادل یکدیگرند.
if switch_expression == case_expression1 statements1 elseif switch_expression == case_expression2 statements2 ... else statementsN end
switch switch_expression case case_expression1 statements1 case case_expression2 statements2 ... otherwise statementsN end
اگر switch_expression امکان برابری با بیش از یک case_expression را داشته باشد، فقط statements اولین تطابق اجرا میشود.
همچنین، دستور switch در متلب با دیگر زبانهای برنامه نویسی متفاوت است. در دیگر زبانهای برنامهنویسی اگر از break در statementها استفاده نشود، دستورات همه caseها اجرا میشوند. اما در متلب ساختار switch اینگونه نیست و تنها دستورات مربوط به case صحیح اجرا میشوند.
مثالی که برای بررسی زوج یا فرد بودن یک عدد با دستور if نوشتیم را با دستور switch در متلب مینویسیم.
a = 7; switch rem(a,2) case 1 disp('a is odd') otherwise disp('a is even') end
پس از اجرا:
a is odd
در این مثال ساده، switch_expression برابر با باقیمانده تقسیم عدد a بر 2 است. caseهایی که داریم، یک یا صفر است. اگر عبارت سوییچ برابر با یک باشد، عدد فرد است. در غیر اینصورت این عدد زوج است.
اگر case_expression چند حالت باشد و بخواهیم برابری برای هرکدام از اعضا مجموعه بررسی شود برنامه چگونه خواهد بود؟ برای نشان دادن نحوه انجام اینکار یک مثال میزنیم. میخواهیم برنامهای بنویسیم که شماره ماه را دریافت کند و فصل را خروجی دهد. راهکار به صورت کد زیر خواهد بود.
month = 9; switch month case {1,2,3} disp('Spring') case {4,5,6} disp('Summer') case {7,8,9} disp('Autumn') case {10,11,12} disp('Winter') otherwise error('Invalid Month Number') end
پس از اجرا داریم:
Autumn
عبارت سوییچ، شماره ماه است. حالتهایی که برای این سوییچ داریم، 4 حالت است. شمارههای 1 تا 3 مربوط به بهار، 4 تا 6 تابستان، 7 تا 9 پاییز و 9 تا 12 زمستان است. اگر عددی غیر از این اعداد وارد شود، خطای Invalid Month Number ارائه میشود. توجه داریم که حالتهایی که برای هر case وجود دارد، را درون یک آکولاد نوشتهایم. پس از اجرای این کد خروجی زیر را خواهیم داشت. با تغییر عدد month، خروجیهای مختلف این کد را بررسی کنید.
تمرینات این جلسه
در انتهای این جلسه 3 تمرین متلب مربوط به مباحث این جلسه ارائه شده است. لطفا این تمرینها را حل کرده و با پاسخ آن مقایسه کنید. پاسخ تمرینات متلب این جلسه در کانال تلگرام متلب پلاس منتشر میشود. از آیکونهای سمت راست صفحه میتوانید در این کانال عضو شوید.
تمرین اول
مثال مربوط به بررسی فصل براساس شماره ماه را با استفاده از ساختار if بنویسید. از عملگر ترکیب فصلی (یا) برای کوتاه کردن کد استفاده کنید.
تمرین دوم
با استفاده از ساختار if در متلب، بررسی بخش پذیر بودن یک عدد بر 6 را بنویسید. عددی بر 6 بخش پذیر است که هم بر 2 و هم بر 3 بخش پذیر باشد. برای بررسی بخش پذیری نیز از دستور rem استفاده کنید.
تمرین سوم
سیگنالی داریم که اعداد آن یک، صفر و منفی یک میباشد. با استفاده از ساختار switch در متلب برنامهای بنویسید که برای حالت یک عبارت positive، برای حالت صفر عبارت zero و حالت منفی یک عبارت negative را نمایش دهد.
جمعبندی
خب، جلسه هفدهم از سری جلسات آموزش برنامه نویسی متلب به پایان رسید.این جلسه درباره دستورات شرطی و تصمیم گیری در متلب صحبت کردیم. تصمیم گیری در متلب با استفاده از ساختار if و ملحقات آن (else و elseif) و همچنین switch به ما امکان بررسی شرایط و تصمیم گیری را میدهد. سعی ما انتقال مفاهیم به زبانی ساده و ارائه مثالهای متنوع بود. هدف اصلی تیم متلب پلاس ارائه آموزش متلب به صورت کاملا رایگان است. در انتها چند تمرین برای یادگیری بیشتر به شما واگذار کردیم که پاسخ آنها در کانال تلگرامی متلب پلاس وجود دارد. بی صبرانه منتظر نظرات، سوال و ابهامات شما عزیزان هستیم. سعی میکنیم تا هرگونه سوال یا ابهامی که در این باره دارید را پاسخ دهیم.
توصیه میشود که حتما تمرینات این جلسه را انجام بدید و اگر سوال و ابهامی دارید در بخش نظرات (پایین همین صفحه) به ما بگید. از فهرست سمت راست هم میتونید به بقیه جلسات دسترسی داشته باشید.
2 Comments
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام وقتتون بخیر میشه توی این مثال کمک بنده کنید؟؟
برنامه بنویسید که برای شما بصورت یک صحفه یک سایت عمل کند به اینصورت که از شما یک نام کاربری و پسورد دریافت کند و تشخیص دهد نام کاربری و پسورد صحیح است یا نه؟؟اگر صحیح بود به شما اجازه ورود به برنامه را دهد و در غیر اینصورت پیغام پسورد یا نام کاربری اشتباه است مجددا تلاش کنید چاپ کند…ممنون راهنمایی کنید
سلام و عرض ادب
برای پاسخ به این سوال شما بایستی به مطالب این جلسه (ساختارهای شرطی if) و همچنین مطالب ذکر شده در جلسه چهاردهم (کار با رشته متنی در متلب) تسلط داشته باشید. مواردی که فرمودید (مثلا بررسی درست بودن کاراکترهای ورودی) بطور کامل در جلسه چهاردهم تشریح شده است.
موفق باشید.
لینک دسترسی به جلسه چهاردهم👇
کار با رشته متنی در متلب