مطالب وبلاگ
اخبار، اطلاعیه ها و...
ساختارهای کنترلی در متلب
ساختارهای کنترلی:
در برنامهنویسی، ساختارهای کنترلی ابزارهایی هستند که به ما اجازه میدهند تا جریان اجرای برنامه را کنترل کنیم. دو نوع اصلی از این ساختارها عبارتند از:
Ø دستورات شرطی مانند if, else, elseif برای گرفتن تصمیم بر اساس شرایط مختلف.
Ø حلقهها مانند for وwhile برای اجرای مجموعهای از دستورات به صورت تکراری.
این ساختارها در حل مسائل تکراری یا تصمیمگیری بسیار مفید هستند. در MATLAB این دستورات ساده و قابل فهم هستند و با کمی تمرین به راحتی قابل استفاده خواهند بود.
حلقه for:
حلقه for این امکان را می دهد تا گروهی از دستورات را به صورت ثابت و به تعداد دفعات از پیش تعیین شده ای تکرار کنیم. شکل کلی حلقه for به صورت زیر است:
for x= matrix
commands
end
دستوراتی که بین for و end قرار دارند برای هر ستون ماتریس اجرا می شوند. در هر بار تکرار x به ستون بعدی اختصاص داده می شود.
اما معمولا از ساختار ساختار کلی زیر استفاده می کنیم:
for index= first_value:step:last_value
commands
end
که در آن index شمارنده ، first_value مقدار اول، step طول گام، و last_value مقدار نهایی است. اگر گام نوشته نشود، مقدار پیشفرض ۱ در نظر گرفته میشود.
مثال ۱: چاپ اعداد از ۱ تا ۵:
for i = 1:5
disp(i)
end
1
2
3
4
5
مثال ۲: جمع اعداد زوج بین ۱ تا ۲۰.
sum = 0;
for i = 2:2:20
sum = sum + i;
end
disp(['summation is:',num2str(sum)])
summation is:110
مثال ۳: برنامه ای که یک عدد حسابی را گرفته و فاکتوریل آن را حساب کند.
n=input('Please enter an integer number:');
f=1;
for i=1:n
f=f*i;
end
disp(f)
120
یادآوری: دستور input برای دریافت ورودی از کاربر استفاده میشود. کاربر میتواند عدد، رشته یا حتی عبارت ریاضی وارد کند.
n=input('Please enter an integer number:');
اگر بخواهید رشته (string) دریافت کنید، باید 's' را به عنوان آرگومان دوم بنویسید:
n=input('Please enter your name: ', 's');
مثال4: برنامه ای که به کمک 15 جمله اول بسط مک لورن تابع مقدار آنرا تقریب می زند:
x=2;
out=1;
for i=1:15
out=out+x^i/factorial(i);
end
disp(out)
7.3891
مثال 5: برنامه ای که تا n جمله دلخواه دنباله را محاسبه می کند.
clc
clear all
n=20;
a=ones(1,n);
a(1)=1;
for i=2:n
a(i)=sqrt(6+a(i-1));
end
disp(a)
1.0000 2.6458 2.9404 2.9900 2.9983 2.9997 3.0000 3.0000 3.0000 3.0000 3.0000 3.0000 3.0000 3.0000 3.0000 3.0000 3.0000 3.0000 3.0000 3.0000
همانطور که مشاهده می شود این دنباله به عدد 3 همگراست. در واقع می توان نشان داد که این دنباله یک دنباله بازگشتی است که صعودی و از بالا کراندار است و لذا دنباله ای همگراست.
مثال6: برنامه ای که ستون های ماتریس را چاپ می کند:
A=magic(5);
for v=A
disp(v)
end
17
23
4
10
11
24
5
6
12
18
⋮
مثال 7: برنامه ای که جمله اول دنباله بازگشتی فیبوناچی را محاسبه کند:
n=20;
fib=ones(1,20);
for i=3:20
fib(i)=fib(i-1)+fib(i-2);
end
disp(fib)
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
تذکر: گاهی نیاز است که از for های تو در تو که به آن اصطلاحا nested for می گویند استفاده کنیم.
مثال8: ماتریس تعریف کنید که در آن
باشد.
n=5;
A=ones(n);
for i=1:n
for j=1:n
A(i,j)=i/j^2;
end
end
disp(A)
1.0000 0.2500 0.1111 0.0625 0.0400
2.0000 0.5000 0.2222 0.1250 0.0800
3.0000 0.7500 0.3333 0.1875 0.1200
4.0000 1.0000 0.4444 0.2500 0.1600
5.0000 1.2500 0.5556 0.3125 0.2000
حلقه while:
اگر بخواهیم گروهی از دستورات را تا زمانی که شرط خاصی بر قرار باشد اجرا کنیم از دستور while استفاده می کنیم.
ساختار کلی:
while condition
commands
end
حلقه while تا زمانی اجرا میشود که شرط آن برقرار باشد. اگر از ابتدا شرط برقرار نباشد دستور هیچگاه اجرا نمیشود و اگر همیشه برقرار باشد هیچگاه از حلقه خارج نمی شود.
مثال 9: چاپ اعداد فرد تا زمانی که کمتر از ۱۰ باشند:
x = 1;
while x < 10
disp(x)
x = x + 2;
end
1
3
5
7
9
در مثال زیر به درک بهتری از دستور while می رسیم.
مثال 10: برنامه ای بنویسید که جملات دنباله فیبوناچی را تا زمانی که کمتر از 200 هستند محاسبه کنند.
Fib=[1,1];
while(fib(end)<200)
out=fib(end)+fib(end-1);
fib=[fib,out];
end
fib=fib(1:end-1);
disp(fib)
1 1 2 3 5 8 13 21 34 55 89 144
تذکر: در خط 6 ام کد بالا که با رنگ قرمز مشخص کردیم، می خواهیم آخرین عضو دنباله فیبوناچی را حذف کنیم چرا که ساختار while در متلب در ابتدا فقط شرط را بررسی می کند فلذا زمانی از شرط خارج می شود که برقرار نباشد اما با توجه به کد نویسی ما آخرین جمله به دنباله اضافه شده است. برای این کار می توانستیم به صورت معادل از دستور زیر استفاده کنیم:
fib(end)=[];
تذکر: در متلب برای خروج از while یا for میتوانیم از دستور break استفاده کنیم، به محض اجرای این دستور برنامه از حلقه خارج می شود.
مثال11: پیدا کردن اولین عددی که مکعب آن بزرگتر از 200 است:
for i = 1:10
if i^3 > 400
disp([‘The first integer whose cube is greater than 400: ‘ num2str(i)])
break
end
end
The first integer whose cube is greater than 400: 8
همین برنامه به کمک دستور while می تواند به صورت زیر نوشته شود:
i=1;
while true
if(i^3>400)
break
end
i=i+1;
end
disp([‘The first integer whose cube is greater than 400: ‘ num2str(i)])
The first integer whose cube is greater than 400: 8
که البته نوشتن آن با while منطقی تر است چون ما نمیدانیم تا کجا باید پیش برویم.
دستورات شرطی (if, else, elseif):
ساختار کلی:
if condition
commands
elseif condition
commands
elseif condition
commands
else
commands
end
دستور if بررسی میکند که آیا شرطی برقرار است یا نه. اگر برقرار بود، دستورات داخل بلوک if اجرا میشوند. اگر نه، به سراغ elseif یا در نهایت else میرود.
مثال 12: برنامه ای بنویسید که یک عدد از کاربر گرفته و قدر مطلق آنرا محاسبه کند.
x=input('Enter a real number:');
if x>=0
out=x;
else
out=-x;
end
disp(out)
مثال 13:برنامهای بنویسید که یک عدد از کاربر بگیرد و بررسی کند که عدد زوج است یا فرد.
دستور switch:
ساختار کلی:
دستور switch زمانی استفاده میشود که بخواهیم مقدار یک متغیر را با چند مقدار مختلف مقایسه کنیم. این دستور جایگزینی مرتبتر برای ساختارهای تودرتوی if-elseif است.
switch expression
case value1
commands
case value2
commands
case {value3, value4}
commands
...
otherwise
commands
end
مثال 14:
switch n
case -1
disp('negative one')
case 0
disp('zero')
case 1
disp('positive one')
otherwise
disp('other value')
end