دستورهای انتقال کنترل control statements

34
رل ت ن ک ال ق ت نیا ورها ت س د ور ت س ا ب ع1 رل ت ن ک ال ق ت نی ا ورها ت س دControl Statements

Upload: hera

Post on 16-Jan-2016

30 views

Category:

Documents


0 download

DESCRIPTION

دستورهای انتقال کنترل Control Statements. انواع. IF CASE DO توجه: در فرترن احکام غير اجرايي (مثل اعلان) در اين بلوک ها پذيرفته نمی شود هر کدام ازاين بلک ها می تواند با نوعی ديگر به صورت متداخل ترکيب شوند جهت سهولت در فهم برنامه می توان به دلخواه به هر بلوک يک نام اختصاص داد. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

1

دستورهای انتقال کنترلControl Statements

Page 2: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

2

انواع

IFCASEDO

توجه: در فرترن احکام غير اجرايي )مثل اعالن( در اين بلوک ها پذيرفته نمی شود

هر کدام ازاين بلک ها می تواند با نوعیديگر به صورت متداخل ترکيب شوند

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

Page 3: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

3

دستور های شرطیConditional Statements

هر تصميمی احتياج به برآورده شدن شرط يا •شروطی دارد )حتی در زندگی روز مره(

با بر آورده شدن شرايط يک سری عمليات •انجام می گيرد

اگر هوا آفتابی باشد–•............•.............

شرايط به صورت دستور های منطقی بيان • FALSE يا TRUEمی شوند که بر اساس نتيجه

عملياتی انجام می گيرد

Page 4: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

4

FLOW CONTROLجريان کنترل

انتخاب و کنترل مسير اجرای برنامه از •ابزار مهم و قدرتمند در برنامه نويسی

است دو ساختار زير جهت C و 90در فرترن •

کنترل اجرا براساس خروجی يک عبارت منطقی مورد استفاده قرار می گيرد

IFساختار و دستور – CASEسازه و دستور –

Page 5: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

5

در فرترن IFساختار و دستور IF statement and construct

IFساده ترين فرم •IF (Logical Expression) Executable Statement

Statement ( نه غير اجرايي : هر دستور اجرايي( IF و خود دستور ديگری از ENDو بجز

باشد TRUE مقداری Logical Expressionاگر اجرا می شود statementانگاه دستور

در اين ساختار هميشه دستور بعد از آن اجرا می شود

Statementفقط بايد يک دستور واحد باشدمثال

IF (x<0.0) x=0.0

Page 6: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

6

ساختارIF THEN

IFساده ترين بلوک •

باشد TRUEچنانچه نتيجه دستوری منطقی •بلوکی شامل مجموعه ای از دستورات اجرا

می شود END IFدر غير اينصورت اجرا به بعد از •

منتقل می گرددفرم کلی•

[name:] IF (logical expression) THEN

block1

END IF name

Logical expression

FALSE

TRUE

BLOCK1

Page 7: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

7

اجازه می دهد بر اساس نتيجه منطقی دو مسير مختلف انتخاب گردد. يک

false بودن و مسير ديگر با trueمسير با بودن اجرا می شود. در هر تکرار فقط

يک بلوک می تواند اجرا شود[name:] IF (logical expression) THEN

block1

ELSE

block2

END IF name

ساختارIF THEN ELSE

Logical expression

FALSETRUE

BLOCK2BLOCK1

Page 8: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

8

چندين گزينه پشت سر هم امکان پذير است•تنها يک گزينه می تواند در هر بار اجرا شود• می END IFبه مجرد اجرای يک گزينه کنترل به انتهای •

رود جايگزين شده استCASE با ساختار 90در فرترن •

[name:] IF (logical expression) THEN block1 ELSE IF (logical expression) THEN block2 ELSE IF (logical expression) THEN

bolock3 ELSE block4

END IF name

ساختارچند گانهCascaded IF THEN ELSE

Page 9: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

9

IFمثال ساختار

، circleبرنامه ای بنويسيد که بر اساس شکل سطح )دايره ( در هر مورد Rectangle و مستطيل triangleمثلث

مساحت آنها را محاسبه نمايدPROGRAM shap! Finding area of a surface based on shape identification! shap= shape ID CHARACTER variable!radius= radius of circle!base= base of rectangle or Triangle!Height= height of rectangle or TriangleREAL:: area, radius, base, height, piCHARACTER (10):: shapPi=3.14!input shape ID to choose a branchPRINT*, “input shape ID as “”circle””, “”triangle””,&&“”rectangle””.”READ(*,*) shapادامه در صفحه بعد

Page 10: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

10

IF (shap(1:1) == “c” . OR. shap(1:1) == “C” )THEN PRINT*, “input radius of circle” READ (*,*) radius Area=pi*radius**2. PRINT*, “radius and area for circle”, radius, areaELSE IF (shap(1:1) == “t” . OR. shap(1:1) == “T” )THEN PRINT*, “input base and height of triangle” READ(*,*) base, height Area=0.5*base*height PRINT*, “base, height and area for triangle are”, base, height, areaELSE IF (shap(1:1) == “r” . OR. shap(1:1) == “R” )THEN PRINT*, “input base and height of rectangle” READ (*,*) base, height Area=base*height PRINT*, “base, height and area for rectangle are:”, base, height, areaELSE PRINT*, “the requested shape is not a circle, triangle or rectangle”END IFEND PROGRAM shap

Page 11: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

11

را می توان به صورت متداخل نيز نوشت. بطوريکه IFساختار •تقريباZ تداخل در هر جايي امکان پذير است

ماداميکه تصوير صحيحی از نوع تصميم داشته باشيد ساختاری •ساده است در غير اينصورت ممکن است برنامه به درستی اجرا

نشودفرم کلی:•

outer: IF( x>0.0 ) THEN block1... inner: IF( y<0.0 ) THEN block2…. END IF inner

ELSE ………… ………….

END IF outer

ساختار متداخلNested IF THEN ELSE

Page 12: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

12

ساختاری قديمی است که ساختار چندگانه جايگزين آن •شده است

ممکن است بعضی از کامپايلر ها آن را قبول نکنند•فرم کلی•

IF (FORTRAN arithmetic expression) a, b, ca, b, cعدد برچسب دستور هستند

اگر داخل پرانتز:aمنفی به دسنور bصفر به دستور می رودcمثبت به دستور

مثالIF (x-6.)100,200,300

ساختار محاسباتیArithmetic IF

Page 13: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

13

GO TOساختار با اين دستور بدون هيچ شرطی و يا بر آورده شدن •

شروطی خاص کنترل به دستوری معين به سمت جلو و يا عقب می رود

به بعد سعی می شود از 90با اين وجود از فرترن •دستورات برچسب دار استفاده نشود

فرم کلی•GO TO lable

مثالIF (x>10.) GO TO 10…………

10 WRITE(*,*)……….GO TO 25……..………

Page 14: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

14

ساختار مناسب ديگر در تصميم گيری• کنترل به دستوری خاص می INTEGERبر اساس مقدار يک •

رودبهتر است کمتر از اين دستور استفاده شود چون برنامه را •

مبهم می کند محاسباتی از دستورات منسوخ شده IFاين دستور و دستور •

هستند ولی می توان آنها را استفاده کرد90فرترن فرم کلی•

GO TO (n1,n2,n3,……..nr) integer expressionمثال

GO TO (100,200,300,400)IIاگر

و علی آخر200 باشد به دستور 2 ، 100 باشد به دستور 1 باشد دستور بعدی اجرا می 4 و يا بزرگتر از 1اگر کمتر از

شود

ساختارComputed GO TO

Page 15: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

15

Cدر ifساختار انتخاب فرم کلی•

if (<expression>) <statement>;<expression>( یا غیر 1 عبارت منطقی )درست

((0صفر( یا غلط )<statement >دستور اجرایی

اجباری است if پرانتز فرم دیگر•

if (<expression>) <statement1>;else <statement2>;

فقط یکی از دو دستور اجرا می شود در این دستور نیستthenنیاز به کلمه

If (grade>=10) printf(“passed”);else printf(“failed”);

Page 16: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

16

C در if ساختار بلوک

باشد باید از بلوک }{ 1 بیشتر از ifاگر تعداد دستورات در •استفاده نمود

کلی • فرمif (<expression>){

<statement1>………….<statement n>}else {<statement1>………….<statement n>}

Page 17: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

17

مثال: محاسبه ضرائب 2معادله درجه

• # include <stdio.h>• # include <stdlib.h>• # include <math.h>• void main(){• int a,b,c;• float x1,x2 ;• float delta;• printf("please enter a,b,c:"); • scanf("%d%d%d",&a,&b,&c);• if (a==0){• printf("wrong equation");• exit(0);• }• delta= b*b -4*a*c;

• if (delta<0)• printf("no answer");• else if (delta==0){• x1=-b/(2*a);• printf("ther is one answer, x= %f",x1);• }• else {• delta = sqrt(delta);• x1=(-b+delta)/(2*a);• x2=(-b-delta)/(2*a);• printf(" there are two answers, x1=%4.2f and x2= %4.2f", x1, x2);• }• }

Page 18: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

18

برنامه نکات

فایل exitتابع • دارد stdlib.hدر قراراز – خروج نحوه دهنده نشان که است عدد یک آن ارگومان

است برنامهعادی 0عدد • خروجخطا • بروز بدلیل خروج صفر غیر عدد هر

ای ) cدر • مقایسه عبارت غیر 0حاصل یا ( 0و است شرط قسمت در توان می عبارت ifبنابراین بجای

گرداند می باز را مقدار یک که عبارتی هر ای مقایسهداد قرار

If )!a( …..

بود aاگر خواهد درست ان نقیض باشد صفر

Page 19: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

19

If-else –if در cمتداخل

بمحض • و بررسی پایین به باال از ها شرطمی عبور ها شرط دیگر از شرط یک درستی

شودشود • آورده انتها در تر نادر های شرط

If )grade>=18( printf)“good”(; else if )grade>=15( printf)“medium”(;

else if )grade>=12( printf)“rather weak”(;else if )grade>=10( printf)“weak”(;

else printf)“failed!”(;

Page 20: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

20

متداخل ifدر else وضعیت هایمثال•

If )a<b( if )c<d( <statment1>;else <statement2>;

که tabوضعیت دهد می به elseنشان است ) ifمربوط در statement2دومکه شود می اجرا شرط a<bصورتی و (c<dدرست باشد غلط

نزدیکترین elseهر Cدر • دارد elseبدون ifبه تعلقمالکیت • ifتغییر

کردن – elseاضافهبلوک {}– از استفاده

If )a<b( if )c<d( <statment1>;else;

else <statement2>;

If )a<b( {if )c<d( <statment1>;

}else <statement2>;

Page 21: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

21

مثال

را • آنها حداکثر و دریافت را عدد سه که بنویسید ای برنامهکند چاپ

• # include <stdio.h>• void main)({• int a,b,c;• int max;• printf)"please enter 3 numbers:"(;• scanf)"%d%d%d",&a,&b,&c(;• if )a>b(• if)a>c( max=a;• else max=c;• else if )b>c(max=b;• else max=c;• printf)"maximum is %d", max(; • }

Page 22: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

22

در فرترنSELECT CASE ساختار خيلی ELSE می شود وقتی IF…THENروشی ساده که جايگزين ساختار •

تکرار شود به بعد وجود دارد90در فرترن •فرم کلی•

[name:] SELECT CASE( expression ) CASE( value ) [name] block ... [CASE DEFAULT block] END SELECT [name]

باشدcharacter, logical , integer ممکن است expressionنتيجه Value بايد هم نوع با نتيجه expression باشد

CASE DEFAULT انتخابی است ولی اگر باشد شامل تمام مقاديری است که توسط

CASE (VALUE)در نظر گرفته نشده است Value می تواند يک محدوده باشد ولی در هر صورت نبايد بر هم منطبق باشند

CASE (number:) يعنی با هر مقداری بزرگتر از number اجرا شود CASE (:number) يعنی با هر مقداری کوچکتر از number اجرا شود

Page 23: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

23

1مثالINTEGER :: month     season: SELECT CASE( month )

CASE(4,5) WRITE(*,*) `Spring'

CASE(6,7) WRITE(*,*) `Summer'

CASE(8:10) WRITE(*,*) `Autumn'

CASE(11,1:3,12) WRITE(*,*) `Winter'

CASE DEFAULT WRITE(*,*) `not a month'

END SELCET season

Page 24: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

24

2مثال

Wars: SELECTE CASE (nyears)CASE(1853:1856)

WAR=“Crimean War”CASE(1899:1902)

WAR=“Boer War”CASE(1914:1918)

WAR=“World War1”CASE(1939:1945)

WAR=“World War2”CASE DEFAULT

WAR=“Peace”END SELECT Wars

Page 25: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

25

در switch/ caseساختار چند انتخابی CSwitch (<expression>) {

case <constant1> : <statement1>; کلی فرم <statement2>;

…… <statementn>;

case <constant2> : <statement1>; <statement2>;

…… <statementn>;

………..case <constant m> : <statement1>;

<statement2>;……

<statementn>;Default : <statement1>; <statement2>;

…… <statementn>;

}

Page 26: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

26

•>)expression(< کاراکتری یا صحیح عدد عبارت یک•>constant< کاراکتری یا صحیح عدد ثابت یک•>)expression(< از یک هر می constantبا اجرا باشد برابر اگر و مقایسه ها

شودنباشد • برابر هیچکدام با شود Defaultاگر می اجراقسمت • دادن است Defaultقرار اختیاریبرای • و است انجام قابل صحیح و کاراکتری عبارات برای فقط ساختار این

! نمود استفاده توان نمی اعشاریتمام constantاولین • باشد صادق شود caseکه می اجرا نیز ان از پس هایاز ORحالت • یکی وقوع که دارید مختلف حالت چند اگر یعنی دارد، منطقی

شود می دستورات از ای مجموعه اجراء باعث آنهادستور • از توان می حالت این لغو هر breakبرای انتهای استفاده caseدر

نمودهاي breakدستور • ساختار هستند do/while, for, whileدر استفاده قابل همدستور • اولين به و خارج مربوط بلوك از كنترل شود مي سب دستور اين

برسد ساختار ان از پسهاي continueدستور • ساختار در استفاده do/while, for, whileهم قابل

هستند. ابتداي • به كنترل و شده نظر صرف بلوك باقيمانده اجراي از دستور اين با

گردد مي بر حلقه يا ساختارIf (number<0) break;If (number<0) continue;

switch/ caseساختار چند انتخابی Cدر

Page 27: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

27

switch/ case :مثال برنامه اي بنويسيد كه دو عدد و عملگري را

دريافت و نتيجه را چاپ نمايد

#include <stdio.h>void main(){ int number1, number2, result; char op; printf("please enter first number, operator and second number:"); scanf("%d%c%d", &number1, &op, &number2); result=0; switch (op){ case '+': result= number1+ number2; break; case '-': result= number1- number2; break; case '*': result= number1* number2; break; case '/': if (number2!=0)result= number1/ number2; else printf("error! there is no answer.\n"); break; case '%': if (number2!=0)result= number1% number2; else printf("error! there is no answer.\n"); break; default: printf("invalid operator!\n"); } printf("result=%d", result);}

Page 28: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

28

IFمثال کاربردی برای دستور

افت انرژی در لوله ها•تعيين نوع جريان بر اساس عدد رينولدز –

Re=VD/ ، v=Q/A ؛ A=d2/4 : Kinematic Viscosity (ft2/s)

Re>2000.جريان متالتم برای افت انرژی:Darcy-Weisbach معادله

hL=f(L/D)(v2/2g)افت بر حسب واحد وزن سيال

f: Friction Factor

f=64/Re for Rey2000 آرام جريان

Page 29: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

29

برای جريان متالتم:• :Chenمعادله •

8981.01098.1

2

8506.5)(

8257.2

1

log0452.5

7065.3log(01.2

e

e

RD

εA

ARD

εf

Swamee and معادله :Jain

2

9.0 )74.527.0

log(

25.0

eRDε

f

Colebrookمعادله

fRD

ε

f e

5226.2

7065.3log0.2

1

Page 30: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

30

برای محاسبه افتChenاستفاده از معادله PROGRAM headloss

!Calculating energy loss in a circular pipe !using Chen Eq.

! D=diameter of pipe, ft

! E= average size of roughness, ft

!AREA= Area of pipe, sq. ft

!VEL=velocity of flow

! NU= Kinematic Viscosity, ft**2/s

!Q= Volumetric flow rate, ft**3/s

!L=Length of pipe, ft

!F=friction factor

!HL=energy loss, ft ادامه.........

Page 31: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

31

REAL::D,AREA,VEL,NU,Q,L,E,RE,F,HL,G,PICHARACTER(LEN=9)::LABLEPRINT*, “input flow rate, cfs”READ(*,*)QPRINT*, “input diameter, ft”READ (*,*)DPRINT*, “input length of pipe, ft”READ (*,*)LPRINT*, “input size of roughness, ft”READ (*,*)EPRINT*, “input kinematic viscosity, ft**2/s”READ (*,*)NU!Initial calculations and specificationsG=32.17PI=3.1416AREA=PI*D**2/4.VEL=Q/AREARE=VEL*D/NU.............................ادامه

Page 32: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

32

!calculating f based on Re

IF (RE<=2000.)THEN

F=64./RE

LABLE="laminar"

ELSE

A1=5.8506/RE**0.8981

A2=1./2.8257*(E/D)**1.1098

A=A2+A1

F1=E/(3.7065*D)-5.0452/RE*LOG10(A)

F=(-2.01*LOG10(F1))**(-2)

LABLE="Turbulant"

END IF

HL=F*L/D*VEL**2/(2.*G)

Page 33: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

33

!Out put approperiate data

WRITE(*,*)

WRITE(*,*)"Flow rate=",Q,"cfs"

WRITE(*,*)"Pipe Diameter=",D,"ft"

WRITE(*,*)"Lenght of pipe=",L,"ft"

WRITE(*,*)"Size of ruoghness=",E,"ft"

WRITE(*,*)"Kinematic Viscosity=",NU,"ft**2/s"

WRITE(*,*)

WRITE(*,*)"Flow is",LABLE,"the friction factor is",F

WRITE(*,*)"The energy loss is",HL,"ft"

END PROGRAM headloss

Page 34: دستورهای انتقال کنترل Control Statements

کنترل انتقال دستورهایعباسپور

34

Repetitionعمليات تکرار

از مهمترين ويژگيهای هر زبان برنامه •نويسی است

DO (DO Construct)ساختار •جهت تکرار بلوک هايي از دستورات مختلف–فرم کلی–

[name:] DO [Control Clause شرط[ کنترل

block

END DO [name]