دستورات کنترلی 2
تهیه و تنظیم:
فاطمه قاسمی
دانشگاه صنعتی شریف – پاییز 86
1
مروری بر مطالب
ساختارهای کنترل عبارتند از :
قطعه ای
انتخاب
عبارات منطقی
دستور  ifو case
تکرار
While
For
repeat
2
while دستور
While boolean_exp do
St;
While boolesn_exp do
begin
St;
St;
end;
3
دستور ( whileادامه)
شرط تکرار حلقه
قبل از ورود به حلقه شرط تکرار بررسی می شود و در صورت
صحیح بودن وارد حلقه می شود.
تا زمانی که شرط حلقه برقرار است ،حلقه اجرا می شود
تغییر شرط
الزم است در بدنه شرط  ،شرط حلقه تغییر کند تا حلقه بینهایت نشود.
While B do
;St
B = True
No
4
Yes
دستور ( whileادامه)
متغیر کنترل حلقه
مقداردهی اولیه
مقدار شرط تکرار برای اولین دارای مقدار بامعنایی است.
آزمایش
بهنگام سازی
اطمینان می دهد در هر بار اجرای حلقه برنامه به سوی هدف معین گام بر می
دارد.
5
n!  محاسبه: مثال
Var n,m,factorial : Integer;
Begin
readln(n); m:=n;
if (n>=0) then
begin
factorial := 1;
while (n>0) do
begin
factorial := factorial * n;
n:= n-1;
end;
writeln(‘factorial ‘,m,’ is ’ ,factorial);
end
else writeln(‘Error!’);
End.
6
 برنامه زیر را ردیابی کنید: مثال
Var
HasDigit : Boolean;
n,counter : Integer;
begin
readln(n);
HasDigit := true; counter:= 0;
while (HasDigit) do
begin
n := n div 10;
HasDigit := n <> 0;
inc(counter);
end;
writeln (counter);
End.
7
نوع حلقه ها
تکرار حلقه به روش های مختلفی کنترل می شود
شمارشی
پرچم های منطقی
8
) تو در توwhile(  جدول ضرب: مثال
i:=1;
While i<=10 do
begin
j:=1;
while j<=10 do
begin
write(i*j:4);
j := j+1;
end;
i:= i+1;
writeln;
end;
9
for دستور
For variable:=Initial_value to final_value do
St;
For variable:=Initial_value downto final_value
do
St;
10
) ( ادامهfor دستور
var := initial
Inc(var)
Yes
St
var <= final
No
For i:=1 to 10 do
St;
11
دستور  ( forادامه)
اجزای حلقه
متغیر حلقه
مقدار اولیه و نهایی
بعد از اجرای بدنه حلقه ،مقدار آن افزایش (یا کاهش) می یابد.
مقدار نهایی فقط یک بار و قبل از ورود به حلقه تعیین می شود.
تغییر آن در بدنه حلقه بر تعداد تکرار حلقه تاثیری ندارد.
حلقه به تعداد باری که مقدار متغیر بین مقدار اولیه و نهایی
قرار دارد اجرا می شود
12
)مثال (بررسی نحوه اجرا
var i,j: integer;
begin
j:= 4;
for i:=1 to j do
begin
{ i:= i+1;}
writeln('i: ',i,'j: ', j);
j := j*i;
end;
readln;
end.
13
while  بهfor تبدیل دستور
i:= j+1;
n := k*8+l;
While (i<n) do
begin
i:= k div j ;
j:= j – 1;
k:= k*2;
i:= i+1;
end
For i:=j+1 to k*8+l do
begin
i:= k div j ;
j:= j – 1;
k:= k*2;
end
14
 چاپ مثلث اعداد: مثال
var
n,i,j : integer;
begin
readln (n);
for i:= 1 to n do
begin
write(1:(n-i+1));
for j:=2 to i do
write(j);
for j:=i downto 1 do
write(j);
writeln;
برنامه را طوری تغییر دهید که برای
 درست عمل10 اعداد بزرگتر از
.کند
end;
readln;
end.
15
شمارنده های نوع Char
در کنار نوع  ، integerمی توان از نوع  charاستفاده کرد:
for NextCh := ‘A’ to ‘Z’ do
)write(NextCh
16
Repeat دستور
Repeat
St;
Until boolean_expr
Repeat
St;
St;
Until boolean_expr
17
دستور Repeat
حلقه تا برقرار شدن شرط تکرار اجرا می شود.
شرط تکرار مانند دستور  whileاست.
پس از اجرای بدنه حلقه ،شرط تکرار بررسی می شود.
حلقه حداقل یکبار اجرا می شود.
Repeat
;St
;Until B
B = false
No
18
Yes
while  به دستورrepeat تبدیل دستور
)! داردh باشد آنگاه تبدیل به صورت زیر است (تبدیل بستگی به مقدارh=0 اگر
Repeat
i := i*k /h;
k := k+h ;
h:= h-1 ;
Until h=0;
h=0
h
:= 10;
iWhile
:= i*k(h<>0)
/h;
do
k :=
begin
k+h ;
h:= ih-1
:= i*k
; /h;
While
k :=
(h<>0)
k+h ; do
begin
h:= h-1 ;
end;
i := i*k /h;
k := k+h ;
h:= h-1 ;
end;
19
 محاسبه تعداد ارقام: مثال
Var
HasNoDigit : Boolean;
n,counter : Integer;
begin
readln(n);
counter:= 0;
repeat
n := n div 10;
HasNoDigit := (n = 0);
inc(counter);
until HasNoDigit;
writeln (counter);
End.
20
 پرسیدن یک کاراکتر برای ادامه برنامه: مثال
Var
c : Char;
Begin
Repeat
Writeln ( ‘ Your program is running! ’ );
Repeat
Readln (c);
Until (c = ‘Y’) or (c = ‘N’) ;
Until c = ‘N’ ;
Writeln ( ‘ Your program is finished! ’ );
End.
21
 میانگین تعدادی نامعلوم از اعداد: مثال
Var
n : Integer;
a , Sum : Real;
Begin
Sum := 0;
Repeat
Readln (a);
If a <> 0 Then
Begin
Sum := Sum + a;
n := n + 1;
End;
Until a = 0;
Writeln (Sum / n);
End.
22
دستورهای کنترل حلقه
 : Breakاجرای حلقه را متوقف می کند و کنترل برنامه به
دستور بعد از ساختار حلقه می رود.
 : Continueبه مرحله بعدی حلقه می رود.
 : Haltاز برنامه خارج می شود.
23
 ردیابی کنید: مثال
var
i,j : Integer;
begin
j:= 4;
for i:=1 to 4 do
begin
writeln('i:',i,'j:':3,j);
if (i=3) then continue;
i:=i+1 ;
j:=j*2;
end;
readln;
end.
24
اشکال زدایی
خطای یک بار بیشتر یا کمتر اجرا شدن
بررسی محدوده های حلقه
استفاده از  debuggerدر محیط پاسکال
25
تمرین 1
برنامه ای بنویسید که عدد مفروضی کاربر را حدس می زند.
عدد مفروضی کاربر بین  0تا  9999است .در ابتدا برنامه از
کاربر می خواهد عددی را در نظر بگیرد ،سپس با سواالت
مناسب عدد را بدست می آورد .سواالت می تواند به صورت
«آیا عدد شما بین  100تا  400است؟» .با توجه به پاسخ
کاربر  ،برنامه سوال مناسب تری می پرسد .الزم است برنامه
در تعداد سواالت بهینه باشد.
26
                
    
            
    
                © Copyright 2025 Paperzz