Session 7 - Control Flow II.ppt

‫دستورات کنترلی ‪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‬‬