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

Preview:

DESCRIPTION

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

Citation preview

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

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

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

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

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

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

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

ها حلقه•

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

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

x

abs_x=x

x<0

abs_x=-x

abs_x

YesNo

دانشگاه صنعت آب و برق 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

دانشگاه صنعت آب و برق 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

دانشگاه صنعت آب و برق 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

دانشگاه صنعت آب و برق 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

دانشگاه صنعت آب و برق 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

دانشگاه صنعت آب و برق 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

دانشگاه صنعت آب و برق 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

دانشگاه صنعت آب و برق 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

دانشگاه صنعت آب و برق 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

(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

(2مثال )روش

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

Read*, x

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

F = 1

Else

F = 0

End if

Print*, F

End

(3مثال )روش

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

Read*, x

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

F = 0

Else

F = 1

End if

Print*, F

End

دانشگاه صنعت آب و برق 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

دانشگاه صنعت آب و برق 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

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

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

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

range 90

85

80

75

70

65

60

<60

grade A AB B BC C CD D F

دانشگاه صنعت آب و برق 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'

دانشگاه صنعت آب و برق 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

دانشگاه صنعت آب و برق 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

...

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

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

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

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

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

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

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

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

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

incr

Index<=iend

.False.

Statement 1Statement 2

.

.

.True.

دانشگاه صنعت آب و برق 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پس از اتمام حلقه، کنترل برنامه به جمله بعد از •

منتقل می شود.

دانشگاه صنعت آب و برق 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

دانشگاه صنعت آب و برق 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

دانشگاه صنعت آب و برق 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

دانشگاه صنعت آب و برق 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

دانشگاه صنعت آب و برق 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

دانشگاه صنعت آب و برق 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

دانشگاه صنعت آب و برق 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

دانشگاه صنعت آب و برق 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

دانشگاه صنعت آب و برق 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.

دانشگاه صنعت آب و برق 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

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

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

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

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

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

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

دانشگاه صنعت آب و برق 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