29
امه رن ب ف ل ت خ محد های وا ور پ س ا ب ع1 ه م ا رن ب ف ل ت خ محد های واProgram Units

واحد های مختلف برنامه

  • Upload
    tiara

  • View
    74

  • Download
    0

Embed Size (px)

DESCRIPTION

واحد های مختلف برنامه. Program Units. مقدمه. در برنامه های بزرگ هر قسمت از برنامه با وظيفه مشخص را در واحد (بخش ) خاصی از برنامه قرار می دهند و هر موقع (حتی به صورت تکراری) نياز بود از آن استفاده می شود هر برنامه متشکل از برنامه اصلی و برنامه های فرعی: Subprogram Subroutine Internal - PowerPoint PPT Presentation

Citation preview

Page 1: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

1

واحد های مختلف برنامه

Program Units

Page 2: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

2

مقدمه

در برنامه های بزرگ هر قسمت از برنامه •با وظيفه مشخص را در واحد )بخش (

خاصی از برنامه قرار می دهند و هر موقع )حتی به صورت تکراری( نياز بود از آن

استفاده می شودهر برنامه متشکل از برنامه اصلی و برنامه •

های فرعی:– Subprogram– Subroutine– Internal– External– Module

Page 3: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

3

جزئيات داخلی هر يک از برنامه های فرعی •از ديگر برنامه های فرعی و خود برنامه

اصلی مجزا بوده و لذا به راحتی می توان آنها را در هر برنامه ديگر به راحتی مورد

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

با يک (Interface)واسط می توانند ازطريق برنامه فرعی ارتباط بر قرار کند

ولی ارتباط بين برنامه اصلی و فرعی يک •طرفه است

بايد بين واسط ها سازگاری برقرار باشد•(Consistency of Interfaces)

Page 4: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

4

انواع برنامه های فرعی: در (Supplied Functions)توابع آماده •

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

می تواند آنها را در برنامه خود : اينها را برنامه (Procedure)زير روالها •

نويس خود نوشته و می تواند در هر برنامه ای از آنها استفاده نموده و يا آنها را تغيير و يا اصالح نمايد. شامل

– Functions (توابع)– Subroutines

Page 5: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

5

مزايای استفاده از برنامه های فرعی• Yواحد های فرعی را می توان مستقال

نوشت و تست نموديک برنامه فرعی که برای يک کار خاص •

نوشته شده است قابل فهم تر استاستفاده مکرر در هر برنامه ديگر•وقتی برنامه به صورت مجموعه ای از •

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

Page 6: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

6

انواع تابع در فرترنتابع تک جمله ای: موقعی استفاده می شود که تابع را 1.

بتوان در يک عبارت يا دستور بيان نمود. اين تابع تنها يک خروجی دارد

تابع تک جمله ای بايد قبل از اولين دستور محاسباتی •)يا اجرايی( آورده شود

فرم کلی:•Name (x1,x2,……..xn)=ee: is a FORTRAN statement

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

Implicit declarationنام تابع اگر اعالن نشود از قانون •پيروی خواهد شد

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

بود

Page 7: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

7

مثال تابع تک جمله ایPROGRAM func1REAL ::rootREAL:: a, b, c, x, zREAL:: array (3)Root (a, b, c)=(-b+ ( b**2- 4.0*a *c)**0.5)/(2.0*a)X=Root (1, 5, 3)Print*, x………..………Z=Root (v, w, q)X= Root (Array (1), Array(2), Array (3))Print*, z, xEND PROGRAM func1

Page 8: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

8

توابع چند جمله ای2.اگر تابع دارای بيش از يک دستور باشد از اين نوع تابع •

استفاده می شود شامل توابع (internal Procedure)تمام برنامه های فرعی •

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

برنامه اصلی داشته باشد.فرم کلی•

PROGRAM [name] [specification statements] [executable statements] ... [CONTAINS ]internal procedures] END [PROGRAM [name]]

