حلقه های for و while در متلب

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

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

ساختار حلقه for در متلب

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

تذکر: در متلب “:” به معنای “تا” است . به عنوان مثال نوشتن ۱:۱۰۰ یعنی از یک تا ۱۰۰ که شامل ۱ و ۲ و ۳ و … و ۱۰۰  می باشد.

مثال: می خواهیم برنامه ای بنویسیم که از یک تا صد را در خروجی نشان دهد.

کد مربوط به این سوال در زیر نوشته شده است:

;clear

;clc

for i=1:100

   : ((disp(num2str(i

end

و نتیجه در شکل زیر نشان داده شده است:

مثال: می خواهیم عددی از ورودی گرفته و از یک تا آن عدد در خروجی نشان داده شود:

کد مربوط به این مثال نیز به صورت:

 www.fardapaper.ir %

;clear

;clc

   ;(‘:n=input(‘yek adad vared konid

for i=1:n

    ;((disp(num2str(i

end

نتیجه به صورت زیر به دست می آید که برای عدد ۹ صورت گرفته است:

گاهی نیاز خواهد شد از حلقه ­های for to for استفاده کنیم. یعنی یک حلقه ی for داخل یک حلقه ی for دیگر باشد. مثال زیر را ببینید.

مثال: برنامه ای بنویسید که یک عدد به عنوان ورودی بگیرد و به مقدار خودش از خودش چاپ کند؟ (راهنمایی: اگر عدد ۳ باشد ۳ تا ۳ بنویسد!)

کد مربوط به این مثال را در زیر ببینید. حلقه ی داخلی مربوط به تعداد نوشتن است و حلقه ی بیرونی مربوط به شمارش اعداد. مثلا وقتی عدد ۳ وارد می شود حلقه ی اول یعنی for اول می رود بیرون و منتظر اتمام کار for درونی می ماند حال در for داخلی به تعداد عدد انتخاب شده می خواهد disp صورت پذیرد.  دقت کنید که شمارنده حلقه ی دومی (j) تا شمارنده حلقه اولی کار می کند. وقتی کار حلقه درونی تمام می شود دوباره حلقه بیرونی عدد را یکی اضافه می کند و… تا اتمام کار فرا برسد.

 www.fardapaper.ir %

;clear

;clc

;(‘:n=input(‘yek adad vared konid

for i=1:n

    for j=1:i

    ;((disp(num2str(i

    end

end

نتیجه برای عدد ۵ را در زیر می بینید.

مثال: می خواهیم دنباله فیبوناتچی را در متلب بنویسیم. دنباله فیبوناتچی یک دنباله ای است که عدد حاصل از آن حاصل جمع دو عدد قبلی است. برای نوشتن کد متلب دنباله فیبوناتچی، ابتدا متغیری را با نام a در نظر می گیریم که حاوی یک ماتریس سطری است و می خواهیم اعداد فیبوناتچی را در آن ذخیره کنیم و در آخر آن را نمایش دهیم. برای اینکار ابتدا a(1)=0 و a(2)=1 قرار می دهیم تا بتوانیم دنباله فیبوناتچی را در متلب پیاده سازی کنیم. سپس باید برای نوشتن (a(3 و(a(4 و… از قبلی ها کمک بگیریم یعنی (a(3)=a(2)+a(1 و (a(4)=a(3)+a(2 و … . همانطور که می بینید حلقه ی for در این قسمتکار را راحت میکند. در نتیجه باید همانند زیر کد نویسی کنیم: (فرض ما بر این بوده است که دنباله تا عدد ۱۰ ادامه یابد ، البته می توانستیم بیش تر هم در نظر بگیریم و در آخر از ۱ تا ۱۰ پارامتر a را برای نمایش قرار دهیم)

 www.fardapaper.ir %

;clear

;clc

;a(1)=0

;a(2)=1

for i=3:10

   ;(a(i)=a(i-1)+a(i-2

end

;((disp(num2str(a

و نتیجه ی این کد نیز به صورت زیر می باشد.

مثال: می خواهیم یک عدد از ورودی بگیریم و فاکتوریل آن را محاسبه نماییم.

همانطور که می دانید فاکتوریل در ریاضی به صورت

n!=n*(n-1)*(n-2)*…*۱

تعریف می شود. لذا برای پیاده سازی آن در متلب باید همانند فیبوناتچی عمل کنیم و کد مربوط به آن به صورت زیر می باشد.

 www.fardapaper.ir %

;clear

;clc

;(‘:n=input(‘yek adad vared konid

;f=1

for i=n:-1:1

 ;  f=f*i

end

;((disp(num2str(f

می بینید ابتدا f=1 قرار داده شده و در حلقه for از n شروع و یکی یکی کم کرده تا به یک برسه! و هر بار میاد f را با i ضرب می کند و در خود f ذخیره می کند و … تا به آخر برسد.

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

مثال دستور for :

;clear

;clc

;(‘:n=input(‘yek adad vared konid

;f=1

for i=n:-1:1

  ; f=f*i

   ;((disp(num2str(f

end

;((disp(num2str(f

و نتیجه برای n=10

ساختار حلقه while در متلب

یکی دیگر از حلقه ­های مهم در متلب مربوط به حلقه ی while می باشد که ساختار کلی آن به صورت شکل زیر است:

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

مثال: می خواهیم با حلقه ی while یک عدد از ورودی بگیریم و فاکتوریل آن را محاسبه نماییم.

 www.fardapaper.ir %

clear;

clc;

;(‘:n=input(‘yek adad vared konid

;f = n

while n > 1

   ; n = n-1

  ;  f = f*n

end

([(disp([‘n! = ‘ num2str(f

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

نتیجه برای عدد ۱۰

نکته: هر موقع جلوی while بنویسیم ۱ یعنی همیشه شرط برقرار است و ادامه بده. اصطلاحا به آن حلقه همیشه صحیح گفته می شود.

مثال: می خواهیم اعداد رندوم از متلب بگیریم و اگر این اعداد رندوم بزرگ تر از ۰.۵ شدند برنامه تمام شود.

از حلقه ی while استفاده می کنیم و از تابع rand متلب اعداد رندوم کوچکتر از یک می گیریم و تا زمانی که کوچکتر از یک باشند را نمایش می دهیم و اولین عددی که بزرگ تر از ۰.۵ باشد از حلقه بیرون می آییم.

نکته: بیرون آمدن از حلقه توسط دستور break انجام می گیرد.

مثال دستور while :

www.sigmsland.ir%

;clear

;clc

;limit = 0.5

;s = 0

while 1

  ;  tmp = rand

    if tmp > limit

        break

    end

  ;((disp(num2str(tmp

end

البته این مثال برای هر بار اجرا کردن نتایج متفاوتی ارائه خواهد کرد چون تابع rand دست ما نیست و هر لحظه یک مقداری ارائه می کند که در قسمت توابع در متلب توضیح داده شده است.

دیدگاهتان را بنویسید

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

ده − 9 =

آموزش برنامه نویسی

پشتیبانی

ارتباط با ما

  • شماره تماس : 09360147484
  • ایمیل : info@sigmaland.ir

نماد اعتماد الکترونیکی

لوگو طلایی

logo-samandehi
تمامی حقوق مادی و معنوی برای سایت سیگمالند محفوظ است.