امیرحسین سبحانی

مطالب وبلاگ

اخبار، اطلاعیه ها و...

ساختارهای کنترلی در متلب

ساختارهای کنترلی:

در برنامه‌نویسی، ساختارهای کنترلی ابزارهایی هستند که به ما اجازه می‌دهند تا جریان اجرای برنامه را کنترل کنیم. دو نوع اصلی از این ساختارها عبارتند از:

Ø      دستورات شرطی مانند 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

بازگشت به بلاگ
دسته بندی : مطالب آموزشی | کد های آموزشی , بازدید:17 , تاریخ انتشار : 1404/01/27