مشاوره و آموزش تحصیلی ریسمونک
0

حلقه if در متلب

در این مطلب در مورد حلقه if در متلب صحبت می‌کنیم. بدین منظور ابتدا به صورت مختصر کار با متلب را توضیح می‌دهیم و سپس در مورد چگونگی نوشتن یک کلین کد در متلب صحبت می‌کنیم. در بخش بعدی این نوشتار در مورد حلقه‌های شرطی در متلب صحبت خواهیم کرد و حلقه if در متلب را توضیح می‌دهیم. بخش پایانی این نوشتار به معرفی دوره‌های آموزشی متلب در ریسمونک خواهد پرداخت.

 

شروع با نرم افزار متلب چگونه است؟

صفحه ابتدایی نرم افزار متلب
تصویر ۱: صفحه ابتدایی نرم افزار متلب

وقتی متلب را باز می‌کنید به پنجره‌ای مانند تصویر بالا برخورد می‌کنید که در تصویر قسمت‌های مختلف این صفحه نمایش داده شده است. یکی از ویژگی‌های متلب این است که می‌تواند نحوه قرار گیری و ساختار شبکه را تغییر دهید. در صفحه Command ممکن است با دو نوع علامت در صفحه خالی Command مواجه شوید که به صورت زیر هستند:

<<در این حالت شما ورژن کامل متلب را دارید.
EDU>در این حالت ورژن آموزشی متلب در اختیار شما است.

اما نوتیشن رایج در صفحه Command همان >> است که در ادامه ما نیز از این رویه استفاده می‌کنیم.

استفاده از متلب به عنوان ماشین حساب

به عنوان یک مثال از محاسبات ساده در متلب تنها لازم است عبارتی که قصد دارید محاسبه کنید را در پنجره متلب تایپ کنید. برای مثال عبارت ساده

را می‌خواهیم محاسبه کنیم. بدین منظور کافی است عبارت را در صفحه دستورات یا cammand تایپ کنید و با استفاده از کلید Enter جواب را در خط بعد مشاهده می‌کنید.

۲+۱*۳
ans = 
      ۷

همان طور که مشاهده می‌کنید اگر برای جواب متغیری تعریف نشده باشد، متلب به صورت پیش فرض از ans به عنوان متغیری که جواب را در آن ذخیره کند، استفاده خواهد کرد. ولی اگر برای عبارت خود، یک متغیر مانند x تعریف کنید جواب نهایی در x ذخیره می‌شود، یعنی داریم:

>> x=۱+۲*۳
x = 
   ۷

از x می‌توان به عنوان پارامتری که مقدار آن مشخص است مجدداً استفاده کرد و بدین ترتیب برای مثال داریم:

>> ۴*x
ans =
      ۲۸٫۰۰۰۰

بدین ترتیب می‌توان گفت علامت‌های

به ترتیب چهار عمل اصلی ریاضیات را در متلب انجام می‌دهد. برای اتمام یک session در متلب با تایپ کردن quit نرم افزار متلب بسته می‌شود یا می‌توانید مانند تمام پنجره‌ها این برنامه رو نیز با کلیک بر روی ضربدر قرمز ببندید.

Overwriting در متلب

هنگامی که یک متغیر را در متلب تعریف می‌کنید، آن متغیر مقداری که شما تعریف کرده‌اید را خواهد گرفت. اگر مجدداً روی متغیر عملیات جبری انجام دهید در حافظه متلب آخرین مقدار متغیر باقی می‌ماند. این موضوع را در مثال زیر می‌توانید ببینید:

>> t=۵;
>> t=t+۱
t=
 ۶

اگر دقت کنید در معادله بالا مقدار ۶ برای متغیر t در نظر گرفته شده است و این مقدار نهایی در نهایت برای محاسبات دیگر در نظر گرفته می‌شود.

پیام خطا

اگر یک عبارت را به اشتباه در متلب بنویسید، یک پیام خطا برای شما نمایش داده خواهد شد. برای مثال در کد زیر علامت * را ننوشته‌ایم.

>> x = ۱۰;
>> ??? ۵x
       |
Error: Unexpected MATLAB 
expresion.

