Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "دستورهای انتقال کنترل عباسپور 1 دستورهای انتقال کنترل Control Statements."— Presentation transcript:

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

2 دستورهای انتقال کنترل عباسپور 2 انواع IF CASE DO توجه: در فرترن احکام غير اجرايي (مثل اعلان) در اين بلوک ها پذيرفته نمی شود  هر کدام ازاين بلک ها می تواند با نوعی ديگر به صورت متداخل ترکيب شوند  جهت سهولت در فهم برنامه می توان به دلخواه به هر بلوک يک نام اختصاص داد

3 دستورهای انتقال کنترل عباسپور 3 دستور های شرطی Conditional Statements هر تصميمی احتياج به برآورده شدن شرط يا شروطی دارد (حتی در زندگی روز مره) با بر آورده شدن شرايط يک سری عمليات انجام می گيرد –اگر هوا آفتابی باشد......................... شرايط به صورت دستور های منطقی بيان می شوند که بر اساس نتيجه TRUE يا FALSE عملياتی انجام می گيرد

4 دستورهای انتقال کنترل عباسپور 4 جريان کنترل FLOW CONTROL انتخاب و کنترل مسير اجرای برنامه از ابزار مهم و قدرتمند در برنامه نويسی است در فرترن 90 و C دو ساختار زير جهت کنترل اجرا براساس خروجی يک عبارت منطقی مورد استفاده قرار می گيرد –ساختار و دستور IF –سازه و دستور CASE

5 دستورهای انتقال کنترل عباسپور 5 ساختار و دستور IFدر فرترن IF statement and construct ساده ترين فرم IF IF (Logical Expression) Executable Statement Statement : هر دستور اجرايي ( نه غير اجرايي و بجز END و خود دستور ديگری از IF) اگر Logical Expression مقداری TRUE باشد انگاه دستور statement اجرا می شود در اين ساختار هميشه دستور بعد از آن اجرا می شود Statementفقط بايد يک دستور واحد باشد مثال IF (x<0.0) x=0.0

6 دستورهای انتقال کنترل عباسپور 6 ساختار IF THEN ساده ترين بلوک IF چنانچه نتيجه دستوری منطقی TRUE باشد بلوکی شامل مجموعه ای از دستورات اجرا می شود در غير اينصورت اجرا به بعد از END IF منتقل می گردد فرم کلی [name:] IF (logical expression) THEN block1 END IF name Logical expression FALSE TRUE BLOCK1

7 دستورهای انتقال کنترل عباسپور 7 اجازه می دهد بر اساس نتيجه منطقی دو مسير مختلف انتخاب گردد. يک مسير با true بودن و مسير ديگر با false بودن اجرا می شود. در هر تکرار فقط يک بلوک می تواند اجرا شود [name:] IF (logical expression) THEN block1 ELSE block2 END IF name ساختار IF THEN ELSE Logical expression FALSE TRUE BLOCK2BLOCK1

