1 / 34

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

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

hera
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

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

  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. Logical expression TRUE FALSE BLOCK1 ساختارIF THEN • ساده ترين بلوک IF • چنانچه نتيجه دستوری منطقی TRUE باشد بلوکی شامل مجموعه ای از دستورات اجرا می شود • در غير اينصورت اجرا به بعد از END IF منتقل می گردد • فرم کلی [name:] IF (logical expression) THEN block1 END IF name دستورهای انتقال کنترل عباسپور

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

  8. ساختارچند گانهCascaded IF THEN ELSE • چندين گزينه پشت سر هم امکان پذير است • تنها يک گزينه می تواند در هر بار اجرا شود • به مجرد اجرای يک گزينه کنترل به انتهای 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 دستورهای انتقال کنترل عباسپور

  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. 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. ساختار متداخلNested IF THEN ELSE • ساختار IF را می توان به صورت متداخل نيز نوشت. بطوريکه تقريباً تداخل در هر جايي امکان پذير است • ماداميکه تصوير صحيحی از نوع تصميم داشته باشيد ساختاری ساده است در غير اينصورت ممکن است برنامه به درستی اجرا نشود • فرم کلی: outer: IF( x>0.0 ) THEN block1... inner: IF( y<0.0 ) THEN block2…. END IF inner ELSE ………… …………. END IF outer دستورهای انتقال کنترل عباسپور

  12. ساختار محاسباتیArithmetic IF • ساختاری قديمی است که ساختار چندگانه جايگزين آن شده است • ممکن است بعضی از کامپايلر ها آن را قبول نکنند • فرم کلی IF (FORTRAN arithmetic expression) a, b, c a, b, c عدد برچسب دستور هستند اگر داخل پرانتز: منفی به دسنور a صفر به دستور b مثبت به دستور c می رود مثال IF (x-6.)100,200,300 دستورهای انتقال کنترل عباسپور

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

  14. ساختار Computed GO TO • ساختار مناسب ديگر در تصميم گيری • بر اساس مقدار يک 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 باشد دستور بعدی اجرا می شود دستورهای انتقال کنترل عباسپور

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

  16. ساختار بلوک if در C • اگر تعداد دستورات در if بیشتر از 1 باشد باید از بلوک {} استفاده نمود • فرم کلی 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. وضعیت else در if های متداخل • مثال If (a<b) if (c<d) <statment1>; else <statement2>; وضعیت tab نشان می دهد که else مربوط به if دوم است (statement2 در صورتی اجرا می شود که a<b درست و شرط c<d غلط باشد) • در C هر else به نزدیکترین if بدون else تعلق دارد • تغییر مالکیت 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 در فرترن • روشی ساده که جايگزين ساختار 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. مثال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 در C Switch (<expression>) { case <constant1> : <statement1>; فرم کلی <statement2>; …… <statementn>; case <constant2> : <statement1>; <statement2>; …… <statementn>; ……….. case <constant m> : <statement1>; <statement2>; …… <statementn>; Default : <statement1>; <statement2>; …… <statementn>; } دستورهای انتقال کنترل عباسپور

  26. ساختار چند انتخابی switch/ case در C • (<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; دستورهای انتقال کنترل عباسپور

  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 : معادله : Swamee and Jain معادله Colebrook دستورهای انتقال کنترل عباسپور

  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,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. !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] دستورهای انتقال کنترل عباسپور

More Related