تصحیح خطا در متلب

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

) در صفحه کیبورد خود جستجو کنید و از این روش برای تصحیح خطای رخ داده در دستور خود استفاده کنید.

نوشتن کد تمیز یا کلین کد در متلب چگونه است؟

دلایل زیادی وجود دارد که چرا کدی که فقط کار می‌کند به اندازه کافی خوب نیست. برای پاسخ به این سوال فهرست زیر را ببینید:

  • رفع اشکالات، افزودن ویژگی‌ها و کار با کد در تمام جنبه‌های دیگر وقتی کد تمیز باشد بسیار آسان‌تر است.
  • تصور کنید شخص دیگری به کد شما نگاه می‌کند و سعی می‌کند بفهمد که کد شما چه کاری انجام می‌دهد. در صورتی که کد شما اصطلاحاً کلین کد نباشد، آن فرد زمان زیادی را صرف می‌کند تا کد شما را درک کند.
  • ممکن است اکنون برای هدف خاصی برنامه نویسی و کد نویسی کنید و به نظر برسد هیچ گاه دیگر به کدی که نوشته‌اید باز نخواهید گشت. با این حال تجربه نشان داده است که عملاً هیچ کار محاسباتی وجود ندارد که فقط یک بار در زندگی برنامه‌نویسی خود با آن مواجه شوید. تصور کنید که یک هفته، یک ماه یا یک سال بعد به کد خود نگاه می‌کنید: آیا هنوز می‌توانید بفهمید که کد شما چگونه کار می‌کند؟ کلین کد به شما کمک می‌کند که همواره بفهمید کد شما چگونه کار می‌کند.

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

کد کثیف در متلب
تصویر ۲:  کد بالا از نظر ساختار متلب کاملاً صحیح است اما تمام قوانین نوشتن کد نادیده گرفته شده است، آیا می‌توانید این تابع چه کاری انجام می‌دهد؟

چند تابع در یک فایل

این یک باور رایج و نادرست است که متلب نمی‌تواند با چندین تابع در هر فایل کار کند. حقیقت این است که ممکن است بیش از یک تابع در یک فایل وجود داشته باشد، اما تنها اولین تابع در فایل برای توابع موجود در فایل‌های دیگر یا خط فرمان قابل مشاهده است. از این نظر، آن دسته از توابع در یک فایل که موقعیت تابع اول را ندارند می‌توانند به عنوان کمک کننده برای تابع اول در کد عمل کنند. هنگام نوشتن کد، به این فکر کنید که آیا یک تابع خاص واقعاً فقط یک کمک کننده تابع اصلی است یا خیر، آیا می‌توان آن را از جای دیگری فراخوانی کرد؟ با انجام این کار، می‌توانید از آشفتگی و به هم ریختگی ده‌ها M فایل در پوشه برنامه خود جلوگیری کنید.

تابع در کدنویسی با متلب
تصویر ۳: این کد شامل سه تابع است. این روش نوشتن زمانی مفید است که helperFun1 و helperFun2 فقط برای topFun مورد نیاز هستند.

زیر تابع‌ها

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

توابع کمکی در متلب
تصویر ۴: در تصویر با کادر قرمز رنگ، به صورت روتین fun1، fun2، helpFun1 و helpFun2 به ترتیب پشت سر هم قرار گرفته‌اند و هیچ سلسله مراتبی قابل مشاهده نیست. اما در تصویر با کادر سبز رنگ به وضوح مشخص است که helpFun به fun1 کمک می‌کند و fun2 ارتباطی با fun1 ندارد.

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

نام متغیرها و توابع

