Sessiom 6- Control Flow I.ppt

‫دستورات کنترلی ‪1‬‬
‫تهیه و تنظیم‪:‬‬
‫فاطمه قاسمی‬
‫دانشگاه صنعتی شریف – پاییز ‪86‬‬
‫‪1‬‬
‫مرور مطالب ‪:‬‬
‫‪‬‬
‫ارزیابی عبارت های حسابی‬
‫نحوه ارزیابی عبارت های حسابی در پاسکال‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫قانون پرانتزها‪ :‬کلیه عبارات موجود در پرانتزها‪ ،‬باید به صورت‬
‫جداگانه ارزیابی شوند‪ .‬عبارات موجود در پرانتزهای تودرتو‪ ،‬باید از‬
‫داخل به بیرون ارزیابی شوند‪.‬‬
‫قانون تقدم عملگرها‪ :‬عملگرهای موجود در یک عبارت به ترتیب زیر‬
‫ارزیابی می شوند‪:‬‬
‫‪ mod ،div ،/ ،× ‬نسبت به ‪ - ،+‬تقدم دارند‪.‬‬
‫قانون سنجش از چپ‪ :‬عملگرها با اولویت یکسان از چپ به راست‬
‫ارزیابی می شوند‪.‬‬
‫‪2‬‬
‫مرور مطالب ‪:‬‬
‫‪‬‬
‫ارزیابی عبارت های حسابی‬
‫‪x×y×z+a/b-c×d‬‬
‫‪d‬‬
‫‪b‬‬
‫‪c‬‬
‫×‬
‫‪z‬‬
‫‪a‬‬
‫‪x‬‬
‫‪y‬‬
‫×‬
‫‪/‬‬
‫×‬
‫‪+‬‬
‫‪+‬‬
‫)‪(((x×y)×z)+(a/b))-(c×d‬‬
‫‪3‬‬
‫مرور مطالب ‪:‬‬
‫‪‬‬
‫‪‬‬
‫مثال ‪a×b/2×(a+b)=((a×b)/2) ×(a+b) :‬‬
‫عبارت هایی که دارای عملگر ‪ div‬و ‪ mod‬هستند‪:‬‬
‫‪ 7 div 2 / 3.0=(7 div 2)/3.0 ‬‬
‫‪‬‬
‫‪‬‬
‫ارزیابی عبارت های حسابی‬
‫‪ 7/2 div 3=(7/2) div 3‬‬
‫عملگر منفی کردن دارای یک عملوند است و اولویت آن برابر‬
‫ و ‪ +‬است‬‫‪‬‬
‫))‪a×-(b+c)=a×(-(b+c‬‬
‫‪4‬‬
‫ساختارهای کنترل‬
‫‪‬‬
‫‪‬‬
‫ساختارهای کنترل امکان کنترل روند اجرای برنامه را به می‬
‫دهند‪.‬‬
‫امکان تعریف دستورالعمل های منفرد به صورت یک واحد‬
‫منطقی را می دهد به طوری که آن واحدورود به‬
‫کنترل ‪1‬نقطه‬
‫ساختاریک‬
‫دارای‬
‫ساختار کنترل ‪1‬‬
‫ورودی و یک نقطه خروجی است‪.‬‬
‫خروج از ساختار کنترل‪1‬‬
‫ورود به ساختار کنترل‪2‬‬
‫ساختار کنترل ‪2‬‬
‫خروج از ساختار کنترل‪2‬‬
‫‪5‬‬
‫ساختارهای کنترل‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫ساده ترین روند اجرایی که دیدیم ترتیبی است‪.‬‬
‫توسط دستور ‪ begin end‬می توانیم مجموعه دستوری که به‬
‫صورت ترتیبی اجرا می شوند را تعریف کرد‪.‬‬
‫‪begin‬‬
‫ساختارهای کنترل عبارتند از ‪:‬‬
‫‪‬‬
‫‪‬‬
‫قطعه ای‬
‫انتخاب‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫;‪Statement‬‬
‫;‪Statement‬‬
‫…‬
‫عبارات منطقی‬
‫دستور ‪ if‬و ‪case‬‬
‫;‪Statement‬‬
‫تکرار‬
‫‪end‬‬
‫‪6‬‬
‫عبارات منطقی‬
‫‪‬‬
‫ساده ترین عبارت منطقی یک ثابت و یک متغیر منطقی است‪.‬‬
‫‪var‬‬
‫‪const‬‬
‫;‪fire : boolean‬‬
‫‪begin‬‬
‫;‪fire : = true‬‬
‫…‬
‫;‪IsValid = true‬‬
‫‪7‬‬
‫عبارات منطقی (ادامه)‬
‫‪‬‬
‫عبارات منطقی دارای عملگرهای رابطه ای هستند‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫>‪>= ،‬‬
‫<‪<= ،‬‬
‫< >‪= ،‬‬
‫نوع دادة عملوندهای یک عملگر رابطه ای باید یکسان باشند‪.‬‬
‫‪‬‬
‫هر دو باید از نوع ‪ Char ،Real ،Integer‬یا ‪ Boolean‬باشند و‬
‫یا یکی از آن ها از نوع ‪ Real‬و دیگری از نوع ‪ Integer‬باشد‬
‫‪8‬‬
)‫عبارات منطقی (ادامه‬
‫ که به عملوندهای‬and ،or ،not ‫با استفاده از عملگرهای منطقی‬
.‫ می توان عبارات منطقی پیچیده تری تولید کرد‬،‫منطقی نیاز دارند‬
(temperature>=100) and (fire)
(temperature<16) or (not fire)
((temperature<16) or (not fire)) and (IsValid)
x
y
x and y
x
y
x or y
T
T
T
T
T
T
T
F
F
T
F
T
F
T
F
F
T
T
F
F
F
F
F
F
9



x
not x
F
T
T
F

‫ارزیابی عبارات منطقی‬
‫‪‬‬
‫عبارات منطقی ممکن است شامل عملگرهای حسابی ‪ ،‬منطقی‬
‫و یا رابطه ای باشد‪.‬‬
‫‪‬‬
‫تقدم عملگرها به صورت زیر است‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪not‬‬
‫‪*,/, div, mod, and‬‬
‫‪+, -, or‬‬
‫=‪>,>=,<,<=,<>,‬‬
‫‪ x < min + max‬‬
‫‪ min <= x and x<=max‬‬
‫‪10‬‬
)‫ارزیابی عبارات منطقی (ادامه‬
not IsValid or (temperature+10>1.8*x)
IsValid
temperature
not
10
1.8
+ 188
false
IsValid
true
temperature
178
x
100.2
or
11
true
x
*
>
true

180.36
‫انتساب منطقی‬
‫‪‬‬
‫می توان دستوراتی نوشت که یک ارزش منطقی را به متغیر‬
‫منطقی نسبت دهد‪.‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫)‪same := ( x =y‬‬
‫)‪InRange := (N>-10) and (N<10‬‬
‫)‪IsLetter := ((‘A’<=ch) and (ch<= ‘Z’)) or ((‘a’<=ch‬‬
‫))’‪and (ch<=‘z‬‬
‫)‪IsEven := (N mod 2=0‬‬
‫‪12‬‬
if ‫دستور‬
.‫ است‬if ‫ساده ترین دستور انتخاب‬
.‫ می تواند دارای یک انتخاب یا دو انتخاب باشد‬if ‫دستور‬
If boolean_expr then
statement2


b_expr
statement1
else
statement2;
13
statement1
‫ برنامه ای بنویسید که ماکزیمم دو عدد را به‬:‫مثال‬
.‫دست آورد‬
Var
a, b, Max : Real;
Begin
Readln (a);
Readln (b);
Max := a;
If ( b > a ) Then Max := b;
Writeln (Max);
End.
14
‫برنامه بنویسید که قدرمطلق ورودی را به دست‬
.‫آورد‬
Var
x, y : Real;
Begin
Readln (x);
y := x;
If ( x < 0 ) Then y := -x;
Writeln (y);
End.
15
‫برنامه بنویسید که تابع دو ضابطه ای زیر را حساب‬
.‫کند‬
f ( x) 
Var
x : Real;
Begin
Readln (x);
If (( xx <> 00 )) Then
Then xx :=
:=x+10
x + 10;
If ( x >= 0 Else
) Thenx:x=:=x-10;
x - 10;
Writeln (x);
End.
16

x10 x0
x10 x0
‫ با دستورات مرکب‬if ‫دستور‬
‫ دارای دستورات مرکب‬if ‫دستورات‬
If boolean_expr then
begin
statement;
…
end
else
begin
statement;
…
end;
b_expr
17

‫دستورات ‪ if‬تودرتو و تصمیم گیری های چند‬
‫انتخابی‬
‫‪‬‬
‫‪‬‬
‫شرط ها یکی یکی‬
‫مورد بررسی قرار‬
‫می گیرند تا یک‬
‫شرط درست برقرار‬
‫شود‬
‫اگر دو شرط درست‬
‫باشند اولین دستور‬
‫اجرا می شود‪.‬‬
‫‪If boolean_expr then‬‬
‫‪statement‬‬
‫‪else‬‬
‫‪if boolean_expr then‬‬
‫;‪statement2‬‬
‫‪If b1 then st‬‬
‫‪else If b2 then st‬‬
‫‪else If b3 then st‬‬
‫‪else If b4 then st‬‬
‫…‬
‫; ‪else st‬‬
‫‪18‬‬
Yes
b1
No
Yes
b2
No
Yes
b3
No
Yes
b4
No
Yes
bn
No
19
‫[ را‬1,4] ‫برنامه ای بنویسید که جزء صحیح اعداد‬
.‫به دست آورد‬
Var
x, y : Real;
Begin
Readln (x);
If ( x >= 1 ) Then
If ( x < 2 ) Then y := 1;
If ( x >= 2 ) Then
If ( x < 3 ) Then y := 2;
If ( x >= 3 ) Then
If ( x < 4 ) Then y := 3;
Writeln (y);
End
20
‫برنامه تابع عالمت‬
Var
x, y : Real;
Begin
Readln (x);
If ( x > 0 ) Then y := 1
Else If ( x < 0 ) Then y := -1
Else
y := 0;
Writeln (y);
End.
21
 1 x0

f ( x)   0 x  0
 1 x  0

‫قواعد پاسکال برای جفت کردن ‪ else‬با ‪if‬‬
‫‪‬‬
‫کامپایلر پاسکال هر ‪ else‬را با نزدیکترین ‪ if‬که قبالً با ‪else‬‬
‫دیگری متناظر نشده باشد‪ ،‬جفت می کند‪.‬‬
‫‪‬‬
‫همانند جفت کردن پرانتز چپ و راست‬
‫‪22‬‬
if ‫ با‬else ‫قواعد پاسکال برای جفت کردن‬
‫مثال‬

:‫ تعلق گیرد‬if ‫ به اولین‬else ‫اگر بخواهیم‬

If x>0 then
if y>x then
writeln(‘y>x>0’)
else
writeln(‘(x>0) and (y<=x)’);
If x>0 then
begin
if y>x then writeln(‘y>x>0’)
end
else
writeln(‘(x>0) and (y<=x)’);
23
‫دستور ‪case‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫برای انتخاب یک حالت از چند گزینش استفاده می شود‪.‬‬
‫هنگامی که گزینش بر پایه مقدار یک متغیر یا عبارت ساده‬
‫باشد‪ ،‬استفاده از آن مفید است‪.‬‬
‫انتخاب کننده باید دارای نوع داده ای باشد که کلیه مقادیر آن‬
‫محدود باشند‪.‬‬
‫‪‬‬
‫‪‬‬
‫داده هایی که از نوع ‪ boolean ،integer‬و ‪ char‬باشند‪ ،‬داده های‬
‫محدود هستند‬
‫داده هایی که از نوع ‪ string‬و ‪ real‬هستند‪ ،‬داده های نامحدود هستند‬
‫‪24‬‬
)‫ (ادامه‬case ‫دستور‬
Var
c: char;
Begin
readln(c);
case c of
‘A’ , ‘a’ : writeln(‘A’);
‘B’,’b’:writeln(‘B’)
end;
End.
Var
c: char;
Begin
readln(c);
if (c=‘A’) or(c=‘a’) then
writeln(‘A’)
else if (c=‘B’) or(c=‘b’)
‘writeln(‘B’);
End.
25
‫دستور ‪( case‬ادامه)‬
‫‪‬‬
‫انتخاب کننده با برچسب ها‬
‫مقایسه می شود و اگر مقدار‬
‫انتخاب کننده در برچسب ها‬
‫صدق کند اجرا می شود و‬
‫پس از آن کنترل برنامه‬
‫روی اولین دستور بعد از‬
‫‪ end‬می رود‪.‬‬
‫‪26‬‬
‫‪Case selector of‬‬
‫;‪label1 : statement1‬‬
‫;‪label2 : statement2‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫;‪labeln : statementn‬‬
‫‪else‬‬
‫;‪statement‬‬
‫;‪end‬‬
‫دستور ‪( case‬ادامه)‬
‫‪‬‬
‫در صورتی که محتوی انتخاب کننده با هیچ یک از برچسب ها برابر‬
‫نباشد‪ ،‬دستوری اجرا نمی شود مگر اینکه ‪ else‬شرطی وجود داشته‬
‫باشد‪.‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫محافظت از دستور ‪ case‬با استفاده از ‪if‬‬
‫محتوی انتخاب کننده حداکثر در یک برچسب می تواند وجود داشته‬
‫باشد‪.‬‬
‫‪Interger‬‬
‫‪1,2:‬‬
‫سب‬
‫از محاسبه عبارت برچ‬
‫‪writeln‬که‬
‫نوع داده در انتخاب کننده باید با داده ای‬
‫‪2..6: writeln‬‬
‫بدست می آید یکسان باشد‪.‬‬
‫‪Boolean‬‬
‫‪True: writeln‬‬
‫‪False : writeln‬‬
‫‪‘a’,’b’,’c’: writeln‬‬
‫‪‘A’..’Z’: writeln‬‬
‫‪27‬‬
‫‪char‬‬