8 دستورهای انتقال کنترل عباسپور 8 چندين گزينه پشت سر هم امکان پذير است تنها يک گزينه می تواند در هر بار اجرا شود به مجرد اجرای يک گزينه کنترل به انتهای END IF می رود در فرترن 90 با ساختار CASE جايگزين شده است [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 دستورهای انتقال کنترل عباسپور 9 مثال ساختار IF برنامه ای بنويسيد که بر اساس شکل سطح (دايره circle، مثلث triangle و مستطيل Rectangle) در هر مورد مساحت آنها را محاسبه نمايد 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 Triangle REAL:: area, radius, base, height, pi CHARACTER (10):: shap Pi=3.14 !input shape ID to choose a branch PRINT*, “input shape ID as “”circle””, “”triangle””,& &“”rectangle””.” READ(*,*) shapادامه در صفحه بعد

10 دستورهای انتقال کنترل عباسپور 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, area ELSE 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, area ELSE 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, area ELSE PRINT*, “the requested shape is not a circle, triangle or rectangle” END IF END PROGRAM shap

11 دستورهای انتقال کنترل عباسپور 11 ساختار IF را می توان به صورت متداخل نيز نوشت. بطوريکه تقريباً تداخل در هر جايي امکان پذير است ماداميکه تصوير صحيحی از نوع تصميم داشته باشيد ساختاری ساده است در غير اينصورت ممکن است برنامه به درستی اجرا نشود فرم کلی: 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 دستورهای انتقال کنترل عباسپور 12 ساختاری قديمی است که ساختار چندگانه جايگزين آن شده است ممکن است بعضی از کامپايلر ها آن را قبول نکنند فرم کلی IF (FORTRAN arithmetic expression) a, b, c a, b, c عدد برچسب دستور هستند اگر داخل پرانتز: منفی به دسنور a صفر به دستور b مثبت به دستور c می رود مثال IF (x-6.)100,200,300 ساختار محاسباتی Arithmetic IF

13 دستورهای انتقال کنترل عباسپور 13 ساختار GO TO با اين دستور بدون هيچ شرطی و يا بر آورده شدن شروطی خاص کنترل به دستوری معين به سمت جلو و يا عقب می رود با اين وجود از فرترن 90 به بعد سعی می شود از دستورات برچسب دار استفاده نشود فرم کلی GO TO lable مثال IF (x>10.) GO TO 10 …… 10 WRITE(*,*)………. GO TO 25 …….. ………

14 دستورهای انتقال کنترل عباسپور 14 ساختار مناسب ديگر در تصميم گيری بر اساس مقدار يک INTEGER کنترل به دستوری خاص می رود بهتر است کمتر از اين دستور استفاده شود چون برنامه را مبهم می کند اين دستور و دستور IF محاسباتی از دستورات منسوخ شده فرترن 90 هستند ولی می توان آنها را استفاده کرد فرم کلی GO TO (n1,n2,n3,……..nr) integer expression مثال GO TO (100,200,300,400)I اگر I 1 باشد به دستور 100 ، 2 باشد به دستور 200 و علی آخر اگر کمتر از 1 و يا بزرگتر از 4 باشد دستور بعدی اجرا می شود ساختار Computed GO TO

15 دستورهای انتقال کنترل عباسپور 15 ساختار انتخاب if در C فرم کلی if ( ) ; عبارت منطقی (درست (1یا غیر صفر) یا غلط (0)) دستور اجرایی پرانتز if اجباری است فرم دیگر if ( ) ; else ; فقط یکی از دو دستور اجرا می شود نیاز به کلمه then در این دستور نیست If (grade>=10) printf(“passed”); else printf(“failed”);

16 دستورهای انتقال کنترل عباسپور 16 ساختار بلوک if در C اگر تعداد دستورات در if بیشتر از 1 باشد باید از بلوک {} استفاده نمود فرم کلی if ( ){ …… ……. } else { …… ……. }

17 دستورهای انتقال کنترل عباسپور 17 مثال: محاسبه ضرائب معادله درجه2 # include 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 دستورهای انتقال کنترل عباسپور 18 نکات برنامه تابع exit در فایل stdlib.h قرار دارد –ارگومان آن یک عدد است که نشان دهنده نحوه خروج از برنامه است عدد 0 خروج عادی هر عدد غیر صفر خروج بدلیل بروز خطا در c حاصل عبارت مقایسه ای (0 و یا غیر 0 است) بنابراین می توان در قسمت شرط if بجای عبارت مقایسه ای هر عبارتی که یک مقدار را باز می گرداند قرار داد If (!a) ….. اگر a صفر باشد نقیض ان درست خواهد بود

19 دستورهای انتقال کنترل عباسپور 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 دستورهای انتقال کنترل عباسپور 20 وضعیت else در if های متداخل مثال If (a<b) if (c ; else ; وضعیت tab نشان می دهد که else مربوط به if دوم است (statement2 در صورتی اجرا می شود که a<b درست و شرط c<d غلط باشد) در C هر else به نزدیکترین if بدون else تعلق دارد تغییر مالکیت if –اضافه کردن else –استفاده از بلوک {} If (a<b) if (c ; else; If (a<b) { if (c ; } else ;

21 دستورهای انتقال کنترل عباسپور 21 مثال برنامه ای بنویسید که سه عدد را دریافت و حداکثر آنها را چاپ کند # include 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 دستورهای انتقال کنترل عباسپور 22 ساختار SELECT CASE در فرترن روشی ساده که جايگزين ساختار IF…THEN می شود وقتی ELSE خيلی تکرار شود در فرترن 90 به بعد وجود دارد فرم کلی [name:] SELECT CASE( expression ) CASE( value ) [name] block... [CASE DEFAULT block] END SELECT [name] نتيجه expression ممکن است character, logical, integer باشد Value بايد هم نوع با نتيجه expression باشد CASE DEFAULT انتخابی است ولی اگر باشد شامل تمام مقاديری است که توسط CASE (VALUE) در نظر گرفته نشده است Value می تواند يک محدوده باشد ولی در هر صورت نبايد بر هم منطبق باشند CASE (number:) يعنی با هر مقداری بزرگتر از number اجرا شود CASE (:number) يعنی با هر مقداری کوچکتر از number اجرا شود

23 دستورهای انتقال کنترل عباسپور 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 دستورهای انتقال کنترل عباسپور 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 دستورهای انتقال کنترل عباسپور 25 ساختار چند انتخابی switch/ case در C Switch ( ) { case : ; فرم کلی ; …… ; case : ; ; …… ; ……….. case : ; ; …… ; Default : ; ; …… ; }

26 دستورهای انتقال کنترل عباسپور 26 ( ) یک عبارت عدد صحیح یا کاراکتری یک ثابت عدد صحیح یا کاراکتری ( ) با هر یک از 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 دستورهای انتقال کنترل عباسپور 27 مثال : switch/ case برنامه اي بنويسيد كه دو عدد و عملگري را دريافت و نتيجه را چاپ نمايد #include 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 دستورهای انتقال کنترل عباسپور 28 مثال کاربردی برای دستور IF افت انرژی در لوله ها –تعيين نوع جريان بر اساس عدد رينولدز R e =VD/ ، v=Q/A ؛ A=  d 2 /4 : Kinematic Viscosity (ft 2 /s) Re>2000 جريان متلاتم. معادله Darcy-Weisbach برای افت انرژی: h L =f(L/D)(v 2 /2g) افت بر حسب واحد وزن سيال f: Friction Factor f=64/R e for R e y 2000 جريان آرام

29 دستورهای انتقال کنترل عباسپور 29 برای جريان متلاتم : معادله Chen : معادله : Swamee and Jain معادله Colebrook

30 دستورهای انتقال کنترل عباسپور 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 دستورهای انتقال کنترل عباسپور 31 REAL::D,AREA,VEL,NU,Q,L,E,RE,F,HL,G,PI CHARACTER(LEN=9)::LABLE PRINT*, “input flow rate, cfs” READ(*,*)Q PRINT*, “input diameter, ft” READ (*,*)D PRINT*, “input length of pipe, ft” READ (*,*)L PRINT*, “input size of roughness, ft” READ (*,*)E PRINT*, “input kinematic viscosity, ft**2/s” READ (*,*)NU !Initial calculations and specifications G=32.17 PI=3.1416 AREA=PI*D**2/4. VEL=Q/AREA RE=VEL*D/NU ادامه.............................

32 دستورهای انتقال کنترل عباسپور 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 دستورهای انتقال کنترل عباسپور 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 دستورهای انتقال کنترل عباسپور 34 عمليات تکرار Repetition از مهمترين ويژگيهای هر زبان برنامه نويسی است ساختار DO (DO Construct) –جهت تکرار بلوک هايي از دستورات مختلف –فرم کلی [name:]DO [Control Clause شرط کنترل ] block END DO [name]


Download ppt "دستورهای انتقال کنترل عباسپور 1 دستورهای انتقال کنترل Control Statements."

Similar presentations


Ads by Google