یکی از عناصر کلیدی برای یک کد قابل اطمینان، استفاده از یک طرح کلی و ثابت برای نامگذاری توابع است. از آغاز پیدایش زبان‌های برنامه نویسی در دهه ۱۹۵۰، طرح‌هایی برای نامگذاری توسعه یافته یا از بین رفته‌اند، اما به طور کلی این طرح‌ها در معرض تکامل هستند. با این حال، برخی از قوانین کلی وجود دارد که در طول سال‌ها در انواع زمینه‌های مختلف مفید واقع شده‌اند. چند مورد از مفیدترین اصول نامگذاری در اینجا بیان شده است:

  • نام متغیرها نشان می‌دهد که متغیر چه کاری انجام می‌دهد. بدون شک این اولین و مهمترین قاعده در نامگذاری متغیرها است و متضمن چندین چیز است. برای مثال وقتی متغیر دارای مقدار ۲٫۷۱۸۱۲۸ است نام آن را pi نمی‌گذارید. همچنین در ریاضیات و علوم کامپیوتر برخی از نام‌ها به مفاهیم خاص در علوم مرتبط می‌شود که در جدول (۱) تعدادی از قراردادهای پرکاربرد فهرست شده‌اند.
نام متغیرکاربرد معمول متغیر
اندازه عددی که معمولاً برای نشان دادن سایز یک ماتریس استفاده می‌شود.
مقادیر عددی و همچنین اندیس‌های یک حلقه
مقادیر حقیقی
مقدار مختلط یا محور z
مقدار مختلط یا ثابت
مقدار زمان
عدد اویلری یا بردار یکه
نام توابع اصلی
پارامتر گسسته سازی فضایی (در تحلیل عددی)
پارامترهای حقیقی و کوچک
زاویه یا پارامتر
پارامترهای گسسته زمانی
پارامتر
بردار
ماتریس
قسمت سمت راست یک سیستم توابع
  • نامگذاری کوتاه و غیر توصیفی در محاسبات ریاضی کاملاً رایج است زیرا نام متغیرها در محاسبات دستی به سختی بلندتر از یک کاراکتر هستند، این مورد در جدول بالا نیز مشخص است. برای اینکه بتوان بین کمیت‌های برداری و ماتریس تمایز قائل شد، در برنامه نویسی و همچنین ریاضیات معمول است که ماتریس‌ها را با حروف بزرگ و بردارها و اسکالرها را با حروف کوچک نشان دهیم.
نامگذاری متغیرها در متلب
تصویر ۵: کادر قرمز رنگ یک نمونه از نامگذاری غیرمعمول و کادر سبز نامگذاری رایج در متلب است.
  • نامگذاری طولانی و توصیفی برای متغیرها بیشتر در C++ رایج است و معمولاً با حروف کوچک شروع می‌شود. همچنین در نامگذاری طولانی متغیرها معمولاً از خط تیره برای فاصله بین کلمات استفاده می‌شود اما باید دقت کرد که در متلب خط تیره بین کلمات به عنوان علامت تفاضل در نظر گرفته می‌شود. هر دو مورد در مثال زیر نمایش داده شده‌اند:

linearity , distanceToCircle , figureLabel

linearity , distance_to_circle , figure_label

  • نام متغیرهای منطقی اگر قرار باشد این متغیر فقط مقادیر ۰ یا ۱ را برای نشان دادن درست یا نادرست بودن عبارت نمایش دهد، باید بیانگر این موضوع باشد. یک تکنیک متداول این است که نام متغیر را با is و یک روش کمتر متداول استفاده از flag است. این موارد در ادامه نمایش داده شده‌اند:

isPrime , isInside , flagCircle

تورفتگی در کدنویسی

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

تو رفتگی در کد
تصویر ۶: در کادر قرمز رنگ عدم ایجاد تو رفتگی بین سطوح حلقه تشخیص اینکه حلقه اول به کجا ختم می‌شود را دشوار می‌کند. با ایجاد تو رفتگی، کد بسیار واضح‌تر به نظر می‌رسد.

معمولاً هر چیزی در یک حلقه یعنی یک تابع، یک شرط، یک دستور سوئیچ و غیره را با ایجاد تورفتگی در کد ایجاد می‌کنیم. بسته به شرایط مختلف تورفتگی را می‌توان با دو، سه یا چهار فاصله یا یک tab ایجاد کرد. به عنوان یک قاعده کلی، تورفتگی باید تمایز بصری واضحی داشته باشد در حالی که از تمام فضای شما در خط استفاده نمی‌کند. این موضوع را در پاراگراف بعدی مشاهده می‌کنید.

طول خط

