Programming7 (Control statements)

Download Report

Transcript Programming7 (Control statements)

‫دستورهای انتقال کنترل‬
‫‪Control Statements‬‬
‫‪1‬‬
‫دستورهای انتقال کنترل‬
‫عباسپور‬
‫انواع‬
‫‪IF‬‬
‫‪CASE‬‬
‫‪DO‬‬
‫توجه‪ :‬در فرترن احکام غير اجرايي (مثل اعالن) در اين بلوک ها‬
‫پذيرفته نمی شود‬
‫‪ ‬هر کدام ازاين بلک ها می تواند با نوعی ديگر به صورت متداخل‬
‫ترکيب شوند‬
‫‪ ‬جهت سهولت در فهم برنامه می توان به دلخواه به هر بلوک يک‬
‫نام اختصاص داد‬
‫‪2‬‬
‫دستورهای انتقال کنترل‬
‫عباسپور‬
‫دستور های شرطی‬
‫‪Conditional Statements‬‬
‫• هر تصميمی احتياج به برآورده شدن شرط يا شروطی دارد (حتی‬
‫در زندگی روز مره)‬
‫• با بر آورده شدن شرايط يک سری عمليات انجام می گيرد‬
‫– اگر هوا آفتابی باشد‬
‫• ‪............‬‬
‫• ‪.............‬‬
‫• شرايط به صورت دستور های منطقی بيان می شوند که بر‬
‫اساس نتيجه ‪ TRUE‬يا ‪ FALSE‬عملياتی انجام می گيرد‬
‫‪3‬‬
‫دستورهای انتقال کنترل‬
‫عباسپور‬
‫جريان کنترل ‪FLOW CONTROL‬‬
‫• انتخاب و کنترل مسير اجرای برنامه از ابزار مهم و قدرتمند در‬
‫برنامه نويس ی است‬
‫• در فرترن ‪ 90‬و ‪ C‬دو ساختار زير جهت کنترل اجرا براساس‬
‫خروجی يک عبارت منطقی مورد استفاده قرار می گيرد‬
‫– ساختار و دستور ‪IF‬‬
‫– سازه و دستور ‪CASE‬‬
‫‪4‬‬
‫دستورهای انتقال کنترل‬
‫عباسپور‬
‫ساختار و دستور ‪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‬‬
‫‪5‬‬
‫دستورهای انتقال کنترل‬
‫عباسپور‬
‫ساختار‬
‫‪IF THEN‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫ساده ترين بلوک ‪IF‬‬
‫چنانچه نتيجه دستوری منطقی ‪ TRUE‬باشد بلوکی شامل‬
‫مجموعه ای از دستورات اجرا می شود‬
‫در غير اينصورت اجرا به بعد از ‪ END IF‬منتقل می گردد‬
‫فرم کلی‬
‫‪TRUE‬‬
‫‪BLOCK1‬‬
‫‪6‬‬
‫‪Logical‬‬
‫‪expression‬‬
‫‪[name:] IF (logical expression) THEN‬‬
‫‪block1‬‬
‫‪FALSE‬‬
‫‪END IF name‬‬
‫دستورهای انتقال کنترل‬
‫عباسپور‬
‫ساختار‬
‫‪IF THEN ELSE‬‬
‫اجازه می دهد بر اساس نتيجه منطقی دو مسير مختلف انتخاب‬
‫گردد‪ .‬يک مسير با ‪ true‬بودن و مسير ديگر با ‪ false‬بودن اجرا‬
‫می شود‪ .‬در هر تکرار فقط يک بلوک می تواند اجرا شود‬
‫‪[name:] IF (logical expression) THEN‬‬
‫‪FALSE‬‬
‫‪BLOCK2‬‬
‫‪7‬‬
‫‪Logical‬‬
‫‪expression‬‬
‫‪TRUE‬‬
‫‪block1‬‬
‫‪ELSE‬‬
‫‪block2‬‬
‫‪END IF name‬‬
‫‪BLOCK1‬‬
‫دستورهای انتقال کنترل‬
‫عباسپور‬
‫ساختارچند گانه‬
‫‪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‬‬
‫‪8‬‬
‫دستورهای انتقال کنترل‬
‫عباسپور‬
IF ‫مثال ساختار‬
‫ و مستطيل‬triangle ‫ مثلث‬،circle ‫برنامه ای بنويسيد که بر اساس شکل سطح (دايره‬
‫) در هر مورد مساحت آنها را محاسبه نمايد‬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 ‫ادامه در صفحه بعد‬
‫دستورهای انتقال کنترل‬
‫عباسپور‬
9
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
‫دستورهای انتقال کنترل‬
‫عباسپور‬
10
‫ساختار متداخل‬
‫‪Nested IF THEN ELSE‬‬
‫•‬
‫•‬
‫•‬
‫‪11‬‬
‫ً‬
‫ساختار ‪ IF‬را می توان به صورت متداخل نيز نوشت‪ .‬بطوريکه تقريبا تداخل در هر جايي امکان پذير‬
‫است‬
‫ماداميکه تصوير صحيحی از نوع تصميم داشته باشيد ساختاری ساده است در غير اينصورت ممکن‬
‫است برنامه به درستی اجرا نشود‬
‫فرم کلی‪:‬‬
‫‪outer: IF( x>0.0 ) THEN‬‬
‫‪block1...‬‬
‫‪inner: IF( y<0.0 ) THEN‬‬
‫‪block2….‬‬
‫‪END IF inner‬‬
‫‪ELSE‬‬
‫…………‬
‫‪………….‬‬
‫‪END IF outer‬‬
‫دستورهای انتقال کنترل‬
‫عباسپور‬
‫ساختار محاسباتی‬
‫‪Arithmetic IF‬‬
‫• ساختاری قديمی است که ساختار چندگانه جايگزين آن شده است‬
‫• ممکن است بعض ی از کامپايلر ها آن را قبول نکنند‬
‫• فرم کلی‬
‫‪IF (FORTRAN arithmetic expression) a, b, c‬‬
‫‪ a, b, c‬عدد برچسب دستور هستند‬
‫اگر داخل پرانتز‪:‬‬
‫منفی به دسنور ‪a‬‬
‫صفر به دستور ‪b‬‬
‫مثبت به دستور ‪ c‬می رود‬
‫مثال‬
‫‪IF (x-6.)100,200,300‬‬
‫‪12‬‬
‫دستورهای انتقال کنترل‬
‫عباسپور‬
‫ساختار ‪GO TO‬‬
‫•‬
‫•‬
‫•‬
‫مثال‬
‫با اين دستور بدون هيچ شرطی و يا بر آورده شدن شروطی خاص کنترل به دستوری‬
‫معين به سمت جلو و يا عقب می رود‬
‫با اين وجود از فرترن ‪ 90‬به بعد سعی می شود از دستورات برچسب دار استفاده‬
‫نشود‬
‫فرم کلی‬
‫‪GO TO lable‬‬
‫‪IF (x>10.) GO TO 10‬‬
‫……‬
‫……‬
‫‪WRITE(*,*)……….‬‬
‫‪GO TO 25‬‬
‫‪……..‬‬
‫………‬
‫‪13‬‬
‫دستورهای انتقال کنترل‬
‫عباسپور‬
‫‪10‬‬
‫ساختار‬
‫‪Computed GO TO‬‬
‫• ساختار مناسب ديگر در تصميم گيری‬
‫• بر اساس مقدار يک ‪ INTEGER‬کنترل به دستوری خاص می رود‬
‫• بهتر است کمتر از اين دستور استفاده شود چون برنامه را مبهم می کند‬
‫• اين دستور و دستور ‪ IF‬محاسباتی از دستورات منسوخ شده فرترن ‪ 90‬هستند ولی می‬
‫توان آنها را استفاده کرد‬
‫• فرم کلی‬
‫‪GO TO (n1,n2,n3,……..nr) integer expression‬‬
‫مثال‬
‫‪GO TO (100,200,300,400)I‬‬
‫اگر ‪I‬‬
‫‪ 1‬باشد به دستور ‪ 2 ، 100‬باشد به دستور ‪ 200‬و علی آخر‬
‫اگر کمتر از ‪ 1‬و يا بزرگتر از ‪ 4‬باشد دستور بعدی اجرا می شود‬
‫‪14‬‬
‫دستورهای انتقال کنترل‬
‫عباسپور‬
‫ساختار انتخاب ‪if‬در ‪C‬‬
‫• فرم کلی‬
‫;>‪if (<expression>) <statement‬‬
‫>‪ <expression‬عبارت منطقی (درست (‪1‬یا غير صفر) یا غلط (‪))0‬‬
‫>‪ <statement‬دستور اجرایی‬
‫پرانتز ‪ if‬اجباری است‬
‫• فرم دیگر‬
‫;>‪if (<expression>) <statement1‬‬
‫;>‪else <statement2‬‬
‫فقط یکی از دو دستور اجرا می شود‬
‫نیاز به کلمه ‪ then‬در این دستور نیست‬
‫;)”‪If (grade>=10) printf(“passed‬‬
‫;)”‪else printf(“failed‬‬
‫‪15‬‬
‫دستورهای انتقال کنترل‬
‫عباسپور‬
‫ساختار بلوک ‪ if‬در ‪C‬‬
‫• اگر تعداد دستورات در ‪ if‬بیشتر از ‪ 1‬باشد باید از بلوک {} استفاده نمود‬
‫•‬
‫فرم کلی‬
‫{)>‪if (<expression‬‬
‫>‪<statement1‬‬
‫……‬
‫‪…….‬‬
‫>‪<statement n‬‬
‫}‬
‫{ ‪else‬‬
‫>‪<statement1‬‬
‫……‬
‫‪…….‬‬
‫>‪<statement n‬‬
‫}‬
‫‪16‬‬
‫دستورهای انتقال کنترل‬
‫عباسپور‬
•
•
•
•
•
•
•
•
•
•
•
•
•
•
# 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);
‫دستورهای انتقال کنترل‬
}
‫عباسپور‬
}
2‫ محاسبه ضرائب معادله درجه‬:‫مثال‬
17
‫نکات برنامه‬
‫• تابع ‪ exit‬در فایل ‪ stdlib.h‬قرار دارد‬
‫– ارگومان آن یک عدد است که نشان دهنده نحوه خروج از برنامه است‬
‫• عدد ‪ 0‬خروج عادی‬
‫• هر عدد غیر صفر خروج بدلیل بروز خطا‬
‫• در ‪ c‬حاصل عبارت مقایسه ای (‪ 0‬و یا غیر ‪ 0‬است) بنابراین می‬
‫توان در قسمت شرط ‪ if‬بجای عبارت مقایسه ای هر عبارتی که یک‬
‫مقدار را باز می گرداند قرار داد‬
‫‪If )!a( …..‬‬
‫اگر ‪ a‬صفر باشد نقیض ان درست خواهد بود‬
‫‪18‬‬
‫دستورهای انتقال کنترل‬
‫عباسپور‬
‫‪ 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‬‬
‫‪19‬‬
‫دستورهای انتقال کنترل‬
‫عباسپور‬
‫وضعیت ‪ 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 <statement2‬‬
‫‪20‬‬
‫دستورهای انتقال کنترل‬
‫عباسپور‬
‫)‪If (a<b‬‬
‫;>‪if (c<d) <statment1‬‬
‫;‪else‬‬
‫;>‪else <statement2‬‬
•
•
•
•
•
•
•
•
•
•
•
•
•
‫• برنامه ای بنویسید که سه عدد را دریافت و حداکثر آنها را چاپ کند‬
# 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);
}
‫دستورهای انتقال کنترل‬
21
‫عباسپور‬
‫ساختار‬
‫•‬
‫•‬
‫•‬
‫‪ 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‬اجرا شود‬
‫‪22‬‬
‫دستورهای انتقال کنترل‬
‫عباسپور‬
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
‫دستورهای انتقال کنترل‬
‫عباسپور‬
23
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
‫دستورهای انتقال کنترل‬
‫عباسپور‬
24
C ‫ در‬switch/ case ‫ساختار چند انتخابی‬
Switch (<expression>) {
case <constant1> :
case <constant2> :
………..
case <constant m> :
}
<statement1>;
<statement2>;
……
<statementn>;
‫فرم کلی‬
<statement1>;
<statement2>;
……
<statementn>;
<statement1>;
<statement2>;
……
<statementn>;
Default : <statement1>;
<statement2>;
……
<statementn>; ‫دستورهای انتقال کنترل‬
‫عباسپور‬
25
‫ساختار چند انتخابی ‪ switch/ case‬در ‪C‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫‪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 : ‫مثال‬
‫برنامه اي بنويسيد كه دو عدد و عملگري را دريافت و نتيجه را‬
‫چاپ نمايد‬
#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);
}
‫دستورهای انتقال کنترل‬
‫عباسپور‬
27
‫مثال کاربردی برای دستور ‪IF‬‬
‫• افت انرژی در لوله ها‬
‫– تعيين نوع جريان بر اساس عدد رينولدز ‪ v=Q/A ، Re=VD/‬؛‬
‫‪A=d2/4‬‬
‫‪Kinematic Viscosity (ft2/s) : ‬‬
‫‪ Re>2000‬جريان متالتم‪.‬‬
‫معادله ‪ Darcy-Weisbach‬برای افت انرژی‪:‬‬
‫)‪hL=f(L/D)(v2/2g‬‬
‫افت بر حسب واحد وزن سيال‬
‫‪Friction Factor :f‬‬
‫جریان آرام ‪f=64/Re for Rey2000‬‬
‫‪28‬‬
‫دستورهای انتقال کنترل‬
‫عباسپور‬


ε
5.0452
f   2.01log(

log A
3
.
7065
D
R
e


1
ε
5.8506
A
( )1.1098  0.8981
2.8257 D
Re
f 
2
:‫• برای جريان متالتم‬
: Chen ‫• معادله‬
0.25

0.27ε 5.74 
log( D  R 0.9 )
e


2

1
ε
2.5226
 2.0 log


f
 3.7065D Re f 
‫دستورهای انتقال کنترل‬
‫عباسپور‬
Swamee and Jain: ‫معادله‬
Colebrook ‫معادله‬
29
‫ برای محاسبه افت‬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 .........‫ادامه‬
‫دستورهای انتقال کنترل‬
‫عباسپور‬
30
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
.............................‫ادامه‬
‫دستورهای انتقال کنترل‬
‫عباسپور‬
31
!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)
‫دستورهای انتقال کنترل‬
‫عباسپور‬
32
!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
‫دستورهای انتقال کنترل‬
‫عباسپور‬
33
‫عمليات تکرار ‪Repetition‬‬
‫• از مهمترين ويژگيهای هر زبان برنامه نويس ی است‬
‫• ساختار ‪(DO Construct) DO‬‬
‫– جهت تکرار بلوک هايي از دستورات مختلف‬
‫– فرم کلی‬
‫] شرط کنترل ‪[Control Clause‬‬
‫‪[name:] DO‬‬
‫‪block‬‬
‫]‪END DO [name‬‬
‫‪34‬‬
‫دستورهای انتقال کنترل‬
‫عباسپور‬