while در متلب
ساختارهای کنترلی یکی از اجزای اساسی در هر زبان برنامهنویسی هستند که به کمک آنها میتوان جریان اجرای برنامه را کنترل کرد. این ساختارها شامل حلقههای همانند for, while و دستورات شرطی همانندif, switch میشوند. حلقه while این امکان را فراهم میکند که نرمافزار متلب مجموعهای از دستورات را تا زمانی که یک شرط خاص برقرار است، تکرار کند.
این مقاله شامل نحوه استفاده از حلقه while به همراه مثال های کاربردی،امکان استفاده از while با چندین شرط، ترکیب while با دستورات کنترلی if و switch، مدیریت خطاها در حلقههای while – استفاده از try-catch و بسیاری از مثال ها و کاربردهای دیگر به همراه کد و خروجی است. شما پس از مطالعه این مقاله میتوانید از دستور while در پروژه های متلب خود استفاده کنید. با این وجود درصورتی که نیاز دارید شخص دیگری انجام پروژه های متلب شما را برعهده بگیرد، میتوانید این کار را به مجموعه پروژستان بسپارید.
تفاوت دستور while با دستور for این است که حلقه for برای تعداد معینی از تکرارها مناسب است، در حالی که حلقه while برای مواردی استفاده میشود که تعداد تکرارها از قبل مشخص نیست و بستگی به شرط تعیین شده دارد. یکی از نکات مهم در استفاده از while، اطمینان از تغییر شرایط به نحوی است که حلقه در نهایت متوقف شود. برای مثال، اگر مقدار k در هر تکرار افزایش یا کاهش نیابد، حلقه بهصورت بیپایان اجرا خواهد شد. ساختار کلی دستور while به صورت زیر است:
while شرط
دستورات
end
که در آن، شرط یاcondition یک عبارت منطقی (Boolean) است. اگر این شرط درست (true) باشد، دستورات درون حلقه اجرا میشوند. این فرآیند تا زمانی که شرط نادرست (false) شود ادامه خواهد داشت.
مثال 1: محاسبه مجموع اعداد از 1 تا n
clc; clear; close all
n = input(‘Enter a num= ‘);
sum = 0;
k = 1;
while k <= n
sum = sum + k;
k = k + 1;
end
disp([‘Sum of 1 to ‘, num2str(n), ‘ is: ‘, num2str(sum)]);
خروجی:
Enter a num= 10
Sum of 1 to 10 is: 55
توضیح: n عدد وارد شده توسط کاربراست و حلقه while تا زمانی که مقدارk از n کمتر یا مساوی باشد، اجرا میشود و در هر مرحله مقدار k به مجموع (sum) اضافه میشود.
مثال 2: محاسبه مقدار فاکتوریل یک عدد
clc; clear; close all
n = input(‘Enter a num= ‘);
factorial = 1;
k = 1;
while k <= n
factorial = factorial * k;
k = k + 1;
end
disp([‘Factorial of ‘, num2str(n), ‘ is: ‘, num2str(factorial)]);
خروجی:
Enter a num= 10
Factorial of 10 is: 3628800
توضیح: n عدد وارد شده توسط کاربراست و حلقه while تا زمانی که مقدارk از n کمتر یا مساوی باشد، اجرا میشود و در هر مرحله مقدار k به فاکتوریل قبلی (factorial) ضرب میشود.
مثال3- امکان استفاده از while با چندین شرط
clc; clear; close all
a = 1;
b = 10;
while a < 5 && b > 0
disp([‘a = ‘, num2str(a), ‘, b = ‘, num2str(b)]);
a = a + 1;
b = b – 2;
end
خروجی:
a = 1, b = 10
a = 2, b = 8
a = 3, b = 6
a = 4, b = 4
توضیح: در دستورwhile با چندین شرط، تا زمانی که تمام شرایط درست باشند، حلقه اجرا خواهد شد.
مثال4-ترکیب while با دستورات کنترلی if و switch
clc; clear; close all
i = 1;
while i <= 10
if mod(i, 2) == 0
disp([num2str(i), ‘ is even’]);
else
disp([num2str(i), ‘ is odd’]);
end
i = i + 1;
end
خروجی:
1 is odd
2 is even
3 is odd
4 is even
5 is odd
6 is even
7 is odd
8 is even
9 is odd
10 is even
توضیح: ترکیب while با دستورات شرطی دیگر امکان پیادهسازی الگوریتمهای پیچیدهتر را فراهم میکند.
مثال5- دستور break
clc; clear; close all
k = 1;
while true
disp([‘Iteration ‘, num2str(k)]);
if k == 3
break;
end
k = k + 1;
end
خروجی:
Iteration 1
Iteration 2
Iteration 3
توضیح: یکی از روشهای بهبود کارایی در حلقههای while استفاده از دستورات کنترلی مانند break برای خروج زودهنگام از حلقه است. موقعی که در این برنامه به عدد 3 رسید برنامه قطع می شود و از while خارج می شود.
مثال 6: جستجوی باینری
clc; clear; close all
array = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19];
target = 17;
left = 1;
right = length(array);
found = false;
while left <= right
mid = floor((left + right) / 2);
if array(mid) == target
found = true;
break;
elseif array(mid) < target
left = mid + 1;
else
right = mid – 1;
end
end
if found
disp([‘Target found at index ‘, num2str(mid)]);
else
disp(‘Target not found’);
end
خروجی:
Target found at index 9
توضیح: وقتی برنامه به عدد 17 می رسد موقعیت عدد 11 که در جایگاه 9 است را اعلام می کند.
مثال 7: الگوریتمهای عددی (مثل نیوتن-رافسون)
clc; clear; close all
f = @(x) x^2 – 10;
df = @(x) 2*x;
x0 = 1;
tol = 1e-6;
max_iter = 100;
iter = 0;
while abs(f(x0)) > tol && iter < max_iter
x0 = x0 – f(x0)/df(x0);
iter = iter + 1;
end
disp([‘Root is approximately: ‘, num2str(x0)]);
خروجی:
Root is approximately: 3.1623
توضیح:
با استفاده از روش تکراری نیوتن رافسون با دستور While مقدار ریشه پیدا شد باید توجه داشت که:
3.1623^2 = 10.0001
مثال8. مدیریت خطاها در حلقههای while – استفاده از try-catch
clc; clear; close all
i = 1;
while i <= 10
try
% خطای عمدی برای نمایش try-catch
if i == 5
error(‘Custom Error at i = 5’);
end
disp([‘Iteration ‘, num2str(i)]);
catch ME
disp([‘Error occurred: ‘, ME.message]);
end
i = i + 1;
end
خروجی برنامه:
Iteration 1
Iteration 2
Iteration 3
Iteration 4
Error occurred: Custom Error at i = 5
Iteration 6
Iteration 7
Iteration 8
Iteration 9
Iteration 10
توضیح: برای جلوگیری از توقف ناگهانی برنامه در تکرار 5 به دلیل وقوع خطا، میتوان از دستور try-catch در داخل حلقه استفاده کرد.