عملاً هیچ محدودیتی برای میزان نوشتن روی یک خط کد متلب وجود ندارد. در واقع، می‌توانید هر کد متلب را با جدا کردن دو دستور با یک علامت ؛ یا ، به یک خط تبدیل کنید و هیچ خط دیگری بین آن‌ها تولید نکنید. با این حال، یک خط با یک میلیون کاراکتر به طور بالقوه چندان خوانا نخواهد بود. اما، به صورت کلی سوال این است که چند کاراکتر را می‌توانید در یک خط قرار دهید بدون اینکه محتوای آن را مبهم کنید؟

طول خط در متلب
تصویر ۷: کادر سبز رنگ طول خط ۷۵ کاراکتری در متلب و کادر قرمز طول خط بلندتر از ۷۵ کاراکتر است.

این موضوعی است که باید در مورد آن بحث کرد. به صورت معمول تعداد کاراکتر روی یک خط معمولاً بین ۷۰ تا ۸۰ کاراکتر است. ویرایشگر متن متلب، ۷۵ کاراکتر در هر خط را پیشنهاد می‌دهد. بدین ترتیب، فرد مطمئن است که برای نمایش کد بدون شکستگی خط به صورت مصنوعی یا اسکرول کردن افقی در ویرایشگر، نیازی به داشتن یک نمایشگر عریض نیست. البته ممکن است گاهی اوقات طول خطوط شما بیشتر از ۷۵ کاراکتر باشد، در این مواقع از علامت … استفاده می‌شود تا نشان داده شود که ادامه خط در سطر بعدی نوشته شده است.

فاصله و تراز

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

شکست معنادار در متلب
تصویر ۸: شکست خط غیر معنایی خوانایی کد را کاهش می‌دهد. در تصویر با کادر قرمز نه شکل ماتریس و نه تعداد جمع در عبارت دوم مشخص نیست. در تصویر با کادر سبز شکل و محتویات ماتریس و همچنین عناصر عبارت دوم بلافاصله برای برنامه نویس قابل مشاهده است.

فاصله در عبارات

این ویژگی استفاده از فاصله در عبارات است. قانون این موضوع قرار دادن فاصله در جایی است که در سینتکس متلب تعریف شده است. این موضوع به خوبی در تصویر زیر نشان داده شده است:

فاصله در عبارات
تصویر ۹: عدم وجود فاصله بین جمع دو عدد در کادر قرمز نتیجه ۱۱/۱۲ را به عنوان خروجی می‌دهد در حالی که با ایجاد فاصله جواب به ۵٫۵ تغییر می‌کند.

اعداد جادویی

هنگام کدنویسی، گاهی اوقات یک مقدار را ثابت در نظر می‌گیرید زیرا قصد ندارید آن را تغییر دهید. به عنوان مثال، برنامه‌ای را در نظر بگیرید که تعیین می‌کند آیا یک نقطه داده شده خارج از یک دایره با شعاع ۱ با مرکز (۱،۱) و به طور همزمان در داخل مربعی به طول یال ۲ قرار دارد یا نه، که دایره در سمت راست مربع قرار دارد.

پس از نوشتن کد، برنامه شامل چند ۱ است که مشخص نیست که آیا آن‌ها متمایز هستند یا به یک مقدار یکسان اشاره دارند. این اعداد رمزگذاری شده اغلب اعداد جادویی نامیده می‌شوند، زیرا آن‌ها کاری را که قرار است انجام دهند انجام می‌دهند، اما نمی توان به راحتی دلیل آن را تشخیص داد. در همین برنامه اگر بخواهید شعاع دایره را تغییر دهید، تشخیص و تغییر ۱ هایی که به شعاع اشاره دارند دشوار خواهد بود. راه حل این موضوع در کادر سبز رنگ نمایش داده شده است.

اعداد جادویی در متلب
تصویر ۱۰: در کادر قرمز رنگ بلافاصله مشخص نیست که آیا یک‌های مختلفی که در کد وجود دارند به یک کمیت اشاره دارند یا خیر. به این اعداد اعداد جادویی می‌گویند. در کادر سبز رنگ مفهوم شعاع مشخص است و می‌توان فوراً مشاهده کرد و مقدار آن را به راحتی تغییر داد.

توضیحات

