1 / 29

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

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

tiara
Download Presentation

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

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. واحد های مختلف برنامه Program Units واحد های مختلف برنامه عباسپور

  2. مقدمه • در برنامه های بزرگ هر قسمت از برنامه با وظيفه مشخص را در واحد (بخش ) خاصی از برنامه قرار می دهند و هر موقع (حتی به صورت تکراری) نياز بود از آن استفاده می شود • هر برنامه متشکل از برنامه اصلی و برنامه های فرعی: • Subprogram • Subroutine • Internal • External • Module واحد های مختلف برنامه عباسپور

  3. جزئيات داخلی هر يک از برنامه های فرعی از ديگر برنامه های فرعی و خود برنامه اصلی مجزا بوده و لذا به راحتی می توان آنها را در هر برنامه ديگر به راحتی مورد استفاده قرار داد • برنامه اصلی و هريک از برنامه های فرعی می توانند ازطريق واسط (Interface)با يک برنامه فرعی ارتباط بر قرار کند • ولی ارتباط بين برنامه اصلی و فرعی يک طرفه است • بايد بين واسط ها سازگاری برقرار باشد (Consistency of Interfaces) واحد های مختلف برنامه عباسپور

  4. انواع برنامه های فرعی • توابع آماده (Supplied Functions): در کتابخانه فرترن موجود بوده و برنامه نويس بدون اجازه دخل و تصرف فقط می تواند آنها را در برنامه خود • زير روالها (Procedure): اينها را برنامه نويس خود نوشته و می تواند در هر برنامه ای از آنها استفاده نموده و يا آنها را تغيير و يا اصلاح نمايد. شامل • Functions (توابع) • Subroutines واحد های مختلف برنامه عباسپور

  5. مزايای استفاده از برنامه های فرعی • واحد های فرعی را می توان مستقلاً نوشت و تست نمود • يک برنامه فرعی که برای يک کار خاص نوشته شده است قابل فهم تر است • استفاده مکرر در هر برنامه ديگر • وقتی برنامه به صورت مجموعه ای از زير برنامه ها نوشته می شود عملکرد کامپايلر بهتر می شود واحد های مختلف برنامه عباسپور

  6. انواع تابع در فرترن • تابع تک جمله ای: موقعی استفاده می شود که تابع را بتوان در يک عبارت يا دستور بيان نمود. اين تابع تنها يک خروجی دارد • تابع تک جمله ای بايد قبل از اولين دستور محاسباتی (يا اجرايی) آورده شود • فرم کلی: Name (x1,x2,……..xn)=e e: is a FORTRAN statement • اگر تابع در يک سطر جا نگيرد می توان ادامه آن را در سطر بعد (با علامت&) نوشت • نام تابع اگر اعلان نشود از قانون Implicit declaration پيروی خواهد شد • اگر نام تابع تک جمله ای انتخابی مشابه نام تابعی از کتابخانه فرترن باشد اولويت با تابع تک جمله ای خواهد بود واحد های مختلف برنامه عباسپور

  7. مثال تابع تک جمله ای PROGRAM func1 REAL ::root REAL:: a, b, c, x, z REAL:: 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, x END PROGRAM func1 واحد های مختلف برنامه عباسپور

  8. توابع چند جمله ای • اگر تابع دارای بيش از يک دستور باشد از اين نوع تابع استفاده می شود • تمام برنامه های فرعی (internal Procedure) شامل توابع چند جمله ای و سابروتين ها در داخل برنامه اصلی قرار می گيرند. به عبارتی هر برنامه ای فقط و فقط می تواند يک برنامه اصلی داشته باشد. • فرم کلی PROGRAM [name] [specification statements] [executable statements] ... [CONTAINS ] internal procedures] END [PROGRAM [name]] • تمام برنامه های فرعی (بجز توابع تک جمله ای ) پس از برنامه اصلی و پس از کلمه CONTAINS می ايند • تقدم و تاخر در آوردن برنامه های فرعی وجود ندارد واحد های مختلف برنامه عباسپور

  9. هر برنامه فرعی خود دارای نام و کلمه END در پايان آن است • آوردن کلمه STOP در هر جای برنامه اصلی و برنامه های فرعی که اورده شود (به شرط رسيدن کنترل به آن) کل برنامه متوقف می گردد STOP [Character string] • هنگامی که يک برنامه فرعی به صورت Function نوشته می شود خروجی آن فقط می تواند يک کميت (از هر نوع) باشد • خود يک برنامه فرعی می تواند برنامه های فرعی ديگر را فراخوانی کند واحد های مختلف برنامه عباسپور

  10. فرم کلی FUNCTION FUNCTION name [(argument list)] [specification statements] [executable statements] ... …… name= Fortran statement RETURN END FUNCTION name • در يک تابع حتماًً بايد Name يک بار در سمت چپ يک دستور قرار گيرد • پس از محاسبه مقدار تابع در اختيار برنامه ای قرار می گيرد که آن را فرا خوانده است • دستور RETURN کنترل را به نقطه ای بر می گرداند که احضار شده است • ليست آرگومان ممکن است تهی و يا شامل تعدادی متغير از هر نوع باشد • يک تابع برای اينکه در برنامه اصلی و يا در يک برنامه فرعی ديگر احضار شود با يد از اسم آن در دستورات مختلف استفاده شود (مانند توابع موجود در کتابخانه فرترن) واحد های مختلف برنامه عباسپور

  11. مثال: برنامه فرعی زير ريشه دوم هر عددی مثل a را به روش عددی نيوتن – رافسون با خطای نسبی 00001/0 از فرمول • Ri+1=1/2(Ri + a/Ri) استفاده می شود. در اين روش با استفاده از تکرار عمليات ابتدا R برابر a/2 در نظر گرفته شده و هربار مقدار جديد a از روی مقدار قبلی آن محاسبه می گردد FUNCTION SQR (a) R=a/2.0 Do SQR=0.5* (R+ a/R) IF (ABS (SQR**2 –a)/a -0.00001)10, 5, 5 (مثبت، صفر ، منفی) • R=SQR END DO • RETURN END چنانچه اين تابع در پايين CONTAINS يک برنامه آورده شود آنگاه می توان به صورت زير مورد استفاده قرار گيرد Variable name= SQR (variable or constant) دستور محاسباتی شامل واحد های مختلف برنامه عباسپور

  12. PROGRAM main مثال REAL:: w(3,4) OPEN (16, File="out put", STATUS = "unknown") w=5.0 WRITE (16,1) totsum (w) 1 FORMAT (" The sum of All elements of w is:",F10.1) CONTAINS FUNCTION totsum (xx)نياز نيست اسم آرايه در برنامه اصلی و تابع يکسان باشد REAL:: xx (3,4 ( !Dummy argument آرگومان تقلبی totsum=0.0 loop1: Do I=1,3 loop2: DO J=1,4 totsum=totsum+ xx (I,J) END DO loop2 END DO loop1 END FUNCTION totsum END PROGRAM main اين برنامه فرعی جمع مقادير المان های يک آرايه دو بعدی را مشخص می کند واحد های مختلف برنامه عباسپور

  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 حساب کند واحد های مختلف برنامه عباسپور

  14. PROGRAM Function2 REAL::y,x OPEN (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,w END DO 10 FORMAT (F5.0, 5x, E14.5) CONTAINS FUNCTION BIG (a) REAL:: a, y1, y2 y1=COS (a*a)- COS (a) y2= COS (a**3)-0.5* COS (a) IF (y1-y2)7, 4, 4 4 BIG=y1 RETURN 7 BIG=y2 RETURN END FUNCTION BIG END PROGRAM Function2 واحد های مختلف برنامه عباسپور

  15. آرگومان های حقيقی و تقلبی Actual and Dummy arguments • برنامه های فرعی وظايف خود را بر اساس اطلاعاتی که در اختيار آنها قرار می گيرد انجام می دهند. • اين اطلاعات از طريق ليست ارگومانها که در جلوی اسم آنها قرار می گيرد مشخص می گردند • ليست آرگومانها متشکل از تعدادی متغيير و يا عبارت (ويا حتی نام يک تابع ديگر) است • متناظر با اين ليست ، ليست ارگومانها در دستور احضار نيز وجود دارد • آرگومانهای موجود در ليست دستور احضار را آرگومانهای حقيقی و آرگومانهای موجود در ليست برنامه فرعی را آرگومانهای تقلبی می نامند واحد های مختلف برنامه عباسپور

  16. آرگومانهای حقيقی و تقلبی بر اساس مکان انها در ليست آرگومانها با همديگر متناظر می باشند • يعنی اولين آرگومان در ليست حقيقی با اولين آرگومان در ليست تقلبی و الی آخر • به اين ترتيب هر بار برنامه فرعی توسط يک برنامه ديگر احضار می شود تابع براساس مقادير آرگومانهای احضار کننده اجرا خواهد شد. • بنابراين ليست آرگومانها در هر دو حالت بايد از همه نظر (نوع Data ، مرتبه و ابعاد آرايه) با همديگر مطابقت داشته باشند • پس از اجرای برنامه فرعی اطلاعات از ليست تقلبی به ليست حقيقی منتقل می گردد واحد های مختلف برنامه عباسپور

  17. مثال: استفاده از يک رشته در ارگومان برنامه فرعی !Example of using array in argument FUNCTION Amaximum (a, n) REAL:: a(100) Amaximum= a(1) IF (n>0)THEN DO I=2, n IF (Amaximum – a (I))5, 10, 10 • Amaximum= a (I) • CYCLE END DO END IF RETURN END FUNCTION Amaximum اين برنامه فرعی (تابع) بزرگترين عنصر يک رشته يک بعدی را مشخص می کند واحد های مختلف برنامه عباسپور

  18. برنامه فرعی SUBROUTINE • همانطور که اشاره شد FUNCTION ها چه تک جمله ای و چه چند جمله ای باشند فقط قادر به محاسبه و انتقال يک کميت هستند که اين کميت می تواند به جای يک متغير قرار گيرد: Results= name [(argument list)] با استفاده از سابروتين می توان کميت های متعددی را از برنامه احضار کننده به برنامه فرعی (سابروتين) منتقل و کميت های متعدد ديگری را از برنامه فرعی به برنامه اصلی منتقل نمود واحد های مختلف برنامه عباسپور

  19. فرم کلی سابروتين SUBROUTINE name (list of arguments) ................ ............. RETURN END در برنامه فرعیFUNCTION بايد نام تابع يکباردر سمت چپ يک دستور گنجانيده شود در حاليکه در سابروتين نام فقط در اواين دستور ظاهر می گردد آرگومانهای سابروتين همگی ساختگی (تقلبی) هستند و لذا انتقال دو طرفه کميت ها از طريق ليست آرگومانها صورت می گيرد واحد های مختلف برنامه عباسپور

  20. نحوه احضار يک سابروتين • از دستور CALL استفاده می شود: PROGRAM call_test REAL, DIMENSION(10) :: a, c ... CALL swap ( a,c )   …………. CONTAINS SUBROUTINE swap ( a,b ) REAL, DIMENSION(10) :: a, b, temp temp = a a = b b = temp END SUBROUTINE swap END PROGRAM call_test واحد های مختلف برنامه عباسپور

  21. مثال کاربرد Subroutine در اين برنامه از يک سابروتين استفاده می شودکه در اين برنامه فرعی مشخص می شود آيا سه عدد وارد شده اضلاع مثلث هستند يا خير: اگر مثلث باشند محيط و مساحت مثلث را با پيام مناسب چاپ کند. اگر مثلث نباشند مساحت و محيط را برابر 1- قرار می دهد روش عددی بکار رفته به صورت زير است: در اين رابطه p نصف محيط است واحد های مختلف برنامه عباسپور

  22. READ (10,2) a, b, c • FORMAT (3f10.2) CALL Triangle (a, b, ,c, s, p) IF (s) 5, 10,10 • WRITE (3,6) a, b, c • FORMAT (// 3f10.2/ 5x, “not a triangle”) GO TO 1 • WRITE (3,12) a, b, c, s, p • FORMAT (// 3f10.2/ 2x, “Area=“, f10.2, 5x, & “Circumference=“, f10.2) GO TO 1 • STOP CONTAINS واحد های مختلف برنامه عباسپور

  23. SUBROUTINE Triangle (a, b, c, Area, per) Area= -1 Per= -1 IF (a –(b + c)) 1, 1, 5 • IF (b – (a + c)) 2, 2, 5 • IF (c – (a + b))3, 3, 5 • Per = a + b + c p=0.5 *per Area= SQRT (p* (p-a) * (p- b) * (p* -c)) • RETURN • END واحد های مختلف برنامه عباسپور

  24. مثال: برنامه ای بنويسيد که خواندن ؛ جمع کردن و چاپ عناصر يک آرايه (3,4) به صورت مجزا در يک سابروتين انجام گيرد PROGRAM main REAL, DIMENSION:: w (3,4) CALL READER (w) CALL PRINTER (w) CALL ADDER (w, sum) WRITE (*, 1) sum 1 FORMAT (// , “ The sum of all the elements & is:”, F7.2/) CALL FINISH CONTAINS واحد های مختلف برنامه عباسپور

  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 واحد های مختلف برنامه عباسپور

  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) • FORMAT (1x, 4f10.1) END DO RETURN END SUBROUTINE PRINTER واحد های مختلف برنامه عباسپور

  27. SUBROUTINE ADDER (w, sum) REAL, DIMENSION:: w(3,4) Sum=0.0 DO Irow = 1, 3 DO Icol= 1,4 sum= sum + w (Irow, Icol) END DO END DO RETURN END SUBROUTINE ADDER واحد های مختلف برنامه عباسپور

  28. SUBROUTINE FINISH ! بدون آرگومان WRITE (*,1) • FORMAT (1x, 60 “-”,/ 1x, 60 “-”) RETURN END SUBROUTINE FINISH END PROGRAM main خلاصه: تعداد آرگومان در سابروتين ممکن است صفر، يک و يا بيشتر باشد انتقال اطلاعات بين برنامه احضار کننده و احضار شونده از طريق آرگومانهای حقيقی و ساختگی سورت می گيرد هر برنامه فرعی می تواند برنامه فرعی ديگری را احضار ولی نمی تواند خود و يا برنامه اصلی را احضار کند واحد های مختلف برنامه عباسپور

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

More Related