36
رق ب و ب آ ت ع ن صاه گ ش ن دآ1 ی ل ر ت ن ک ارهای ت خ سا ی ن ش دو وی ن س و م ر. ت/ ی ا3 ن ت ش رآ. ب و1388

ساختارهای کنترلی

Embed Size (px)

DESCRIPTION

ساختارهای کنترلی. موسوی ندوشنی ویراست پاییز 1388. ساختارهای کنترلی. در یک زبان ساختار یافته، می‌توان روی اجرا یک یا چند دستور و هم‌چنین تقدم و تاخر آنها کنترل داشت. این کنترل‌ها بطور عمده به دو صورت بیان می‌شوند. شرط ‌ ها حلقه ‌ ها. فلوچارت (روندنما) یک شرط. شرط ساده. - PowerPoint PPT Presentation

Citation preview

Page 1: ساختارهای کنترلی

دانشگاه صنعت آب و برق 1

ساختارهای کنترلی

موسوی ندوشنی1388ویراست پاییز

Page 2: ساختارهای کنترلی

دانشگاه صنعت آب و برق 2

ساختارهای کنترلی در یک زبان ساختار یافته، می توان روی اجرا

یک یا چند دستور و هم چنین تقدم و تاخر آنها کنترل داشت. این کنترل ها بطور عمده به دو

صورت بیان می شوند.ها شرط•

ها حلقه•

Page 3: ساختارهای کنترلی

دانشگاه صنعت آب و برق 3