با ارزش ترین کاراکتر برای کلین کد متلب استفاده از کاراکتر %، برای نشان دادن توضیحات مربوط به کد است. همه نشانه‌های بعد از کاراکتر درصد در همان خط تاثیری در کد ندارند و به عنوان توضیحات کد در نظر گرفته می‌شوند.

عناصر ساختاری

همیشه مفید است که ابتدا و انتهای تابع نه تنها با کلمات کلیدی مربوطه نشان داده شود، بلکه با چیزی قابل مشاهده‌تر مشخص شوند. برای جداسازی ظاهری بخش‌های متمایز کد، علائمی را با کاراکترهای #، = یا – در نظر می‌گیریم. این علائم به عنوان مثال زمانی که چندین تابع در یک فایل سورس وجود دارد، یا زمانی که یک حلقه for وجود دارد که روی تعداد زیادی از خطوط اثر می‌گذارد که دیگر به راحتی نمی‌توانید دستور end را پیدا کنید، بسیار مفید است.

تقسیم کردن قسمت‌های مختلف کد
تصویر ۱۱: قسمت‌های مختلف کد از یکدیگر با توضیحات متفاوت جدا شده‌اند و در نتیجه کد خوانا است.

استفاده از پرانتز و براکت

لیست اولویت عملگرها در متلب به صورت مشخص و واضح وجود دارد که می‌توانید اطمینان حاصل کنید که برای هر عبارت در متلب، که شامل هر عملگر یونری یا باینری است، یک روش منحصر به فرد برای ارزیابی وجود دارد. به صورت طبیعی، متلب ضرب (*) را قبل از جمع (+) بررسی می‌کند، اما ممکن است زمانی که صحبت از عملگرهای منطقی یا ترکیبی از عملگرهای عددی و منطقی به میان می‌آید، این موارد کمتر واضح باشند.

با این حال هر زمانی که الویت‌ها را از خاطر برده بودید یا از آن اطمینان نداشتید می‌توانید یک جفت براکت را در محل مورد نظر قرار دهید. این براکت‌ها اگر چه ممکن است غیر ضروری باشند، اما از ایجاد نتیجه نادرست جلوگیری می‌کند. همچنین الویت عملگرها به صورت جدول زیر داده می‌شوند:

استفاده از پرانتز در کد
تصویر ۱۲: بدون دانستن اینکه متلب ابتدا عملگر && یا عملگر || را ارزیابی می‌کند، نمی‌توان مقدار isGood را در کادر قرمز پیش‌بینی کرد. با قرار دادن پرانتزهای (غیر ضروری) در کادر سبز رنگ، نتیجه مشخص است.
  1.  پرانتز ()
  2. ترانهاده (.’)، توان (.^)، ترانهاده مزدوج مختلط(‘)، توان ماتریس (^)
  3. مقدار مثبت یک کمیت (+)، مقدار منفی یک کمیت (-)، نفی منطقی (~)
  4. ضرب (.*)، تقسیم راست (./)، تقسیم چپ (.\)، ضرب ماتریس (*)،
    تقسیم سمت راست ماتریس (/)، تقسیم ماتریس چپ (\)
  5. جمع (+)، تفریق (-)
  6. عملگر کولون (:) که برای ایجاد بردار، ایجاد آرایه پایین و تکرار در متلب استفاده می‌شود.
  7. کمتر از (<)، کمتر یا مساوی (<=)، بزرگتر از (>)، بزرگتر یا مساوی
    (>=)، برابر با (==)، غیرمساوی با (~=)
  8. عملگر و (&)
  9. عملگر یا (|)
  10. عملگر و (&&)
  11. عملگر یا (||)

خطاها و هشدارها

مهم نیست که چقدر دقیق کد خود را طراحی می‌کنید، زیرا همواره کاربرانی وجود خواهند داشت که می‌توانند با دادن داده‌های ورودی بد جواب‌های اشتباهی از برنامه بگیرند. در حقیقت، این در محاسبات عددی غیرمعمول نیست که کارها اساساً اشتباه پیش می‌روند.

برای مثال شما برنامه‌ای می‌نویسید که یک فرآیند تکرار شونده را روی سیستم معادلات خطی که به صورت

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

