در این مطلب در مورد حلقه if در متلب صحبت میکنیم. بدین منظور ابتدا به صورت مختصر کار با متلب را توضیح میدهیم و سپس در مورد چگونگی نوشتن یک کلین کد در متلب صحبت میکنیم. در بخش بعدی این نوشتار در مورد حلقههای شرطی در متلب صحبت خواهیم کرد و حلقه if در متلب را توضیح میدهیم. بخش پایانی این نوشتار به معرفی دورههای آموزشی متلب در ریسمونک خواهد پرداخت.
شروع با نرم افزار متلب چگونه است؟
وقتی متلب را باز میکنید به پنجرهای مانند تصویر بالا برخورد میکنید که در تصویر قسمتهای مختلف این صفحه نمایش داده شده است. یکی از ویژگیهای متلب این است که میتواند نحوه قرار گیری و ساختار شبکه را تغییر دهید. در صفحه Command ممکن است با دو نوع علامت در صفحه خالی Command مواجه شوید که به صورت زیر هستند:
<< | در این حالت شما ورژن کامل متلب را دارید. |
EDU> | در این حالت ورژن آموزشی متلب در اختیار شما است. |
اما نوتیشن رایج در صفحه Command همان >> است که در ادامه ما نیز از این رویه استفاده میکنیم.
استفاده از متلب به عنوان ماشین حساب
به عنوان یک مثال از محاسبات ساده در متلب تنها لازم است عبارتی که قصد دارید محاسبه کنید را در پنجره متلب تایپ کنید. برای مثال عبارت ساده
را میخواهیم محاسبه کنیم. بدین منظور کافی است عبارت را در صفحه دستورات یا cammand تایپ کنید و با استفاده از کلید Enter جواب را در خط بعد مشاهده میکنید.
همان طور که مشاهده میکنید اگر برای جواب متغیری تعریف نشده باشد، متلب به صورت پیش فرض از ans به عنوان متغیری که جواب را در آن ذخیره کند، استفاده خواهد کرد. ولی اگر برای عبارت خود، یک متغیر مانند x تعریف کنید جواب نهایی در x ذخیره میشود، یعنی داریم:
از x میتوان به عنوان پارامتری که مقدار آن مشخص است مجدداً استفاده کرد و بدین ترتیب برای مثال داریم:
بدین ترتیب میتوان گفت علامتهای
به ترتیب چهار عمل اصلی ریاضیات را در متلب انجام میدهد. برای اتمام یک session در متلب با تایپ کردن quit نرم افزار متلب بسته میشود یا میتوانید مانند تمام پنجرهها این برنامه رو نیز با کلیک بر روی ضربدر قرمز ببندید.
Overwriting در متلب
هنگامی که یک متغیر را در متلب تعریف میکنید، آن متغیر مقداری که شما تعریف کردهاید را خواهد گرفت. اگر مجدداً روی متغیر عملیات جبری انجام دهید در حافظه متلب آخرین مقدار متغیر باقی میماند. این موضوع را در مثال زیر میتوانید ببینید:
اگر دقت کنید در معادله بالا مقدار ۶ برای متغیر t در نظر گرفته شده است و این مقدار نهایی در نهایت برای محاسبات دیگر در نظر گرفته میشود.
پیام خطا
اگر یک عبارت را به اشتباه در متلب بنویسید، یک پیام خطا برای شما نمایش داده خواهد شد. برای مثال در کد زیر علامت * را ننوشتهایم.
تصحیح خطا در متلب
در بسیاری از موقعیتهایی که با پیغام خطا رو به رو میشوید، مخصوصاً اگر عبارتی که نوشتهاید طولانی باشد تایپ مجدد آن سخت است. به همین دلیل بهتر است در این مواقع دستورات قبلی را با استفاده از کلید رو به بالا (
) در صفحه کیبورد خود جستجو کنید و از این روش برای تصحیح خطای رخ داده در دستور خود استفاده کنید.
نوشتن کد تمیز یا کلین کد در متلب چگونه است؟
دلایل زیادی وجود دارد که چرا کدی که فقط کار میکند به اندازه کافی خوب نیست. برای پاسخ به این سوال فهرست زیر را ببینید:
- رفع اشکالات، افزودن ویژگیها و کار با کد در تمام جنبههای دیگر وقتی کد تمیز باشد بسیار آسانتر است.
- تصور کنید شخص دیگری به کد شما نگاه میکند و سعی میکند بفهمد که کد شما چه کاری انجام میدهد. در صورتی که کد شما اصطلاحاً کلین کد نباشد، آن فرد زمان زیادی را صرف میکند تا کد شما را درک کند.
- ممکن است اکنون برای هدف خاصی برنامه نویسی و کد نویسی کنید و به نظر برسد هیچ گاه دیگر به کدی که نوشتهاید باز نخواهید گشت. با این حال تجربه نشان داده است که عملاً هیچ کار محاسباتی وجود ندارد که فقط یک بار در زندگی برنامهنویسی خود با آن مواجه شوید. تصور کنید که یک هفته، یک ماه یا یک سال بعد به کد خود نگاه میکنید: آیا هنوز میتوانید بفهمید که کد شما چگونه کار میکند؟ کلین کد به شما کمک میکند که همواره بفهمید کد شما چگونه کار میکند.
نمونههایی زیادی ازکدهای نامرتب، بدون ساختار و به طور کلی کثیف وجود دارند. همچنین منابعی هستند که تقریباً تضمین میکنند که کدهایی با ساختار مناسب ارائه میدهند. برای مثال به ساختار متلب دقت کنید، در بسیاری از مواقع بسیاری از توابع که ممکن است استفاده کنید در خود سینتکس متلب تعریف شدهاند. برای مثال دستور edit mean را در صفحه اجرای متلب تایپ کنید. فایلی که به شما نشان داده میشود میتوان به شما نشان دهد که چگونه یک کلین کد با این تابع بنویسیم.
چند تابع در یک فایل
این یک باور رایج و نادرست است که متلب نمیتواند با چندین تابع در هر فایل کار کند. حقیقت این است که ممکن است بیش از یک تابع در یک فایل وجود داشته باشد، اما تنها اولین تابع در فایل برای توابع موجود در فایلهای دیگر یا خط فرمان قابل مشاهده است. از این نظر، آن دسته از توابع در یک فایل که موقعیت تابع اول را ندارند میتوانند به عنوان کمک کننده برای تابع اول در کد عمل کنند. هنگام نوشتن کد، به این فکر کنید که آیا یک تابع خاص واقعاً فقط یک کمک کننده تابع اصلی است یا خیر، آیا میتوان آن را از جای دیگری فراخوانی کرد؟ با انجام این کار، میتوانید از آشفتگی و به هم ریختگی دهها M فایل در پوشه برنامه خود جلوگیری کنید.
زیر تابعها
مشکلی که ممکن است در صورت داشتن تابعهای بسیار زیاد پیش آید
این است که در هر فایل ممکن است متوجه نشوید کدام تابع واقعاً به کدام یک از توابع دیگر نیاز دارد. در صورتی که یک تابع، تنها تابع کمکی برای یک تابع اصلی باشد بهترین مکان برای قرار دادن آن داخل فایل تابع اصلی است.
به این ترتیب، این تابع کمکی فقط برای تابع اطراف قابل مشاهده خواهد بود و نام آن با نام هیچ تابع دیگری تداخل نخواهد داشت. با این حال بزرگترین مزیت نوشتن تابع فرعی در فایل تابع اصلی این است که تابع فرعی از نظر دستوری به وضوح با عملکرد والد یا تابع اصلی خود مرتبط است و هنگامی که برای اولین بار به کد نگاه میکنید، روابط بین توابع بلافاصله قابل مشاهده است.
نام متغیرها و توابع
یکی از عناصر کلیدی برای یک کد قابل اطمینان، استفاده از یک طرح کلی و ثابت برای نامگذاری توابع است. از آغاز پیدایش زبانهای برنامه نویسی در دهه ۱۹۵۰، طرحهایی برای نامگذاری توسعه یافته یا از بین رفتهاند، اما به طور کلی این طرحها در معرض تکامل هستند. با این حال، برخی از قوانین کلی وجود دارد که در طول سالها در انواع زمینههای مختلف مفید واقع شدهاند. چند مورد از مفیدترین اصول نامگذاری در اینجا بیان شده است:
- نام متغیرها نشان میدهد که متغیر چه کاری انجام میدهد. بدون شک این اولین و مهمترین قاعده در نامگذاری متغیرها است و متضمن چندین چیز است. برای مثال وقتی متغیر دارای مقدار ۲٫۷۱۸۱۲۸ است نام آن را pi نمیگذارید. همچنین در ریاضیات و علوم کامپیوتر برخی از نامها به مفاهیم خاص در علوم مرتبط میشود که در جدول (۱) تعدادی از قراردادهای پرکاربرد فهرست شدهاند.
نام متغیر | کاربرد معمول متغیر |
اندازه عددی که معمولاً برای نشان دادن سایز یک ماتریس استفاده میشود. | |
مقادیر عددی و همچنین اندیسهای یک حلقه | |
مقادیر حقیقی | |
مقدار مختلط یا محور z | |
مقدار مختلط یا ثابت | |
مقدار زمان | |
عدد اویلری یا بردار یکه | |
نام توابع اصلی | |
پارامتر گسسته سازی فضایی (در تحلیل عددی) | |
پارامترهای حقیقی و کوچک | |
زاویه یا پارامتر | |
پارامترهای گسسته زمانی | |
پارامتر | |
بردار | |
ماتریس | |
قسمت سمت راست یک سیستم توابع |
- نامگذاری کوتاه و غیر توصیفی در محاسبات ریاضی کاملاً رایج است زیرا نام متغیرها در محاسبات دستی به سختی بلندتر از یک کاراکتر هستند، این مورد در جدول بالا نیز مشخص است. برای اینکه بتوان بین کمیتهای برداری و ماتریس تمایز قائل شد، در برنامه نویسی و همچنین ریاضیات معمول است که ماتریسها را با حروف بزرگ و بردارها و اسکالرها را با حروف کوچک نشان دهیم.
- نامگذاری طولانی و توصیفی برای متغیرها بیشتر در C++ رایج است و معمولاً با حروف کوچک شروع میشود. همچنین در نامگذاری طولانی متغیرها معمولاً از خط تیره برای فاصله بین کلمات استفاده میشود اما باید دقت کرد که در متلب خط تیره بین کلمات به عنوان علامت تفاضل در نظر گرفته میشود. هر دو مورد در مثال زیر نمایش داده شدهاند:
linearity , distanceToCircle , figureLabel
linearity , distance_to_circle , figure_label
- نام متغیرهای منطقی اگر قرار باشد این متغیر فقط مقادیر ۰ یا ۱ را برای نشان دادن درست یا نادرست بودن عبارت نمایش دهد، باید بیانگر این موضوع باشد. یک تکنیک متداول این است که نام متغیر را با is و یک روش کمتر متداول استفاده از flag است. این موارد در ادامه نمایش داده شدهاند:
isPrime , isInside , flagCircle
تورفتگی در کدنویسی
اگر تا به حال با ساختارهای تودرتوی if و for سروکار داشته باشید، احتمالاً متوجه شدهاید که ممکن است در نگاه اول تشخیص آن ساختارهای تودرتو از سایر قسمتهای کد دشوار باشد. همچنین، اگر محتویات یک حلقه بیش از تنها چند خط باشد، یک ویژگی بصری ممکن است برای نشان دادن آنچه در داخل و خارج از حلقه است مفید باشد و اینجا است که تورفتگی وارد عمل میشود.
معمولاً هر چیزی در یک حلقه یعنی یک تابع، یک شرط، یک دستور سوئیچ و غیره را با ایجاد تورفتگی در کد ایجاد میکنیم. بسته به شرایط مختلف تورفتگی را میتوان با دو، سه یا چهار فاصله یا یک tab ایجاد کرد. به عنوان یک قاعده کلی، تورفتگی باید تمایز بصری واضحی داشته باشد در حالی که از تمام فضای شما در خط استفاده نمیکند. این موضوع را در پاراگراف بعدی مشاهده میکنید.
طول خط
عملاً هیچ محدودیتی برای میزان نوشتن روی یک خط کد متلب وجود ندارد. در واقع، میتوانید هر کد متلب را با جدا کردن دو دستور با یک علامت ؛ یا ، به یک خط تبدیل کنید و هیچ خط دیگری بین آنها تولید نکنید. با این حال، یک خط با یک میلیون کاراکتر به طور بالقوه چندان خوانا نخواهد بود. اما، به صورت کلی سوال این است که چند کاراکتر را میتوانید در یک خط قرار دهید بدون اینکه محتوای آن را مبهم کنید؟
این موضوعی است که باید در مورد آن بحث کرد. به صورت معمول تعداد کاراکتر روی یک خط معمولاً بین ۷۰ تا ۸۰ کاراکتر است. ویرایشگر متن متلب، ۷۵ کاراکتر در هر خط را پیشنهاد میدهد. بدین ترتیب، فرد مطمئن است که برای نمایش کد بدون شکستگی خط به صورت مصنوعی یا اسکرول کردن افقی در ویرایشگر، نیازی به داشتن یک نمایشگر عریض نیست. البته ممکن است گاهی اوقات طول خطوط شما بیشتر از ۷۵ کاراکتر باشد، در این مواقع از علامت … استفاده میشود تا نشان داده شود که ادامه خط در سطر بعدی نوشته شده است.
فاصله و تراز
در برخی شرایط شکستن یک خط منطقی است، اگرچه هنوز به حد مجاز نرسیده باشد. این موضوع ممکن است زمانی اتفاق بیفتد که شما با عبارتی سروکار دارید که به دلیل طولانی بودنش باید بیشتر به سمت راست شکسته شود. بدین ترتیب میخواهیم نقطه شکست خط را طوری انتخاب کنیم که با یک گسست معنایی یا دستوری مطابقت داشته باشد. برای مثال، کد زیر را ببینید.
فاصله در عبارات
این ویژگی استفاده از فاصله در عبارات است. قانون این موضوع قرار دادن فاصله در جایی است که در سینتکس متلب تعریف شده است. این موضوع به خوبی در تصویر زیر نشان داده شده است:
اعداد جادویی
هنگام کدنویسی، گاهی اوقات یک مقدار را ثابت در نظر میگیرید زیرا قصد ندارید آن را تغییر دهید. به عنوان مثال، برنامهای را در نظر بگیرید که تعیین میکند آیا یک نقطه داده شده خارج از یک دایره با شعاع ۱ با مرکز (۱،۱) و به طور همزمان در داخل مربعی به طول یال ۲ قرار دارد یا نه، که دایره در سمت راست مربع قرار دارد.
پس از نوشتن کد، برنامه شامل چند ۱ است که مشخص نیست که آیا آنها متمایز هستند یا به یک مقدار یکسان اشاره دارند. این اعداد رمزگذاری شده اغلب اعداد جادویی نامیده میشوند، زیرا آنها کاری را که قرار است انجام دهند انجام میدهند، اما نمی توان به راحتی دلیل آن را تشخیص داد. در همین برنامه اگر بخواهید شعاع دایره را تغییر دهید، تشخیص و تغییر ۱ هایی که به شعاع اشاره دارند دشوار خواهد بود. راه حل این موضوع در کادر سبز رنگ نمایش داده شده است.
توضیحات
با ارزش ترین کاراکتر برای کلین کد متلب استفاده از کاراکتر %، برای نشان دادن توضیحات مربوط به کد است. همه نشانههای بعد از کاراکتر درصد در همان خط تاثیری در کد ندارند و به عنوان توضیحات کد در نظر گرفته میشوند.
عناصر ساختاری
همیشه مفید است که ابتدا و انتهای تابع نه تنها با کلمات کلیدی مربوطه نشان داده شود، بلکه با چیزی قابل مشاهدهتر مشخص شوند. برای جداسازی ظاهری بخشهای متمایز کد، علائمی را با کاراکترهای #، = یا – در نظر میگیریم. این علائم به عنوان مثال زمانی که چندین تابع در یک فایل سورس وجود دارد، یا زمانی که یک حلقه for وجود دارد که روی تعداد زیادی از خطوط اثر میگذارد که دیگر به راحتی نمیتوانید دستور end را پیدا کنید، بسیار مفید است.
استفاده از پرانتز و براکت
لیست اولویت عملگرها در متلب به صورت مشخص و واضح وجود دارد که میتوانید اطمینان حاصل کنید که برای هر عبارت در متلب، که شامل هر عملگر یونری یا باینری است، یک روش منحصر به فرد برای ارزیابی وجود دارد. به صورت طبیعی، متلب ضرب (*) را قبل از جمع (+) بررسی میکند، اما ممکن است زمانی که صحبت از عملگرهای منطقی یا ترکیبی از عملگرهای عددی و منطقی به میان میآید، این موارد کمتر واضح باشند.
با این حال هر زمانی که الویتها را از خاطر برده بودید یا از آن اطمینان نداشتید میتوانید یک جفت براکت را در محل مورد نظر قرار دهید. این براکتها اگر چه ممکن است غیر ضروری باشند، اما از ایجاد نتیجه نادرست جلوگیری میکند. همچنین الویت عملگرها به صورت جدول زیر داده میشوند:
- پرانتز ()
- ترانهاده (.’)، توان (.^)، ترانهاده مزدوج مختلط(‘)، توان ماتریس (^)
- مقدار مثبت یک کمیت (+)، مقدار منفی یک کمیت (-)، نفی منطقی (~)
- ضرب (.*)، تقسیم راست (./)، تقسیم چپ (.\)، ضرب ماتریس (*)،
تقسیم سمت راست ماتریس (/)، تقسیم ماتریس چپ (\) - جمع (+)، تفریق (-)
- عملگر کولون (:) که برای ایجاد بردار، ایجاد آرایه پایین و تکرار در متلب استفاده میشود.
- کمتر از (<)، کمتر یا مساوی (<=)، بزرگتر از (>)، بزرگتر یا مساوی
(>=)، برابر با (==)، غیرمساوی با (~=) - عملگر و (&)
- عملگر یا (|)
- عملگر و (&&)
- عملگر یا (||)
خطاها و هشدارها
مهم نیست که چقدر دقیق کد خود را طراحی میکنید، زیرا همواره کاربرانی وجود خواهند داشت که میتوانند با دادن دادههای ورودی بد جوابهای اشتباهی از برنامه بگیرند. در حقیقت، این در محاسبات عددی غیرمعمول نیست که کارها اساساً اشتباه پیش میروند.
برای مثال شما برنامهای مینویسید که یک فرآیند تکرار شونده را روی سیستم معادلات خطی که به صورت
تعریف شده، انجام میدهد. این محاسبات برای یک مقدار ورودی مربوط به انجام میشود و شما میخواهید مقدار را به دست آورید. با این حال همگرایی برای معادله فقط برای مقادیر مشخصی از صورت میگیرد و اگر مقدار
در آن بازه نباشد رفتار تابع نیز غیرمعمولی است.
در این مواقع باید کاربر را با استفاده از عملگرهای ftprintf () یا disp () متوجه اشتباه صورت گرفته در برنامه کنید. با این حال روش بهتر این است که از warning () یا error () استفاده کنید. تفاوت دو دستور آخری با ابتدایی در این است که به محض اجرای دستورهای error یا warning اجرای برنامه متوقف میشود.
سوییچ کردن حالتها
دستورهای سوییچ زمانی استفاده میشوند که غیر از آن مجبور باشید یک دستور شرطی را با چندین دستور if دیگر بنویسید. آنها همچنین زمانی که شرط ها برای مقایسه عبارتهای string باشند، بسیار محبوب هستند.
دستورهای شرطی و حلقه if در متلب
عبارات شرطی شما را قادر میسازد در زمان اجرا انتخاب کنید کدام بلوک کد اجرا شود. ساده ترین دستور شرطی یک دستور if است. به عنوان مثال داریم:
عبارتهای if میتوانند شامل گزینههای جایگزین نیز باشند که این مهم با استفاده از کلمات کلیدی elseif یا else ایجاد میشود. برای مثال داریم:
از طرف دیگر، هنگامی که میخواهید برابری یا تساوی را در برابر مجموعهای از مقادیر مشخص آزمایش کنید، از دستور switch استفاده کنید. این موضوع را در مثال زیر نشان دادهایم:
برای هر دو دستور switch و if در متلب، کد مربوطه به محض اینکه شرایط لازم در دستور ایجاد میشود از حلقه خارج میشود. هر عبارت شرطی به کلمه کلیدی end نیز نیاز دارد. به طور کلی هنگامی که مقادیر زیادی از مقادیر گسسته و شناخته شده را دارید، خواندن دستورات سوئیچ راحتتر از if است. با این حال، شما نمیتوانید نابرابری را توسط دستور سوئیچ نشان دهید، یعنی نمیتوانید برنامه زیر را توسط دستور switch اجرا کنید:
حلقه if در متلب
کد مربوط به دستور حلقه if در متلب، زمانی که شرط درست باشد پایان می یابد. شکل کلی حلقه if در متلب به صورت زیر است:
سه عضو اصلی حلقه if در متلب عبارت از if، عبارت یا statment و end است. همچنین نوشتن دستورهای elseif و else اختیاری هستند. در ادامه چندین مثال مربوط به حلقه if در متلب را بررسی میکنیم. این مثالها قابل اجرا در صفحه command یا دستورات است.
در مثال اول یک ماتریس یکه با تعداد ۴ سطر و ۶ ستون ایجاد میکنیم و سپس با استفاده از حلقه if در متلب قطر اصلی را ۲ و به قطر همسایه قطر اصلی مقدار
را میدهیم. بدین ترتیب داریم:
برای مقایسه مقادیر یک بردار با یک حد مشخص نیز به صورت زیر میتوان با استفاده از حلقه if در متلب این مقایسه را انجام داد:
سایز دو ماتریس دلخواه که تعریف کردیم را نیز میتوانیم با استفاده از عبارت isequal و استفاده از حلقه if در متلب به صورت زیر مقایسه کنیم و داریم:
استفاده از strcmp برای مقایسه کاراکترهای بردار استفاده میشود. معمولاً استفاده از == برای آزمایش برابر بودن زمانی که بردارهای کاراکتر اندازههای متفاوتی دارند، منجر به خطا میشود.
برای مشخص کردن این موضوع که آیا یک مقدار در یک بازه مشخص قرار میگیرد یا خیر نیز میتوان از حلقه if در متلب استفاده کرد و بدین ترتیب داریم:
به عنوان آخرین مثال از حلقه if در متلب میخواهیم این حلقه را در یک تابع در متلب استفاده کنیم. در این مثال کاربر مقدار x را به متلب میدهد و با اجرای تابع compare مشخص میشود که مقداری که دادهایم مثبت، منفی یا صفر است. تابع compare به صورت زیر تعریف میشود:
برای اجرای برنامه به صورت زیر در صفحه command عمل میکنیم و داریم:
جمعبندی
در این نوشتار در مورد حلقه if در متلب صحبت کردیم. بدین منظور ابتدا توضیحات مختصری در مورد شروع کار با متلب بیان کردیم، سپس نکات مهم در نوشتن یک کد تمیز در متلب را ارائه دادیم و در نهایت عبارات شرطی در متلب را معرفی کردیم و مثالهای مختلفی از حلقه if در متلب را در صفحه دستورات و به صورت تابع اجرا کردیم.