تمام برنامه های فرعی )بجز توابع تک جمله ای ( پس از •برنامه اصلی و پس از کلمه

CONTAINSمی ايند تقدم و تاخر در آوردن برنامه های فرعی وجود ندارد•

Page 9: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

9

هر برنامه فرعی خود دارای نام و کلمه •END در پايان آن است

در هر جای برنامه STOP آوردن کلمه •اصلی و برنامه های فرعی که اورده شود

)به شرط رسيدن کنترل به آن( کل برنامه متوقف می گردد

STOP [Character string] به صورت هنگامی که يک برنامه فرعی •

Function نوشته می شود خروجی آن )از هر نوع( يک کميتفقط می تواند

باشدخود يک برنامه فرعی می تواند برنامه •

های فرعی ديگر را فراخوانی کند

Page 10: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

10

FUNCTIONفرم کلی FUNCTION name [(argument list)] [specification statements] [executable statements] ... ……name= Fortran statementRETURNEND FUNCTION name

YY بايد • يک بار در سمت چپ يک دستور Nameدر يک تابع حتماقرار گيرد

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

کنترل را به نقطه ای بر می گرداند که RETURNدستور •احضار شده است

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

يک تابع برای اينکه در برنامه اصلی و يا در يک برنامه فرعی •ديگر احضار شود با يد از اسم آن در دستورات مختلف استفاده شود )مانند توابع موجود در کتابخانه فرترن(

Page 11: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

11

مثال: برنامه فرعی زير ريشه دوم هر عددی مثل •a رافسون با خطای – را به روش عددی نيوتن

از فرمول00001/0نسبی • Ri+1=1/2(Ri + a/Ri) استفاده می شود. در اين روش

در a/2 برابر Rبا استفاده از تکرار عمليات ابتدا از روی aنظر گرفته شده و هربار مقدار جديد

مقدار قبلی آن محاسبه می گرددFUNCTION SQR (a)R=a/2.0Do

SQR=0.5* (R+ a/R)IF (ABS (SQR**2 –a)/a -0.00001)10, 5, 5 ( ، مثبت، صفر

(منفی5 R=SQREND DO10 RETURNEND

يک برنامه آورده شود آنگاه می توان CONTAINSچنانچه اين تابع در پايين به صورت زير مورد استفاده قرار گيرد

Variable name= SQR (variable or constant) دستور محاسباتی شامل

Page 12: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

12

PROGRAM main مثالREAL:: w(3,4)OPEN (16, File="out put", STATUS = "unknown")w=5.0WRITE (16,1) totsum (w)1 FORMAT (" The sum of All elements of w is:",F10.1)CONTAINSFUNCTION totsum (xx) تابع و اصلی برنامه در آرايه اسم نيست نياز

باشد يکسانREAL:: xx (3,4 ( !Dummy argument تقلبی آرگومانtotsum=0.0loop1: Do I=1,3

loop2: DO J=1,4 totsum=totsum+ xx (I,J) END DO loop2 END DO loop1END FUNCTION totsumEND PROGRAM main

اين برنامه فرعی جمع مقادير المان های يک

آرايه دو بعدی را مشخص می کند

Page 13: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

13

2مثال

بزرگترين مقداری باشد که برای Yاگر • از روابط زير بدست می آيدxهر مقدار

• Y=cos x2 – cos x

• Y=cos x3 – 0.5 cos x

را از رابطه wبرنامه ای بنويسيد که •w=(y+siny)0.5 برای مقاديرx تا 1 از

حساب کند100

Page 14: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

14

PROGRAM Function2REAL::y,xOPEN (16, File="out put", STATUS = "unknown")DO I=1,100 x=REAL (I) y=BIG (x) w=SQRT (ABS(y+SIN (y))) WRITE (16,10) x,wEND DO10 FORMAT (F5.0, 5x, E14.5)CONTAINSFUNCTION BIG (a)REAL:: a, y1, y2y1=COS (a*a)- COS (a)y2= COS (a**3)-0.5* COS (a)

IF (y1-y2)7, 4, 44 BIG=y1RETURN7 BIG=y2RETURNEND FUNCTION BIGEND PROGRAM Function2

Page 15: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

15

آرگومان های حقيقی و تقلبی Actual and Dummy arguments

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

می دهند.اين اطالعات از طريق ليست ارگومانها که در •

جلوی اسم آنها قرار می گيرد مشخص می گردندليست آرگومانها متشکل از تعدادی متغيير و يا •

عبارت )ويا حتی نام يک تابع ديگر( استمتناظر با اين ليست ، ليست ارگومانها در دستور •

احضار نيز وجود داردآرگومانهای موجود در ليست دستور احضار را •

آرگومانهای حقيقی و آرگومانهای موجود در ليست برنامه فرعی را آرگومانهای تقلبی می

نامند

Page 16: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

16

آرگومانهای حقيقی و تقلبی بر اساس مکان •انها در ليست آرگومانها با همديگر متناظر می

باشنديعنی اولين آرگومان در ليست حقيقی با •

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

برنامه ديگر احضار می شود تابع براساس مقادير آرگومانهای احضار کننده اجرا خواهد

شد.بنابراين ليست آرگومانها در هر دو حالت بايد •

، مرتبه و ابعاد آرايه( Data از همه نظر )نوع با همديگر مطابقت داشته باشند

پس از اجرای برنامه فرعی اطالعات از ليست •تقلبی به ليست حقيقی منتقل می گردد

Page 17: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

17

مثال: استفاده از يک رشته در ارگومان برنامه فرعی!Example of using array in argumentFUNCTION Amaximum (a, n)REAL:: a(100)Amaximum= a(1)

IF (n>0)THENDO I=2, n

IF (Amaximum – a (I))5, 10, 105 Amaximum= a (I)10 CYCLE

END DOEND IF

RETURNEND FUNCTION Amaximum

اين برنامه فرعی )تابع( بزرگترين عنصر يک رشته يک بعدی را

مشخص می کند

Page 18: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

18

SUBROUTINEبرنامه فرعی

ها چه FUNCTIONهمانطور که اشاره شد •تک جمله ای و چه چند جمله ای باشند فقط قادر به محاسبه و انتقال يک کميت هستند

که اين کميت می تواند به جای يک متغير قرار گيرد:

Results= name [(argument list)]

با استفاده از سابروتين می توان کميت های متعددی را از برنامه احضار کننده به برنامه

فرعی )سابروتين( منتقل و کميت های متعدد ديگری را از برنامه فرعی به برنامه

اصلی منتقل نمود

Page 19: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

19

سابروتينفرم کلی

SUBROUTINE name (list of arguments)

................

.............

RETURN

END

بايد نام تابع يکباردر FUNCTION در برنامه فرعیسمت چپ يک دستور گنجانيده شود در حاليکه در

سابروتين نام فقط در اواين دستور ظاهر می گردد

آرگومانهای سابروتين همگی ساختگی )تقلبی( هستند و لذا انتقال دو طرفه کميت ها از طريق

ليست آرگومانها صورت می گيرد

Page 20: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

20

نحوه احضار يک سابروتيندستور • :CALL از شود می استفاده

PROGRAM call_testREAL, DIMENSION(10) :: a, c ... CALL swap ( a,c )   ………….  CONTAINSSUBROUTINE swap ( a,b )

REAL, DIMENSION(10) :: a, b, temp

temp = a

a = b

b = temp

END SUBROUTINE swapEND PROGRAM call_test

Page 21: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

21

Subroutineمثال کاربرد

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

شده اضالع مثلث هستند يا خير: اگر مثلث باشند محيط و مساحت مثلث را با پيام مناسب چاپ کند. اگر مثلث

- قرار می دهد1نباشند مساحت و محيط را برابر روش عددی بکار رفته به صورت زير است:

))()(( cpbpapps

نصف محيط است pدر اين رابطه

Page 22: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

22

1 READ (10,2) a, b, c2 FORMAT (3f10.2)

CALL Triangle (a, b, ,c, s, p)IF (s) 5, 10,10

5 WRITE (3,6) a, b, c6 FORMAT (// 3f10.2/ 5x, “not a triangle”)

GO TO 110 WRITE (3,12) a, b, c, s, p12 FORMAT (// 3f10.2/ 2x, “Area=“, f10.2, 5x, &

“Circumference=“, f10.2)GO TO 1

15 STOPCONTAINS

Page 23: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

23

SUBROUTINE Triangle (a, b, c, Area, per)

Area= -1

Per= -1

IF (a –(b + c)) 1, 1, 5

1 IF (b – (a + c)) 2, 2, 5

2 IF (c – (a + b))3, 3, 5

3 Per = a + b + c

p=0.5 *per

Area= SQRT (p* (p-a) * (p- b) * (p* -c))

5 RETURN

6 END

Page 24: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

24

مثال: برنامه ای بنويسيد که خواندن ؛ جمع کردن و چاپ

به صورت (3,4)عناصر يک آرايه مجزا در يک سابروتين انجام

PROGRAM mainگيردREAL, DIMENSION:: w (3,4)CALL READER (w)CALL PRINTER (w)CALL ADDER (w, sum)WRITE (*, 1) sum1 FORMAT (// , “ The sum of all the elements &

is:”, F7.2/)CALL FINISHCONTAINS

Page 25: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

25

SUBROUTINE READER (z)

REAL, DIMENSION:: z (3,4)

WRITE (*,1)

1 FORMAT (“Please enter the 12 elements of the matrix”)

READ (*,*) z

RETURN

END SUBROUTINE READER

Page 26: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

26

SUBROUTINE PRINTER (x)

REAL, DIMENSION:: x(3,4)

WRITE ( *,10)

10 FORMAT (// “The following matrix was read:”)

DO Irow=1,3

WRITE (*,3) (x ( Irow, Icol ) , Icol=1,4)

3 FORMAT (1x, 4f10.1)

END DO

RETURN

END SUBROUTINE PRINTER

Page 27: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

27

SUBROUTINE ADDER (w, sum)REAL, DIMENSION:: w(3,4)Sum=0.0DO Irow = 1, 3

DO Icol= 1,4sum= sum + w (Irow, Icol)

END DOEND DORETURNEND SUBROUTINE ADDER

Page 28: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

28

SUBROUTINE FINISH ! آرگومان بدونWRITE (*,1)1 FORMAT (1x, 60 “-”,/ 1x, 60 “-”)

RETURNEND SUBROUTINE FINISHEND PROGRAM main

خالصه:تعداد آرگومان در سابروتين ممکن است صفر، يک و

يا بيشتر باشدانتقال اطالعات بين برنامه احضار کننده و احضار

شونده از طريق آرگومانهای حقيقی و ساختگی سورت می گيرد

هر برنامه فرعی می تواند برنامه فرعی ديگری را احضار ولی نمی تواند خود و يا برنامه اصلی را

احضار کند

Page 29: واحد های مختلف برنامه

برنامه مختلف های واحدعباسپور

29