در آن بازه نباشد رفتار تابع نیز غیرمعمولی است.

در این مواقع باید کاربر را با استفاده از عملگرهای ftprintf () یا disp () متوجه اشتباه صورت گرفته در برنامه کنید. با این حال روش بهتر این است که از warning () یا error () استفاده کنید. تفاوت دو دستور آخری با ابتدایی در این است که به محض اجرای دستورهای error یا warning اجرای برنامه متوقف می‌شود.

استفاده از دستور warning
تصویر ۱۳: تکرار روی یک متغیر r که قرار است بعد از تعدادی تکرار کوچکتر از tol باشد.در کد در کادر قرمز رنگ اگر شرط کوچکتری رخ ندهد، برنامه هرگز از حلقه هرگز خارج نمی‌شود و CPU را برای همیشه اشغال می‌کند. در کادر سبز رنگ حداکثر تعداد تکرار وجود دارد. وقتی تعداد تکرارها به آن تعداد می‌رسد و شرط کوچکتر بودن ایجاد نمی‌شود با یک دستور اخطار از حلقه خارج می‌شویم.

سوییچ کردن حالت‌ها

دستورهای سوییچ زمانی استفاده می‌شوند که غیر از آن مجبور باشید یک دستور شرطی را با چندین دستور if دیگر بنویسید. آن‌ها همچنین زمانی که شرط ها برای مقایسه عبارت‌های string باشند، بسیار محبوب هستند.

دستورهای شرطی و حلقه if در متلب

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

% Generate a random number
a = randi(100, 1);

% If it is even, divide by 2
if rem(a, 2) == 0
    disp('a is even')
    b = a/2;
end

عبارت‌های if می‌توانند شامل گزینه‌های جایگزین نیز باشند که این مهم با استفاده از کلمات کلیدی elseif یا else ایجاد می‌شود. برای مثال داریم:

a = randi(100, 1);

if a < 30
    disp('small')
elseif a < 80
    disp('medium')
else
    disp('large')
end

از طرف دیگر، هنگامی که می‌خواهید برابری یا تساوی را در برابر مجموعه‌ای از مقادیر مشخص آزمایش کنید، از دستور switch استفاده کنید. این موضوع را در مثال زیر نشان داده‌ایم:

[dayNum, dayString] = weekday(date, 'long', 'en_US');

switch dayString
   case 'Monday'
      disp('Start of the work week')
   case 'Tuesday'
      disp('Day 2')
   case 'Wednesday'
      disp('Day 3')
   case 'Thursday'
      disp('Day 4')
   case 'Friday'
      disp('Last day of the work week')
   otherwise
      disp('Weekend!')
end

برای هر دو دستور switch و if در متلب، کد مربوطه به محض اینکه شرایط لازم در دستور ایجاد می‌شود از حلقه خارج می‌شود. هر عبارت شرطی به کلمه کلیدی end نیز نیاز دارد. به طور کلی هنگامی که مقادیر زیادی از مقادیر گسسته و شناخته شده را دارید، خواندن دستورات سوئیچ راحت‌تر از if است. با این حال، شما نمی‌توانید نابرابری را توسط دستور سوئیچ نشان دهید، یعنی نمی‌توانید برنامه زیر را توسط دستور switch اجرا کنید:

yourNumber = input('Enter a number: ');

if yourNumber < 0
    disp('Negative')
elseif yourNumber > 0
    disp('Positive')
else
    disp('Zero')
end

حلقه if در متلب

کد مربوط به دستور حلقه if در متلب، زمانی که شرط درست باشد پایان می یابد. شکل کلی حلقه if در متلب به صورت زیر است:

if expression
    statements
elseif expression
    statements
else
    statements
end

سه عضو اصلی حلقه if در متلب عبارت از if، عبارت یا statment و end است. همچنین نوشتن دستورهای elseif و else اختیاری هستند. در ادامه چندین مثال مربوط به حلقه if در متلب را بررسی می‌کنیم. این مثال‌ها قابل اجرا در صفحه command یا دستورات است.

