آموزش برنامه نویسی متلب
موضوع:حلقه ها و دستورات شرطی در متلب
جلسه: سیزدهم
مدرس : مدرسین جاواپرو
متلب را ساده،آسان و شیرین بنوشید!!!
این جلسه ابتدا به نحوه تعریف دستورات شرطی و سپس به شیوه های مختلف کنترل روند برنامه می-پردازیم. دستورات شرطی همان طور که از قبل نیز میدانید، برای بررسی یک شرط، یعنی درست بودن یا نبودن یک شرط دلخواه، و سپس بسته به نتیجه اجرای یک سری دستورات به کار میروند. برای مثال می-خواهیم برنامه ای بنویسیم که یک عدد از کاربر بگیرد و اگر زوج باشد، به کاربر پیغام زوج بودن و درغیراین صورت فرد بودن را نمایش دهد. در این برنامه دو دستور داریم که یکی پیغام زوج بودن را نمایش می-دهد و دیگری فرد بودن. اما در هر بار اجرای برنامه فقط یکی از دستورات آن هم بسته به شرایط داده کاربر اجرا میشود. ساختارهای شرطی به ما کمک میکنند که چنین برنامه هایی را بنویسیم. این ساختارها کاربر بسیار زیادی در برنامه ها دارند.
نحوه تعریف یک ساختار شرطی این گونه است:
if شرط 1 دستورات elseif شرط 2 دستورات else دستورات end |
حال بیایید مثال زوج یا فرد بودن اعداد پیاده سازی کنیم. ابتدا یک فایل متنی با عنوان مثلا test.m ایجاد کنید. کدهای زیر را وارد نموده و خط به خط توضیح میدهیم:
1 n = input('Enter an Integeer:'); 2 if rem(n,22) == 0 3 disp('even') 4 else 5 disp('odd') 6 end |
خط اول عددی را از کاربر و در n ذخیره میکند، خط دوم از ساختار شرطی استفاده میکند. دستور rem(a,b) باقیمانده تقسیم a به b را به دست آورد. اگر این مقدار صفر باشد نتیجه میگیریم که n زوج بوده و در غیر این صورت فرد خواهدبود. در نتیجه این دو حالت در زمان تحقق پیغام متناسبی به کاربر نشان خواهد داد.
اگر کاربر مقدار غیرعددی را وارد کند، دستور input به طور خودکار پیغام خطای متناظربا ورودی را به کاربر میدهد، اما اگر عدد وارد شده اعشاری باشد، برنامه با خطا روبه رو میشود(چرا؟). پس بهتر است ابتدا بررسی شود که عدد وارد شده صحیح باشد و در غیر این صورت یک پیغام خطا به کاربر نشان داده شود:
n = input('Enter an Integeer:'); if ~(n - int32(n)) if rem(n,22) == 0 disp('even') else disp('odd') end else disp('your number is not an integer') end |
در بالا ما از if تو در تو استفاده کردیم. بدین معنا که ابتدا شرط صحیح بودن n بررسی میشود و اگر این شرط برقرار بود آنگاه شرط دوم و اصلی که همان زوج یا فرد بودن است بررسی میشود و در غیر این صورت برنامه با پیغامی مبنی براین که عدد وارد شده عددصحیح نیست، به پایان میرسد. اما در مورد شرط اول، عبارت
~(n - int32(n))
اول n را به عدد صحیح تبدیل میکند، که درواقع آن را در صورت اعشاری بودن به نزدیک ترین عدد صحیح به آن گرد میکند، سپس این مقدار را از خود n کسر میکند، اگر این دو برابر باشند، حاصل صفر خواهد شد، که به این معناست که n عددصحیح بوده است. پس با عکس کردن آن نتیجه یک منطقی خواهد شد و شرط برقرار میگردد.
برنامه بالا در هر اجرای خود فقط یک عدد را بررسی میکند و برای بررسی یک عدد دیگر بایستی برنامه دوباره اجرا شود، برای رفع ایراد فوق میتوان از کنترل کننده های روند برنامه استفاده نمود که به آنها در ادامه میپردازیم:
- حلقه while :
شکل کلی ساختار این حلقه بدین گونه است:
while شرط دستورات end |
در صورت برقرار بودن شرط، دستورات برنامه به ترتیب از بالا به پایین به اجرا درآمده تا به end برسند. سپس دوباره شرط فوق بررسی شده و در صورت برقرار بودن آن روند قبلی تکرار شده و درغیر این صورت برنامه از حلقه خارج شده و دستور بعد از end به اجرا درمی آید.
- مثال:
برنامه زیر یک عدد از کاربر میگیرد و اگر مقدار آن با مقدار از پیش ذخیره شده (password) برابر بود یک پیغام نمایش میدهد و درغیر این صورت دوباره تکرار میشود:
password = 1000; n = input('Enter password: '); while n ~= password n = input('Enter password: '); end disp('password correct'); |
به مثال برنامه زوج و فردبودن برمی گردیم. میخواهیم با حلقه while برنامه را طوری تغییردهیم که همواره ادامه داشته باشد، اگر شرط داخل حلقه همواره برقرار باشد، مثلا 1 == 1، آنگاه دستورات داخل حلقه بی نهایت بار تکرار میشوند. به جای شرط فوق میتوان حاصل شرط را که همواره 1 را برمیگرداند به جای شرط گذاشت، زیرا:
>>1 == 1 ans = 1 |
بنابراین داریم:
while 1 n = input('Enter an Integeer:'); if ~(n - int32(n)) if rem(n,22) == 0 disp('even') else disp('odd') end else disp('your number is not an integer') end end |
کل برنامه در یک حلقه while قرارگرفت. برای خروج از برنامه میتوان کلیدهای ترکیبی ctrl+c را فشرد.
- نکته:
دستورات break و continue در یک حلقه به ترتیب برای خارج شدن از حلقه، و گذر از دور فعلی و رفتن به دور جدید حلقه به کار میرود.
- مثال:
برنامه ای بنویسید که اولین عدد بخش پذیر بر 7 بعد از عدد 100 را نمایش دهد:
از یک حلقه while برای این منظور استفاده میکنیم، بخش پذیری بر 7 را با یک دستور شرطی بررسی و چنانچه عدد بخش پذیر را پیدا کردیم، از حلقه با دستور break خارج میشویم:
x = 100; while 1 if rem(x,7) == 0 disp(x); break; else x = x + 1; end end |
- حلقه for :
شکل کلی این دستور بدین صورت است:
for = متغیر آرایه محدوده تعریف دستور; … دستور; end |
حلقه for بدین صورت است که مقدار متغیر به ترتیب مقادیر آرایه را در هر دور حلقه میگیرد. و در نتیجه به تعداد طول آرایه، حلقه تکرار میشود و هر بار متغیر یک درایه ی بردار را میگیرد. متغیر میتواند حتی یک ماتریس به جای آرایه باشد که ستون های آن به ترتیب از اول تا آخر نقش آرایه را خواهند داشت و متغیر مقادیر مربوطه را اخذ مینماید.
- مثال:
برنامه ای بنویسید که اعداد زوج از 1 تا 10 را چاپ کند.
for x = 2:2:20 disp(x); end |
-مثال:
برنامه ای بنویسید که درایه های یک ماتریس جادویی 3در3 را به ترتیب چاپ کند:
for x = magic(3) disp(x); end |
استفاده از break و continue در حلقه for نیز مجاز است.
دستور break در صورت اجرا از حلقه کاملا خارج میشود اما دستور continue ادامه روند دور را متوقف کرده و مقدار بعدی آرایه را در متغیر قرارمی دهد.
- switch/case/otherwise :
عبارت دستوری فوق مقدار یک متغیر را با چندین مقدار از پیش تعیین شده مقایسه میکند و در صورتی که با هریک از این مقادیر برابر باشد، دستورات مرتبط با آن را اجرا میکند. شکل به کارگیری آن بدین گونه است:
switch متغیر case مقدار1 دستورات; case مقدار2 دستورات; … otherwise دستورات; end |
یک متغیر مانند x را درنظربگیرید. مطابق عبارت فوق ابتدا این متغیر با مقدار1 مقایسه میگردد و چنانچه برابر باشند، دستورات زیر مقدار1 اجرامی شوند، سپس روند فوق به اتمام میرسد و دستورات دیگر اجرا نخواهندشد. در واقع هر وقت یکی از مقادیر با متغیر برابر بود، فقط دستورات مقدار مربوطه اجرا شده و روند متوقف میشود.
- مثال:
برنامه ای بنویسید که یک رشته را از کاربر بگیرد و اگر این رشته نام یک رقم باشد(مثلا one, two,…) عدد مربوط به آن را چاپ کند و درغیر این صورت پیغام "invalid number " را بدهد.
s = input('type your number: ','s')
|
پیروز و موفق باشید
تدریس خصوصی آنلاین و از راه دور متلب(MATLAB) با مدرس های حرفه ای و با تجربه [اینجا کـــــلیک کــــنید]
جلسه سیزدهم | حلقه ها و دستورات شرطی در متلب
فرمت:PDF (لطفا در صورت خرابی لینک دانلود گزارش بدید که لینک اصلاح کنیم)
بستن *نام و نام خانوادگی * پست الکترونیک * متن پیام |
دوره های آموزشی برنامه نویسی
انجام پروژه های برنامه نویسی
تدریس خصوصی برنامه نویسی
بیش از 7 سال از فعالیت جاواپرو میگذرد
جاواپرو دارای مجوز نشر دیجیتال از وزارت فرهنگ و ارشاد اسلامی است
جهت ارتباط مستقیم با جاواپرو در واتساپ و تلگرام :
09301904690