فلوچارت )روندنما( یک شرط

x

abs_x=x

x<0

abs_x=-x

abs_x

YesNo

Page 4: ساختارهای کنترلی

دانشگاه صنعت آب و برق 4

شرط ساده.گرامر شرط ساده به صورت زیر است

If(logical expr.) exec-statementالمث:

R e a l :: x, A b s o l u t e_x R e a d*, x A b s o l u t e_x = x I F(x < 0.0) A b s o l u t e_x = -x P r i n t*, 'A b s o l u t e v a l u e o f', x, 'i s', A b s o l u t e_x E n d

Page 5: ساختارهای کنترلی

دانشگاه صنعت آب و برق 5

IFبلوک تر است، بدین در اینجا ساختار شرط پیچیده

معنی که در صورت برقراری شرط باید چند جمله اجرا شود. گرامر آن به صورت زیر

است: I f (l o g i c a l e x p r .) T h e n

• e x e c-s t a t e m e n t (s)

E n d if

Page 6: ساختارهای کنترلی

دانشگاه صنعت آب و برق 6

IFمثال بلوک ،در مثال زیر اگر متغیر دوم از متغیر اول بزرگتر بود

برنامه زیر جای آنها را با هم عوض می کند. I n t e g e r :: x, y, t e m p R e a d*, x, y I F (y>x) T h e n

• t e m p = y• y = x• x = t e m p

E n d I F P r i n t*, x, y E n d

Page 7: ساختارهای کنترلی

دانشگاه صنعت آب و برق 7

تر در حالت پیچیدهIFبلوک تر را در بلوک می توان حالت پیچیدهIF اعمال

نمود. I f (l o g i c a l e x p r .) T h e n

• e x e c-s t a t e m e n t (s)_1

E l s e• e x e c-s t a t e m e n t (s)_2

E n d if

Page 8: ساختارهای کنترلی

دانشگاه صنعت آب و برق 8

تر در حالت پیچیدهIFمثال بلوک مثال

I n t e g e r :: N u m b e r R e a d*, N u m b e r I F (m o d(N u m b e r, 2) == 0) T h e n

• W r i t e(*,*) N u m b e r, 'i s e v e n ' E l s e

• W r i t e(*,*) N u m b e r, 'i s o d d' E n d I F E n d

Page 9: ساختارهای کنترلی

دانشگاه صنعت آب و برق 9

(nested IF)شرط تو در تو می توان در داخل یک شرط، یک یا چند شرط دیگر را

به کار برد. I F (l o g i c a l e x p r e s s i o n) T h e n

• B l o c k_1• I F (l o g i c a l e x p r .) T h e n

B l o c k_2

• E l s e B l o c k_3

• E n d I F• B l o c k_4

E l s e• B l o c k_5

E n d I F

Page 10: ساختارهای کنترلی

دانشگاه صنعت آب و برق 10

مثال شرط تو در توبرنامه تعیین کوچکترین عدد بین سه عدد داده شده

I F (a < b) T h e n• I F (a < c) T h e n

R e s u l t = a

• E l s e R e s u l t = c

• E n d I F E l s e

• I F (b < c) T h e n R e s u l t = b

• E l s e R e s u l t = c

• E n d I F E n d I F

Page 11: ساختارهای کنترلی

دانشگاه صنعت آب و برق 11

(else if)دنباله شرط تو در تو اگر تعداد I F های تو در تو زیاد باشد، می توان از

گرامر زیر استفاده نمود: I F (l o g i c a l e x p r e s s i o n_1) T h e n

• B l o c k_1 E l s e I F(l o g i c a l e x p r e s s i o n_2) T h e n

• B l o c k_2 E l s e I F(l o g i c a l e x p r e s s i o n_3) T h e n

• B l o c k_3 E l s e

• B l o c k_4 E n d I F

Page 12: ساختارهای کنترلی

دانشگاه صنعت آب و برق 12

else if(: 1مثال ) مثال: برنامه تعیین کوچکترین عدد بین سه

عدد داده شده I F (a < b .A N D. a < c) T h e n

• R e s u l t=a

E l s e I F (b < a .A N D. b < c) T h e n• R e s u l t = b

E l s e• R e s u l t = c

E n d I F

Page 13: ساختارهای کنترلی

(1مثال )روش

دانشگاه صنعت آب و برق 13

0 5

) ( 1 5 5

0 5

x

F x x

x

ìï £ -ïïï= - < £íïï >ïïîRead*, x

if (x <= -5) Then

F = 0

Elseif (x <= 5) Then

F = 1

Else

F = 0

End if

Print*, F

End

Page 14: ساختارهای کنترلی

(2مثال )روش

دانشگاه صنعت آب و برق 14

Read*, x

if (x > -5 .AND. x <= 5) Then

F = 1

Else

F = 0

End if

Print*, F

End

Page 15: ساختارهای کنترلی

(3مثال )روش

دانشگاه صنعت آب و برق 15

Read*, x

if (x <= -5 .OR. x > 5) Then

F = 0

Else

F = 1

End if

Print*, F

End

Page 16: ساختارهای کنترلی

دانشگاه صنعت آب و برق 16

else if(: 2مثال ) Integer :: x Character(Len = 1) :: Grade IF (x < 50) Then

• Grade = 'F' Else IF (x < 60) Then

• Grade = 'D' Else IF (x < 70) Then

• Grade = 'C' Else IF (x < 80) Then

• Grade = 'B' Else

• Grade = 'A' End IF

Page 17: ساختارهای کنترلی

دانشگاه صنعت آب و برق 17

select caseساختار وقتی تعداد شاخه های شرط زیاد باشد، می توان از ساختاری

استفاده نمود. گرامر آن به صورت زیر s e l e c t c a s e به نام است:

s e l e c t c a s e(s e l e c t o r)• c a s e(l a b e l-l i s t-1)

s t a t e m e n t s_1

• c a s e(l a b e l-l i s t-2) s t a t e m e n t s_2

• ...........................................• ...........................................• c a s e(l a b e l-l i s t-n)

s t a t e m e n t s_n

• c a s e d e f a u l t s t a t e m e n t s d e f a u l t

E n d s e l e c t

Page 18: ساختارهای کنترلی

دانشگاه صنعت آب و برق 18

select caseمثال ساختار سه عدد را بخوانید، میانگین آن ها را محاسبه

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

range 90

85

80

75

70

65

60

<60

grade A AB B BC C CD D F

Page 19: ساختارهای کنترلی

دانشگاه صنعت آب و برق 19

select caseکدهای مثال R e a l :: M a r k1, M a r k2, M a r k3 R e a l :: A v e r a g e C h a r a c t e r(L e n = 2) :: G r a d e R e a d(*,*) M a r k1, M a r k2, M a r k3 A v e r a g e = (M a r k1+M a r k2+M a r k3)/3.0 s e l e c t c a s e(N I N T(A v e r a g e))

• c a s e(:59) G r a d e = 'F'

• c a s e(60:64) G r a d e = 'D'

Page 20: ساختارهای کنترلی

دانشگاه صنعت آب و برق 20

select caseکدهای مثال • c a s e(65:69)

G r a d e = 'C D'

• c a s e(70:74) G r a d e = 'C'

• c a s e(75:79) G r a d e = 'B C'

• c a s e(80:84) G r a d e = 'B'

• c a s e(85:89) G r a d e = 'A B'

• c a s e d e f aul t G r a d e = 'A'

E n d s e l e c t

Page 21: ساختارهای کنترلی

دانشگاه صنعت آب و برق 21

select caseفلوچارت

Case_sel_1 Case_sel_2 Case_sel_nNot in range ...

Block 1

In range

Block 2

In range

Block n

In range

Default Block

Not in rangeNot in range

...

Page 22: ساختارهای کنترلی

دانشگاه صنعت آب و برق 22

(loop)حلقه در بسیاری از موارد باید یک یا چند دستور به

به تعداد معین یا نامعین تکرار شوند.مثال های زیر توجه کنید.

را چاپ 1000 می خواهید اعداد زوج بین صفر تا •کنید

یا مقسوم علیه های یک عدد را پیدا کنید. • همانطور که در باال نیز به آن اشاره شد، دو

تمیز داد: نوع حلقه را می توان از همحلقه با تعداد تکرار معلوم•

حلقه با تعداد تکرار نامعلوم•

Page 23: ساختارهای کنترلی

دانشگاه صنعت آب و برق 23

فلوچارت یک حلقه تکرارIndex=istart

incr

Index<=iend

.False.

Statement 1Statement 2

.

.

.True.

Page 24: ساختارهای کنترلی

دانشگاه صنعت آب و برق 24

حلقه با تعداد تکرار معلومبرای این کار از دستور D O استفاده می شود که گرامر

آن به شرح زیر است: D O v a r = i n i t i a l_v a l u e, f i n a l_v a l u e [, s t e p_s i z e]

• s t a t e m e n t s

E n d D Oباید صحیح افزایش و مقدارو مقدار مقادیر شروع، خاتمه•

باشند. حذف شود، مقدار پیش فرض آن یک مقدار افزایش اگر•

خواهد بود. جمالت حلقه فقط یک بار اجرا می شوند. v a r برای هر مقدار از• end doپس از اتمام حلقه، کنترل برنامه به جمله بعد از •

منتقل می شود.

Page 25: ساختارهای کنترلی

دانشگاه صنعت آب و برق 25

(1مثال حلقه ) عدد را به دست آورید.10 میانگین

I n t e g e r :: c o u n t, s u m, i n p u t R e a l :: a v e r a g e s u m = 0 D O c o u n t = 1, 10

• R e a d(*,*) i n p u t• s u m = s u m + i n p u t

E n d D O A v e r a g e = s u m/10.0

Page 26: ساختارهای کنترلی

دانشگاه صنعت آب و برق 26

(2مثال حلقه )فاکتوریل یک عدد مانند n .را به دست آورید

I n t e g e r :: F a c t o r i a l, n, i R e a d(*,*) n F a c t o r i a l = 1 D O i = 1, n

• F a c t o r i a l = F a c t o r i a l*i

E n d D O

Page 27: ساختارهای کنترلی

دانشگاه صنعت آب و برق 27

(3مثال حلقه ) مقادیر شروع، خاتمه و مقدار افزایش می تواند

عبارت نیز باشند. I n t e g e r :: a, b, c I n t e g e r :: L i s t R e a d(*,*) a, b, c D O L i s t = M a x(a,b,c), M i n(a,b,c), -1

• W r i t e(*,*) L i s t

E n d D O

Page 28: ساختارهای کنترلی

دانشگاه صنعت آب و برق 28

(1 )حلقه با تعداد تکرار نامعلوم:به فرم زیر توجه کنید

D O• s t a t e m e n t s

E n d D O همانطور که مالحظه می کنید، عملیات داخل حلقه D O \ دائما

تکرار می شود و انتهایی ندارد چون مکانیزمی برای خروج از E x i t حلقه تعبیه نشده است. برای خروج از حلقه از فرمان

.استفاده می شود. به دو گرامر زیر توجه کنید D O

• s t a t e m e n t s_1• I F (l o g i c a l-e x p r e s s i o n) E x i t• s t a t e m e n t_2

E n d D O

Page 29: ساختارهای کنترلی

دانشگاه صنعت آب و برق 29

(2 )حلقه با تعداد تکرار نامعلوم.گرامر فرم دوم به صورت زیر است

D O• s t a t e m e n t s_1

• I F (l o g i c a l-e x p r e s s i o n) T h e n s t a t e m e n t s E x i t

• E n d I F

• s t a t e m e n ts_2

E n d D O

Page 30: ساختارهای کنترلی

دانشگاه صنعت آب و برق 30

حلقه با تعداد تکرار مثال نامعلوم

برنامه زیر اعداد را با هم جمع می کند و متوقفمگر آنکه یک عدد منفی وارد شود. نمی شود

I n t e g e r :: x, s u m s u m = 0 D O

• R e a d(*,*) x

• I F (x < 0) E x i t

• s u m = s u m + x

E n d D O

Page 31: ساختارهای کنترلی

دانشگاه صنعت آب و برق 31

حلقه با تعداد تکرار مثال نامعلوم

مگر برنامه زیر اعداد را با هم جمع می کند و متوقف نمی شودآنکه یک عدد منفی وارد شود.

I n t e g e r :: x, s u m, n s u m = 0 n = 0 D O

• R e a d(*,*) x• I F (x<0) E x i t• IF (x == 0) Cycle• s u m = s u m + x• n = n + 1

E n d D O Print*, 'Average = ', sum / Real(n) End

Page 32: ساختارهای کنترلی

دانشگاه صنعت آب و برق 32

Do Whileحلقه فرم دیگری را می توان برای حلقه با تعداد تکرار

شرح زیر است: نامعلوم به کار برد که گرامر آن به D O W h i l e(l o g i c a l-e x p r e s s i o n)

• s t a t e m e n t s

E nd DO حلقه D O W h i l e :معادل حلقه زیر است

D O• I F(.N O T. l o g i c a l e x p r e s s i o n) E x i t

• s t a t e m e n t s

E n d D O

Page 33: ساختارهای کنترلی

دانشگاه صنعت آب و برق 33

Do Whileفلوچارت حلقه start

Read x

X<0

n=n+1sum_x=sum_x+xsum_x2=sum_x2+x**2

Calculatex_bar, std_dev

Write x_barStd_dev ,n

end

.False.

.True.

Page 34: ساختارهای کنترلی

دانشگاه صنعت آب و برق 34

Do Whileمثال حلقه اول و معلوم می کند که )۳بزرگتر از (را می خواند فردی برنامه زیر عدد

است یا خیر؟ I n t e g e r :: n=3 I n t e g e r :: p, R e m R e a d(*,*) p R e m = m o d(p,n) D O

• I F(R e m == 0 .O R. n >= s q r t(R e a l(p))) E x i t• n = n+2• R e m = m o d(p,n)

E n d D O I F (R e m /= 0) T h e n

• W r i t e(*,*) p, ' i s p r i m e' E l s e

• W r i t e(*,*) p, ' i s n o t p r i m e' E n d I F E n d

Page 35: ساختارهای کنترلی

دانشگاه صنعت آب و برق 35

(nested loops)های تو در تو حلقه می توان در یک حلقه تکرار، حلقه و یا

نکته حلقه های تکرار دیگری را به کار برد، تنهامهم این است که حلقه ها نباید با هم تداخل

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

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

نماید. 1, 1+2, 1+2+3, 1+2+3+4, ..., 1+2+3+...+10

Page 36: ساختارهای کنترلی

دانشگاه صنعت آب و برق 36

کدهای مثال قبل I n t e g e r :: i, j, s u m D O i = 1, 10

• s u m = 0

• D O j = 1, i s u m = s u m+j

• E n d D O

• W r i t e(*,*) s u m

E n d D O E n d