در مثال اول یک ماتریس یکه با تعداد ۴ سطر و ۶ ستون ایجاد می‌کنیم و سپس با استفاده از حلقه if در متلب قطر اصلی را ۲ و به قطر همسایه قطر اصلی مقدار

را می‌دهیم. بدین ترتیب داریم:

>> nrows = 4;
ncols = 6;
A = ones(nrows,ncols);
>> for c = 1:ncols
    for r = 1:nrows
        
        if r == c
            A(r,c) = 2;
        elseif abs(r-c) == 1
            A(r,c) = -1;
        else
            A(r,c) = 0;
        end
        
    end
end
A

A =

     ۲    -۱     ۰     ۰     ۰     ۰
    -۱     ۲    -۱     ۰     ۰     ۰
     ۰    -۱     ۲    -۱     ۰     ۰
     ۰     ۰    -۱     ۲    -۱     ۰

برای مقایسه مقادیر یک بردار با یک حد مشخص نیز به صورت زیر می‌توان با استفاده از حلقه if در متلب این مقایسه را انجام داد:

>> limit = 0.75;
A = rand(10,1)

A =

    ۰٫۸۱۴۷
    ۰٫۹۰۵۸
    ۰٫۱۲۷۰
    ۰٫۹۱۳۴
    ۰٫۶۳۲۴
    ۰٫۰۹۷۵
    ۰٫۲۷۸۵
    ۰٫۵۴۶۹
    ۰٫۹۵۷۵
    ۰٫۹۶۴۹

>> if any(A > limit)
    disp('There is at least one value above the limit.')
else
    disp('All values are below the limit.')
end
There is at least one value above the limit.

سایز دو ماتریس دلخواه که تعریف کردیم را نیز می‌توانیم با استفاده از عبارت isequal و استفاده از حلقه if در متلب به صورت زیر مقایسه کنیم و داریم:

>> A = ones(2,3);
B = rand(3,4,5);
>> if isequal(size(A),size(B))
   C = [A; B];
else
   disp('A and B are not the same size.')
   C = [];
end
A and B are not the same size

استفاده از strcmp برای مقایسه کاراکترهای بردار استفاده می‌شود. معمولاً استفاده از == برای آزمایش برابر بودن زمانی که بردارهای کاراکتر اندازه‌های متفاوتی دارند، منجر به خطا می‌شود.

>> reply = input('Would you like to see an echo? (y/n): ','s');
if strcmp(reply,'y')
  disp(reply)
end

برای مشخص کردن این موضوع که آیا یک مقدار در یک بازه مشخص قرار می‌گیرد یا خیر نیز می‌توان از حلقه if در متلب استفاده کرد و بدین ترتیب داریم:

>> x = 10;
minVal = 2;
maxVal = 6;

>> if (x >= minVal) && (x <= maxVal)
    disp('Value within specified range.')
elseif (x > maxVal)
    disp('Value exceeds maximum value.')
else
    disp('Value is below minimum value.')
end

Value exceeds maximum value.

به عنوان آخرین مثال از حلقه if در متلب می‌خواهیم این حلقه را در یک تابع در متلب استفاده کنیم. در این مثال کاربر مقدار x را به متلب می‌دهد و با اجرای تابع compare مشخص می‌شود که مقداری که داده‌ایم مثبت، منفی یا صفر است. تابع compare به صورت زیر تعریف می‌شود:

function com = compare(x)

if x > 0
   disp('The number is positive')
elseif x == 0
    disp('The number is zero')
else
    disp ('Kidding! obviously it is negative:)')
end
com=x;
end

برای اجرای برنامه به صورت زیر در صفحه command عمل می‌کنیم و داریم:

>> z=6;
>> com=compare(z)

 

جمع‌بندی

در این نوشتار در مورد حلقه if در متلب صحبت کردیم. بدین منظور ابتدا توضیحات مختصری در مورد شروع کار با متلب بیان کردیم، سپس نکات مهم در نوشتن یک کد تمیز در متلب را ارائه دادیم و در نهایت عبارات شرطی در متلب را معرفی کردیم و مثال‌های مختلفی از حلقه if در متلب را در صفحه دستورات و به صورت تابع اجرا کردیم.

+ در ریسمونک بخوانید:
ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *