دستورهای انتقال کنترل control statements
DESCRIPTION
دستورهای انتقال کنترل Control Statements. انواع. IF CASE DO توجه: در فرترن احکام غير اجرايي (مثل اعلان) در اين بلوک ها پذيرفته نمی شود هر کدام ازاين بلک ها می تواند با نوعی ديگر به صورت متداخل ترکيب شوند جهت سهولت در فهم برنامه می توان به دلخواه به هر بلوک يک نام اختصاص داد. - PowerPoint PPT PresentationTRANSCRIPT
کنترل انتقال دستورهایعباسپور
1
دستورهای انتقال کنترلControl Statements
کنترل انتقال دستورهایعباسپور
2
انواع
IFCASEDO
توجه: در فرترن احکام غير اجرايي )مثل اعالن( در اين بلوک ها پذيرفته نمی شود
هر کدام ازاين بلک ها می تواند با نوعیديگر به صورت متداخل ترکيب شوند
جهت سهولت در فهم برنامه می توان بهدلخواه به هر بلوک يک نام اختصاص داد
کنترل انتقال دستورهایعباسپور
3
دستور های شرطیConditional Statements
هر تصميمی احتياج به برآورده شدن شرط يا •شروطی دارد )حتی در زندگی روز مره(
با بر آورده شدن شرايط يک سری عمليات •انجام می گيرد
اگر هوا آفتابی باشد–•............•.............
شرايط به صورت دستور های منطقی بيان • FALSE يا TRUEمی شوند که بر اساس نتيجه
عملياتی انجام می گيرد
کنترل انتقال دستورهایعباسپور
4
FLOW CONTROLجريان کنترل
انتخاب و کنترل مسير اجرای برنامه از •ابزار مهم و قدرتمند در برنامه نويسی
است دو ساختار زير جهت C و 90در فرترن •
کنترل اجرا براساس خروجی يک عبارت منطقی مورد استفاده قرار می گيرد
IFساختار و دستور – CASEسازه و دستور –
کنترل انتقال دستورهایعباسپور
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
کنترل انتقال دستورهایعباسپور
6
ساختارIF THEN
IFساده ترين بلوک •
باشد TRUEچنانچه نتيجه دستوری منطقی •بلوکی شامل مجموعه ای از دستورات اجرا
می شود END IFدر غير اينصورت اجرا به بعد از •
منتقل می گرددفرم کلی•
[name:] IF (logical expression) THEN
block1
END IF name
Logical expression
FALSE
TRUE
BLOCK1
کنترل انتقال دستورهایعباسپور
7
اجازه می دهد بر اساس نتيجه منطقی دو مسير مختلف انتخاب گردد. يک
false بودن و مسير ديگر با trueمسير با بودن اجرا می شود. در هر تکرار فقط
يک بلوک می تواند اجرا شود[name:] IF (logical expression) THEN
block1
ELSE
block2
END IF name
ساختارIF THEN ELSE
Logical expression
FALSETRUE
BLOCK2BLOCK1
کنترل انتقال دستورهایعباسپور
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
کنترل انتقال دستورهایعباسپور
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ادامه در صفحه بعد
کنترل انتقال دستورهایعباسپور
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
کنترل انتقال دستورهایعباسپور
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
کنترل انتقال دستورهایعباسپور
12
ساختاری قديمی است که ساختار چندگانه جايگزين آن •شده است
ممکن است بعضی از کامپايلر ها آن را قبول نکنند•فرم کلی•
IF (FORTRAN arithmetic expression) a, b, ca, b, cعدد برچسب دستور هستند
اگر داخل پرانتز:aمنفی به دسنور bصفر به دستور می رودcمثبت به دستور
مثالIF (x-6.)100,200,300
ساختار محاسباتیArithmetic IF
کنترل انتقال دستورهایعباسپور
13
GO TOساختار با اين دستور بدون هيچ شرطی و يا بر آورده شدن •
شروطی خاص کنترل به دستوری معين به سمت جلو و يا عقب می رود
به بعد سعی می شود از 90با اين وجود از فرترن •دستورات برچسب دار استفاده نشود
فرم کلی•GO TO lable
مثالIF (x>10.) GO TO 10…………
10 WRITE(*,*)……….GO TO 25……..………
کنترل انتقال دستورهایعباسپور
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
کنترل انتقال دستورهایعباسپور
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”);
کنترل انتقال دستورهایعباسپور
16
C در if ساختار بلوک
باشد باید از بلوک }{ 1 بیشتر از ifاگر تعداد دستورات در •استفاده نمود
کلی • فرمif (<expression>){
<statement1>………….<statement n>}else {<statement1>………….<statement n>}
کنترل انتقال دستورهایعباسپور
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);• }• }
کنترل انتقال دستورهایعباسپور
18
برنامه نکات
فایل exitتابع • دارد stdlib.hدر قراراز – خروج نحوه دهنده نشان که است عدد یک آن ارگومان
است برنامهعادی 0عدد • خروجخطا • بروز بدلیل خروج صفر غیر عدد هر
ای ) cدر • مقایسه عبارت غیر 0حاصل یا ( 0و است شرط قسمت در توان می عبارت ifبنابراین بجای
گرداند می باز را مقدار یک که عبارتی هر ای مقایسهداد قرار
If )!a( …..
بود aاگر خواهد درست ان نقیض باشد صفر
کنترل انتقال دستورهایعباسپور
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!”(;
کنترل انتقال دستورهایعباسپور
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>;
کنترل انتقال دستورهایعباسپور
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(; • }
کنترل انتقال دستورهایعباسپور
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 اجرا شود
کنترل انتقال دستورهایعباسپور
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
کنترل انتقال دستورهایعباسپور
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
کنترل انتقال دستورهایعباسپور
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>;
}
کنترل انتقال دستورهایعباسپور
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در
کنترل انتقال دستورهایعباسپور
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);}
کنترل انتقال دستورهایعباسپور
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 آرام جريان
کنترل انتقال دستورهایعباسپور
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
کنترل انتقال دستورهایعباسپور
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 ادامه.........
کنترل انتقال دستورهایعباسپور
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.............................ادامه
کنترل انتقال دستورهایعباسپور
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)
کنترل انتقال دستورهایعباسپور
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
کنترل انتقال دستورهایعباسپور
34
Repetitionعمليات تکرار
از مهمترين ويژگيهای هر زبان برنامه •نويسی است
DO (DO Construct)ساختار •جهت تکرار بلوک هايي از دستورات مختلف–فرم کلی–
[name:] DO [Control Clause شرط[ کنترل
block
END DO [name]