25
آﻣﻮزش ﻓﺮﺗﺮنFORTRAN - ﻣﻘﺪﻣﺎﺗﯽ ﻣﻌﺮﻓﯽ ﻭ ﺗﺎﺭﻳﺨﭽﻪ ﻓﺮﺗﺮﻥ ﻫﻤﺎﻧﻄﻮﺭ ﮐﻪ ﺩﺭ ﺍﻏﻠﺐ ﮐﺘﺎﺑﻬﺎﯼ ﻣﮑﺎﻧﻴﮏ ﺩﻳﺪﻩ ﺍﻳﺪ، ﺩﺭ ﺍﻏﻠﺐ ﺑﺮﻧﺎﻣﻪ ﻫﺎﯼ ﻣﻬﻨﺪﺳﯽ ﺍﺯ ﺍﻳﻦ ﺯﺑﺎﻥ ﺍﺳﺘﻔﺎﺩﻩ ﻣﯽ ﮔﺮﺩﺩ. ﺯﺑﺎﻥ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﯽ ﻓﺮﺗﺮﻥ ﺑﺎ ﻭﺟﻮﺩ ﺳﺎﺩﮔﯽ ﺍﺯ ﻗﺪﺭﺕ ﻭ ﺳﺮﻋﺖ ﺑﺎﻻﻳﯽ ﺑﺮﺧﻮﺭﺩﺍﺭ ﺍﺳﺖ، ﺑﻄﻮﺭﻳﮑﻪ ﻣﯽ ﺗﻮﺍﻥ ﺍﺯ ﺁﻥ ﺑﺮﺍﯼ ﻧﻮﺷﺘﻦ ﺑﺮﻧﺎﻣﻪ ﻫﺎﯼCFD ﺍﺳﺘﻔﺎﺩﻩ ﮐﺮﺩ. ﻓﺮﺗﺮﻥ ﺍﻏﻠﺐ ﺑﺎ ﻗﺎﺑﻠﻴﺖ ﻓ ﻮﻕ ﺍﻟﻌﺎﺩﻩ ﺩﺭ ﻣﻮﺭﺩ ﺍﻋﺪﺍﺩ ﻣﻌﺮﻓﯽ ﻣﯽ ﮔﺮﺩﺩ ﻭ ﻫﻤﺎﻧﻄﻮﺭ ﮐﻪ ﺍﺯ ﺍﺳﻤﺶ) FORmula TRANslation ( ﭘﻴﺪﺍﺳﺖ، ﺑﺮﺍﯼ ﺍﻧﺠﺎﻡ ﻣﺤﺎﺳﺒﺎﺕ ﺭﻳﺎﺿﯽ ﺩﺭ ﮐﺎﺭﻫﺎﯼ ﻋﻠﻤﯽ ﺧﻠﻖ ﺷﺪﻩ ﺍﺳﺖ. ﺩﺭ ﮔﺬﺷﺘﻪ ﺍﻳﻦ ﺯﺑﺎﻥ ﺩﺍﺭﺍﯼ ﻣﺤﺪﻭﺩﻳﺘﻬﺎﻳﯽ ﺑﻮﺩﻩ ﮐﻪ ﺩﺭ ﻧﺴﺨﻪ ﻫﺎﯼ ﺟﺪﻳﺪ ﺍﻳﻦ ﻣﺸﮑﻼﺕ ﺣﻞ ﺷﺪﻩ ﺍﺳﺖ ﻭ ﺍﻳﻦ ﺯﺑﺎﻥ ﺑﻪ ﻳﮏ ﺯﺑﺎﻥ ﺑﺴﻴﺎﺭ ﻗﻮﯼ ﺗﺒﺪﻳﻞ ﺷﺪﻩ ﺍﺳﺖ. ﺍﻏﻠﺐ ﮐﺘﺎﺑﺨﺎﻧﻪ ﻫﺎﯼ ﻻﺯﻡ ﺑﺮﺍﯼ ﺍﻧﺠﺎﻡ ﺍﻧﻮﺍﻉ ﻣﺤﺎﺳﺒﺎﺕ ﺩﺭ ﺍﻳﻦ ﺯﺑﺎﻥ ﻭﺟﻮﺩ ﺩﺍﺭﺩ. ﺍﻳﻦ ﺯﺑﺎﻥ ﺩﺭ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ ﻓﺮﺗﺮﻥ90 ﺍﺯ ﻗﺎﺑﻠﻴﺖ ﻧﻮﺷﺘﻦ ﺑﺮﻧﺎﻣﻪ ﻫﺎﯼ ﻣﺤﺎﺳﺒﺎﺕ ﻣﻮﺍﺯﯼ ﺑﺮﺍﯼ ﮐﺎﻣﭙﻴﻮﺗﺮ ﻫﺎﯼ ﭼﻨﺪ ﭘﺮﺩﺍﺯﻧﺪﻩ ﺍﯼ ﭘﺸﺘﻴﺒﺎﻧﯽ ﻣﯽ ﮐﻨﺪ ﮐﻪ ﺁﻳﻨﺪﻩ ﺭﻭﺷﻨﯽ ﺭﺍ ﺑﺮﺍﯼ ﻣﺤﺎﺳﺒﺎﺕ ﺳﻨﮕﻴﻦCFD ﻧﺸﺎﻥ ﻣ ﯽ ﺩﻫﺪ. ﺍﻳﻦ ﺯﺑﺎﻥ ﺟﺰﺀ ﺍﻭﻟﻴﻦ ﺯﺑﺎﻧﻬﺎﯼ ﺧﻠﻖ ﺷﺪﻩ ﺑﺮﺍﯼ ﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﯽ ﺑﺎﺷﺪ ﮐﻪ ﺩﺭIBM ﻧﻮﺷﺘﻪ ﺷﺪﻩ ﺍﺳﺖ. ﻗﺎﺑﻠﻴﺖ ﻣﺤﺎﺳﺒﺎﺕ ﺳﺮﻳﻊ ﺑﺎ ﺳﺎﺩﮔﯽ ﺩﺭ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﯽ ﺑﺎﻋﺚ ﻣﺤﺒﻮﺑﻴﺖ ﺁﻥ ﺑﻴﻦ ﻣﻬﻨﺪﺳﺎﻥ ﻭ ﺩﺍﻧﺸﻤﻨﺪﺍﻥ ﺷﺪﻩ ﺍﺳﺖ. ﺯﺑﺎﻥ ﻓﺮﺗﺮﻥ ﺩﺭ ﺣﺎﻝ ﺣﺎﺿﺮ ﺩﺍﺭﺍﯼ ﻗﺎﺑﻠﻴﺖ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﯽ ﺷﻲﺀ ﮔﺮﺍ ﺷﺪﻩ ﺍﺳﺖ. ﻣﻌﻤﻮﻻ ﺍﺯ ﻓﺮﺗﺮﻥ77 90 ﺍﺳﺘﻔﺎﺩﻩ ﻣﯽ ﮔﺮﺩﺩ ﮐﻪ ﻧﺴﺨﻪ90 ﺁﻥ ﻣﺤﺒﻮﺑﻴﺖ ﻋﻤﻮﻣﯽ ﺗﺮﯼ ﺩﺍﺭﺩ. ﺩﺭ ﺍﻳﻦ ﻣﺘﻦ ﺍﺯ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ ﻫﺎﯼ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﯽ ﻓﺮﺗﺮﻥ90 ﺍﺳﺘﻔﺎﺩﻩ ﻣﯽ ﮐﻨﻴﻢ ﻭ ﺩﺭ ﻣﻮﺍﺭﺩ ﻻﺯﻡ ﺩﺭ ﻣﻮﺭﺩ ﻓﺮﺗﺮﻥ77 ﻫﻢ ﺑﺤﺚ ﺧﻮﺍﻫﻴﻢ ﮐﺮﺩ. ﺗﺎﺭﻳﺨﭽﻪ] 2 [ 1954 Fortran I 1958 Fortran II 1958 Fortran IV 1966 Fortran 66 standard 1978 Fortran 77 standard

ﯽﺗﺎﻣﺪﻘﻣ - FORTRAN نﺮﺗﺮﻓ شزﻮﻣآresearch.iaun.ac.ir/pd/yaghoubi koupaye/pdfs/UploadFile_1744.pdf · ﯽﺗﺎﻣﺪﻘﻣ - fortran نﺮﺗﺮﻓ شزﻮﻣآ

  • Upload
    lebao

  • View
    227

  • Download
    4

Embed Size (px)

Citation preview

مقدماتی- FORTRANآموزش فرترن

معرفی و تاريخچه فرترن

زبان برنامه نويسی . همانطور که در اغلب کتابهای مکانيک ديده ايد، در اغلب برنامه های مهندسی از اين زبان استفاده می گردد

فرترن . استفاده کرد CFDفرترن با وجود سادگی از قدرت و سرعت بااليی برخوردار است، بطوريکه می توان از آن برای نوشتن برنامه های

پيداست، برای انجام ) FORmula TRANslation(وق العاده در مورد اعداد معرفی می گردد و همانطور که از اسمش اغلب با قابليت ف

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

اغلب کتابخانه های الزم برای انجام انواع محاسبات در اين زبان وجود . تبديل شده است حل شده است و اين زبان به يک زبان بسيار قوی

از قابليت نوشتن برنامه های محاسبات موازی برای کامپيوتر های چند پردازنده ای پشتيبانی می 90اين زبان در استاندارد فرترن . دارد

اين زبان جزء اولين زبانهای خلق شده برای کامپيوتر می باشد که در . ی دهدنشان مCFDکند که آينده روشنی را برای محاسبات سنگين

IBM زبان . قابليت محاسبات سريع با سادگی در برنامه نويسی باعث محبوبيت آن بين مهندسان و دانشمندان شده است. نوشته شده است

.فرترن در حال حاضر دارای قابليت برنامه نويسی شيء گرا شده است

در اين متن از استاندارد های برنامه . آن محبوبيت عمومی تری دارد 90استفاده می گردد که نسخه 90و 77از فرترن معموالً

.هم بحث خواهيم کرد 77استفاده می کنيم و در موارد الزم در مورد فرترن 90نويسی فرترن

]2[تاريخچه

1954Fortran I

1958Fortran II

1958Fortran IV

1966Fortran 66 standard

1978Fortran 77 standard

1991Fortran 90 standard

1996Fortran 95 standard

چرا فرترن؟

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

زبان Cسالها پيش به نظر می رسيد که با پيشرفت و محبوبيت عمومی زبانهايی مانند . دانشجوی مهندسی با اين زبان آشنايی داشته باشد

ساله اين 40اين ماندگاری مديون کتابخانه ها و کدهای . دد، اما با گذشت سالها اين زبان همچنان استفاده فراوان داردفرترن منسوخ گر

اين زبان همچنان بعنوان مهمترين زبان برای . در هر حال استانداردهای جديد اين زبان قدرت زيادی به اين زبان داده است. زبان است

البته زبان فرترن . فرترن برای انجام محاسبات رياضی با سرعت و قابليت باال طراحی شده است. می آيد مهندسان و دانشمندان بشمار

بنويسيد، ) Graphical User Interface(هنوز در ايجاد محيط گرافيکی کمبود دارد و اگر بخواهيد برای فرترن يک رابط گرافيکی کاربر

برای Delphiيا Visual Basicانتخاب راحت تر استفاده از يک زبان ساده مانند . کنيد!) ها API(بايد خود را درگير فراخوانی توابع ويندوز

را در اين زبانها می سازيم و موتور اصلی برنامه برای کار با معادالت و انجام محاسبات GUIدر اين روش .ايجاد رابط گرافيکی کاربر است

اينکار را در مراحل . در اختيار برنامه قرار می دهيم) DLL)Dynamic Link Libraryمی نويسيم و بعد آنرا با فرمت FORTRANرا در

.به شما آموزش خواهم داد) سطح متوسط(پيشرفته تر آموزش

.که بين مهندسان مکانيک محبوبيت دارد با زبان فرترن نوشته شده است Ansysبرنامه

90فرترن

اين ويرايش کدهای فرترن . تاندارد فرترن می باشد و برنامه نويسی را بسيار آسانتر کرده استفراتر از يک ويرايش جديد از اس 90فرترن

اين زبان امکانات برنامه نويسی شيء گرا را , يک زبان برنامه نويسی انعطاف پذير و قوی است 90فرترن . را نيز پشتيبانی می کند 77

استفاده از اشاره گرها و بسياری امکانات ديگر به آن اضافه شده , صيص حافظهامکانات دسترسی به امکانات سيستمی مانند تخ. داراست

چند (استفاده از دستورات حالت موازی , ارتقاء قابليتهای عددی! 77است تا فرترن ++Cبيشتر شبيه به 90است؛ بعبارت ديگر فرترن

دنبال شده 95اين روند در فرترن . دهای موازی می باشدکه يک پيشرفت شايان ذکر در برنامه نويسی علمی و نوشتن ک) پردازنده ای

.است و انتظار می رود در ويرايش های جديدتر اين زبان امکانات گسترده تری برای برنامه نويسی علمی به اين زبان اضافه گردد

Digital Visual Fortranمقدمه کار با

همان محيط Visual Fortranمحيط . ارائه شده است Visual Fortranدر اين بخش اطالعات الزم جهت نوشتن برنامه در محيط

Visual StudioMicrosoftاگر قبالً تجربه کار با اين محيط را داريد می توانيد مطالب را از بخش بعدی ادامه دهيد. است.

از . ساده ترين راه برای اين کار استفاده از منوی فايل است. مراحل زير را دنبال کنيد. برای نوشتن برنامه فرترن ابتدا يک پروژه می سازيم

. را انتخاب کنيد Newو Fileمنوی اصلی

1 -File <New

را انتخاب Icon( ,Fortran Consol Application(در اين برگه آيکون . را انتخاب کنيد Projectsاز صفحه نمايش داده شده ، برگه

. ، يک نام انتخاب کنيدProject Nameفراموش نکنيد برای پروژه در قسمت . کنيد

2 -Project)tab( <Fortran ConsolApplication

. کليک کنيد تا برنامه شما ايجاد شود Finishصفحه ای که نوع پروژه را از شما می پرسد، ظاهر می گردد؛ روی . کليک کنيدOKروی

. اما اين پروژه خالی است. ا ايجاد شده استپروژه شم. کليک کنيدOKصفحه ای شامل اطالعات پروژه شما نمايش داده خواهد شد؛ روی

.حاال بايد برنامه اصلی را به اين پروژه اضافه کنيم

.برای اضافه کردن فايل برنامه فرترن به اين پروژه دوباره از منوی اصلی استفاده می کنيم

3 -File <New

90اين قالب استاندارد فرترن (را انتخاب کنيد Fortran Free Format Source Fileدر اين برگه آيکون . را انتخاب کنيد Filesبرگه

تا حد ممکن نام فايلها را با دقت انتخاب کنيد تا . ، يک نام انتخاب کنيدFile Nameفراموش نکنيد برای اين فايل در قسمت ) . می باشد

.تيک خورده باشد Add to projectهمچنين توجه کنيد که چک باکس . در آينده با خواندن نام فايل بتوانيد به محتوای آن پی ببريد

4 -Files)tab( <FortranFree Format Source File

لطفاً برنامه زير را در اين . حال نوبت به نوشتن اولين برنامه فرترن می رسد. فايل برنامه شما ساخته شده است. کليک کنيدOKروی کليد

.فايل بنويسيد

PROGRAM hello_fortran

!This is comment in fortran file

CHARACTER::A

WRITE(*,*) 'Hello dear user, Fortran is so easy'

READ(*,*) A

END PROGRAM hello_fortran

).File > Save or CTRL+S(فايل را ذخيره کنيد

تخاب می کنيم يا را انBuild > Build Hello.exeبرای اينکار از منو اصلی . می کنيم) Compile(برای اجرای اين برنامه ابتدا آنرا ترجمه

کليک - با دابل. اگر خطايی در برنامه وجود داشته باشد، تعداد و منبع خطا در پنجره زيرين نمايش داده خواهد شد. را می زنيم F7کليد

hello.exeبرنامه ترجمه شده و فايل اجرايی . اگر خطايی وجود نداشته باشد. روی خطا، منبع خطا در برنامه نشان داده خواهد شد

.و در پنجره وضعيت پيامی به شکل زير نمايش داده می شود. ساخته می شود

Hello.exe - 0 error(s), 0 warning(s)

يا از . را بزنيد F5برنامه اجرايی را يافته و اجرا کنيد يا کليد Debugبرای اجرای برنامه می توانيد به محل ذخيره برنامه رفته در پوشه

).اين آيکون شبيه يک برک کاغذ است که در سمت راست آن يک فلش رو به پايين وجود دارد(استفاده کنيد goآيکون

استانداردهای کد نويسی

.برای سازگاری و خوانايی بيشتر در برنامه نويسی بهتر است که قوانين زير را رعايت کنيد

اين زبان بين حروف کوچک و (حروف کوچک بنويسيد همة کلمات کليدی اين زبان را با حروف بزرگ و همه چيز ديگر را با -1

البته اين ساختار آنچنان مناسب نمی باشد و می تواند خوانايی برنامه را کاهش دهد و دليل استفاده از !). بزرگ فرقی نمی داند

.در هر حال استفاده از اين روش در برنامه نويسی مدرن کار درستی نيست. آن قدمت اين روش است

. از دندانه دار کردن در متن اصلی برنامه و همچنين بلوکهای ديگر استفاده کنيد -2

.اسم برنامه ها، زير برنامه ها و توابع را در انتهای آنها ذکر کنيد -3

ساختار برنامه فرترن

.زير است به ساختار زبانهای برنامه نويسی ديگر شباهت زيادی دارد و به شکل 90ساختار برنامه در فرترن

PROGRAM program_name

! Comment and program information

Declaration of variables and/or external functions

Program body

END PROGRAM program_name

Declaration and body of user-made functions

، کل 77در فرترن ! کمی متفاوت و پيچيده تر است 77تار برنامه در فرترن ساخ. مثال ساده ای از اين ساختار را در بخش قبلی ديده ايد

:بايد از قوانين زير پيروی کند 77برنامه فرترن . صفحه به ستونهايی تقسيم می گردد و هر بخش از برنامه محل مشخصی دارد

از فايل قرار داشته باشند 72تا 7تمام دستورات فرترن بايد بين ستون .

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

کاراکتری غير از صفر قرار دارد به عنوان ادامه 6آنها خالی است اما در ستون 5تا 1دستوراتی که در ستون

!). خط مجاز است 19حداکثر تا (دستورات خط قبل به حساب می آيند

فرترن به (رقمی باشد 5نوشته شوند و حداکثر می تواند يک عدد 5تا 1تورات بايد بين ستون شماره خط دس

. استفاده می گردد GOTOشماره خط نيازی ندارد و فقط برای ارجاع از دستوراتی مانند

توضيحات برنامه در ستون اول خودC دارند .

مختلف را مشخص کنيدخوب است که حداکثر با دو دندانه در برنامه بخشهای.

.به شکل زير است 77با توجه به توضيحات باال ساختار برنامه فرترن

PROGRAM program_name

C Comment and program information

Declare of variables and/or external functions

Body of program

END PROGRAM program_name

Declaration an body of user-made functions

:به شکل زير نوشت 77می توان مثال قبل را برای فرترن

PROGRAM hello_fortran

C This is comment in fortran file

CHARACTER::A

WRITE(*,*) 'Hello dear user, Fortran is so easy'

READ(*,*) A

END PROGRAM hello_fortran

متغيرها

برای اينکه هيچ متغيری از قلم نيفتد، از دستور . گردند) تعيين نوع(پيشنهاد می گردد که همة متغيرهای برنامه در ابتدای برنامه تعريف

IMPLICIT NONE عريف نشده ای اين دستور به مترجم برنامه خواهد گفت که اگر در برنامه به متغير ت. در ابتدای برنامه استفاده کنيد

زبانهای برنامه . اما اين کار خطاهای برنامه نويسی شما را کاهش خواند داد! البته فرترن به تعيين نوع نيازی ندارد. برخورد، اعالم خطا کند

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

تعريف متغير توسط برنامه نويس يا مترجم برنامه در برنامه نويسی حرفه ای برای مدت زيادی مورد بحث . کند زبان فرترن نيز چنين است

مترجم نوع ديگری را (بود تا اينکه ناسا يکی از سنسورهای سفينه فضايی ونوس را بعلت يک تعريف متغير اشتباه توسط مترجم برنامه

خوشبختانه در . بنابراين تعريف متغير توسط برنامه نويس بعنوان يک روش مناسب انتخاب شد. از دست داد) تغير در نظر گرفته بودبرای م

فرترن برای داشتن سازگاری از تعريف داخلی . بسياری از زبانهای برنامه نويسی مدرن تعريف متغير توسط برنامه نويس اجباری است

.انی می کندمتغير توسط مترجم پشتيب

نام گذاری متغيرها

:قوانين نامگذاری متغيرها

کاراکتر است 34حداکثر طول نام متغيرها .

فقط امکان استفاده از حروف کوچک و بزرگ انگليسی)a...zA...Z,(اعداد ،)( خط -و کاراکتر زير) 9,..,0,1 _ (

. وجود دارد

توجه داشته باشيد که بزرگی يا کوچکی حروف برای فرترن فرقی ندارد .

اولين کاراکتر يک اسم بايد حرف باشد .

از کلمات کليدی در نامگذاری استفاده نکنيد.

انواع داده ها

پيشتيبانی می گردند به شرح زير 77انواعی از داده ها که در فرترن . شما در برنامه متغيرها را برای انواع مختلفی از داده ها بکار می بريد

:است

نوعINTEGER برای اعداد صحيح

نوعREAL رقم 8تقريباً (برای اعداد اعشاری (

نوعDOUBLE اين اعداد را مضاعف می ناميم) [رقم معنی دار 16تقريباً (برای اعداد اعشاری با دقت بيشتر [

نوعCHARACTER برای يک کاراکتر يا رشته ای از کاراکترها

نوعLOGICAL برای مقادير منطقی

نوعCOMPLEX برای اعداد مختلط به عنوان يک جفت با دقتREAL بر روی اعداد مختلط 77، اغلب توابع فرترن

.قابل استفاده هستند

1.234D3يک ثابت اعشار و 1.234E3يا 1234.0ست، يک عدد ثابت صحيح ا 1234ثابت های هم به همين شکل بکار می روند مثالً

نمايش داده می شوند و کاراکترها بين دو کوتيشن قرار می گيرند ) 1E5-,3.14(اعداد مختلط به شکل . عدد اعشار با دقت مضاعف است

‘AbBa’ يا‘S’ . ثابتهای منطقی فقط می توانند دو مقدار.TRUE. و.FALSE. ابتدايی و انتهايی هر يک توجه به نقاط(را داشته باشند

).کنيد

اگر اعداد بسيار کوچک يا بسيار بزرگ باشند، ممکن است سيستم آنها را صفر در نظر گرفته و مشکل تقسيم بر صفر در محاسبات پيش

.داشت اين خطاها بسيار رايج هستند و اشکال گزارش شده به سيستم بستگی خواهد. آيد يا اينکه سيستم دچار سر ريز گردد

تعريف متغيرها

IMPILICITاگر از دستور . بايد نام، نوع و اندازه هر متغير را بداند) Compiler(برای تخصيص حافظه الزم به متغيرها، مترجم برنامه

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

a..h وo..z برای متغيرهای اعشار

i,j,k,l,m,n برای متغيرهای صحيح

):اين تعريف در برنامه نويسی بسيار پسنديده است(تعريف متغير با دستور زير صورت می گيرد

Variable_type::variable_name [=initial value] REAL:: alpha, beta, c=10.0

INTEGER:: count, hours, minutes=36

استفاده می گردد PARAMETERاگر بخواهيد مقدار ثابتی را تعريف کنيد از دستور

PARAMETER ({list of names=value}) PARAMETER (pi=3.141592)

عبارات ساده

عبارات و عمليات محاسباتی

اولويت محاسبه . است **عملگر توان در فرترن به شکل . را می شناسيد) است× همان ( *و ) است÷ همان / (، -، + عملگرهايی مانند

در عبارات

اول داخلی ترين پرانتز محاسبه خواهد شد و به همين ترتيب . اگر در عبارات، پرانتز وجود داشته باشد –پرانتز .1

. عبارات داخل پرانتز اولويت اول را دارند

توان .2

ضرب و تقسيم .3

منها جمع و.4

A*B**n-C/D و)A*(B**n)-(C/D يکسان هستند و برای مثال عبارت .

و برای مثال عبارت . اگر دو عبارت از اولويت يکسانی برخوردار باشند، محاسبه از چپ به راست خواهد بود

الزم است بدانيد که حاصل عمليات بين دو اعشار، اعشار است و حاصل عمليات بين دو عدد صحيح، عدد صحيح است؛ . يکسان هستند

برابر .5/.1 صحيح است، حاصل 0برابر 1/5به عنوان مثال حاصل . حاصل عمليات بين عدد اعشار و عدد صحيح، عدد اعشار است

بطور کلی می توان گفت که در محاسبه عبارات اگر تبديل نوع الزم باشد، . مضاعف است 0.2ابر بر 1d0/1d5اعشار است و حاصل 0.2

4d0اعشار و عدد .4صحيح است، عدد 4در استفاده از اعداد دقت کنيد، عدد . متغيرها به متغير با باالترين دقت تبديل می گردند

.مضاعف است

.يکی از ساده ترين عبارات هر زبان برنامه نويسی است برابر قرار دادن مقدار يک متغير با يک عبارت

variable = expression

نوشته می شود و کامپيوتر بعد از محاسبه عبارت در فرترن بصورت برای مثال عبارت رياضی

و جلوگيری از اشتباه کمک می کاربرد پرانتز در عبارات رياضی به خوانايی بيشتر برنامه. قرار می دهد aسمت راست، مقدار آنرا در متغير

.کند

The image part with relationship ID rId5 was not found in the file.

The image part with relationship ID rId6 was not found in the file.

The image part with relationship ID rId7 was not found in the file.

The image part with relationship ID rId8 was not found in the file.

مقايسه متغيرها

را به اين شکل پشتيبانی نمی ... و <, > از عباراتی مانند 77متأسفانه فرترن . مقايسه متغيرها به کامپيوتر قدرت تصميم گيری داده است

.انجام می دهد.EQ.کند و بجای آنها مقايسه را با عباراتی چون

.EQ. equal to

.GE. greater or equal to

.GT. greater than

.LE. less than or equal to

.LT. less than

.NE. not equal to

برای مثال عبارت . پشتيبانی می کند همرا <> و == ، =<، =>، >، <عالمتهای 90حل شده است و فرترن 90اين مشکل در فرترن

(A .EQ. B) معادل(A==B) در هر حال . ، اين عبارت در صورتی صحيح است که مقدار متغيرها با هم برابر باشدو يک عبارت منطقی است

.حاصل يک عبارت مقايسه ای يک مقدار منطقی خواهد بود که می تواند درست يا اشتباه باشد

عبارات منطقی

: دستورات منطقی اين زبان عبارتند از

.NOT. logical negative

.AND. logical and

.OR. logical or

.EQV. logical equivalence

.NEQV. logical non-equivalence (exclusive or)

T: TRUE, F:FALSE

xy.NOT. xx .AND. yx .OR. yx .EQV. yx .NEQV. y

FFTFFTF

TFFFTFT

FTTFTFT

TTFTTTF

کاراکتر و رشته

:به اين شکل است 77تعريف رشته در فرترن . بايد اندازه ای ثابت و از پيش تعيين شده داشته باشندرشته ها 77در فرترن

CHARACTER name*length

:همچنين می توان آرايه ای از رشته ها تعريف کرد

CHARACTER array (size)*length

.گردد استفاده می*برای نوشتن رشته های ثابت تعداد الزم نيست و بجای آن از

CHARACTER format_scope*(*)

PARAMETER(format_scope=’this is constant character!’)

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

.استفاده می گردد//برای ترکيب رشته ها از عالمت . بين شروع و پايان بخش مورد نظر صورت می گيرد :از رشته با قرار دادن عالمت

substring= string(start position: end position)

. می توان عدد شروع يا پايان را ننوشت, برای کاراکترهای شروع و پايان

CHARACTER first_word*8, second_word*5, third_word*20

first_word=’FORTRAN’

second_word=first_word(:3)

third_word=second_word // first_word(4:)

فاصله بعلت اندازه متغير ( خواهد بود FOR TRANپس از اجرای اين دستورات برابر رشته کاراکتری third_wordمتغير

second_word است.(

توابع رشته ای

بترتيب برای ICHARو CHARاندازه رشته می دهد، توابع LENبرای مثال تابع . توابع رشته ای نيز وجود دارد در توابع داخلی فرترن،

. برای يافتن يک رشته در رشته ديگر کاربرد دارد INDEX. تبديل عدد صحيح به کاراکتر و تبديل کاراکتر به عدد صحيح به کار می روند

و بسيارس از توابع ديگر وجود دارند که در صورت نياز امکان مطالعه آنها را خواهيد LLTو LGE ،LGT ،LLEتوابع مقايسه رشته ها مانند

.داشت

ورودی و خروجی

در اغلب برنامه ها نياز داريم که اطالعات ورودی را از صفحه کليد يا فايل بخوانيم و اطالعات خروجی را در صفحه نمايش نشان دهيم يا

.ذخيره کنيم آنها را در فايل خروجی

READدستور

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

READ *, {input list} or

RAED([UNIT=] unit type, [FMT=] format) {input list}

unit type ًبرای صفحه کليد، اين عدد اغلب برای خواندن ورودی از فايل بکار می 5عددی است که نوع ورودی را مشخص می کند، مثال

.است، اما کاربرد اصلی آن برای خواندن ورودی فرمت شده از فايل است *برای دريافت ورودی معموالً format. رود

READ (*,*) a, b, c

WRITEدستور

.برای نمايش خروجی در صفحه نمايش يا فرستادن خروجی به پرينتر يا فايل خروجی بکار می روداين دستور

PRINT *,{output list}

WRITE([UNIT=] unit type, [FMT=] format) {output list}

.فرمت خروجی را تعيين می کند formatنوع خروجی را مشخص می کند و READ ،unit typeمانند دستور

WRITE(*,*) ‘The total is:’, total

.را روی صفحه نمايش نشان خواهد دادtotalو در ادامه مقدار متغير :The total isاين دستور ابتدا رشته

FORMATدستور -تعيين قالب ورودی و خروجی

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

روش دوم قرار دادن يک شماره خط قبل از اين . در دستورات ورودی و خروجی است formatروش استفاده مستقيم اين دستور در بخش

ر اين ساختا. و ارجاع اين شماره در دستورات ورودی و خروجی است.) قرار می گيرد 5تا 1بين خط 77شماره خط در فرترن (دستور

.دستور به شکل زير است

FORMAT (format sequence)

.قرار گيرد به شکل زير خواهد بود WRITEيا اگر داخل دستوراتی چون

FMT= (‘format sequence’)

.ساختار استفاده شده در اين دستور مشخص کننده تعداد ارقام خروجی و شکل نمايش آنهاست

همانطور که در مثالهای قبلی متوجه شده ايد؛ اگر قالب بندی آزاد انتخاب گردد، می توان بجای اين بخش در دستورات ورودی و خروجی

.استفاده کرد *از

format sequenceترتيب قالب بندی

ی شامل نوع متغير و تعداد ارقام اين قالب بند. ، قالب هر متغير بايد مشخص گرددFORMATبرای مشخص کردن قالب بندی در دستور

.آن و نوع نمايش ارقام می باشد

Data descriptionData type

Iw, Iw.mInteger

Ew.d, Ew.dEe, Fw.d,Gw.d, Gw.dEeFloating Point

LwLogical

A, AwCharacter

:در اين جدول حروف بزرگ مشخص کننده نوع متغير هستند

I :متغير صحيح

F :متغير اعشار با اعشار مشخص

E :نمايش علمی عدد اعشار

G: مانندFبه دقت عدد بستگی دارد ،

L :متغير منطقی

A :متغير کاراکتری!

و حروف کوچک قالب متغير را مشخص می کنند

w :تعداد کل ارقام

m :حداقل تعداد ارقامی که بايد نمايش داده شود

d : دقت(بعد از مميز تعداد ارقام(

e :تعداد ارقام توان

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

انتفال به خط بعدی/

‘Any string’رشته ای را به خروجی انتقال می دهد

nX مکان نما راn خانه به راست هدايت می کند

:برای مثال

WRITE(UNIT=*,FMT=10) 'The frequency is', f, 'Hz'

10 FORMAT(1X, A, F10.5, A)

رقم 5رقم و با دقت 15با حداکثر fابتئا مکان نما يک خانه به راست حرکت می کند، رشته کاراکتری نمايش داده می سود، مقدار متغير

صرفنظر کرد و فقط مقدار آنها را FMTو UNITمی توان از کلمات کليدی . اعشار نمايش داده شده و دوباره رشته کاراکتر چاپ می گردد

.نوشت

WRITE(*,10) 'The frequency is', f, 'Hz'

10 FORMAT(1X, A, F10.5, A)

:مثال برنامه نويسی

برنامه ای می خواهيم . شايد از آموختن تئوری کمی خسته شده باشيد، حال وقت آن است که آنچه را که آموخته ايم استفاده کنيم

.را از ورودی خواهيم خواند 2ضرايب معادله درجه . را پيدا کند 2بنويسيم که ريشه های حقيقی يک معادله درجه

رياضيات مسئله:

. در صورتی اين ريشه ها حقيقی هستند که باشد. دارای دو ريشه است به شکل 2می دانيم که هر معادله درجه

.له از رابطه زير بدست می آينددر اينصورت ريشه های حقيقی معاد

The image part with relationship ID rId9 was not found in the file.

دياگرام برنامه :

شروع .1

ضرايب ورودی معادله را بخوان .2

دلتا را محاسبه کن .3

اگر دلتا بزرگتر يا مساوی صفر است.4

ريشه ها را محاسبه کن .4-1

ريشه ها را چاپ کن .4-2

در غير اينصورت _

"معادله ريشه حقيقی ندارد"چاپ کن .4-3

پايان.5

برنامه:PROGRAM Equation_solver_fortran

! This is program calculate the real roots of second order equation

IMPLICIT NONE ! this is important to get used to this statment

! Variable decleration

CHARACTER::end_key

REAL::a,b,c

REAL::Delta, x1, x2

! Main Porgram

WRITE(*,*) ‘Please enter the equation coefficients a*x^2+b*x+c’

WRITE(*,*) ‘a: ?’

READ(*,*) a

WRITE(*,*) ‘b: ?’

READ(*,*) b

WRITE(*,*) ‘c: ?’

READ(*,*) c

Delta=b**2-4*a*c

The image part with relationship ID rId10 was not found in the file.

IF (Delta >= 0) THEN

x1=(b+SQRT(Delta))/(2*a)

x2=(b-SQRT(Delta))/(2*a)

WRITE(*,*) ‘ The real roots are : ‘, x1, x2

ELSE

WRITE(*,*) ‘ This equation has no real root!’

ENDIF

READ(*,*) end_key

END PROGRAM Equation_solver_fortran

در . ی گويم، شما اولين برنامه مهندسی خود را نوشته ايدتبريک م. اگر در نوشتن برنامه اشتباهی نکرده باشيد، برنامه اجرا خواهد شد

برايتان تازگی داشته باشد و ()SQRTو تابع IF..THEN..ELSEفقط ممکن است ساختار . خواندن برنامه باال نبايد مشکلی داشته باشيد

تابع جذر می باشد که در بخشهای بعدی در ()SQRTساختار تصميم گيری و تابع IF..THEN..ELSEهمانطور که حدس زده ايد، ساختار

. مورد آن بحث خواهيم کرد

حتی برنامه های پيچيده . هر آنچه که فکر کنيد را می توانيد بنويسيد. برنامه نويسی شما فقط محدود به تفکر شما در مورد برنامه هاست

انيد چه می خواهيد برنامه نويسی بسيار لذت بخش در هر حال اگر بد. هوش مصنوعی نيز با همين دستورات ساده قابل نوشتن است

هر چه ابزار قويتری داشته باشيد کارها ساده تر . آموختن يک زبان برنامه نويسی مانند يادگرفتن استفاده از يک ابزار است. خواهد بود

.انجام خواهد گرفت، زبان فرترن يک ابزار برنامه نويسی مهندسی بسيار کارآمد است

وجی فايلورودی و خر

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

READ وWRITE در اين حالت بخش . صورت می گيردUNIT برای ورودی . در اين دستورات مشخص کننده نوع ورودی و خروجی است

برای ورودی و خروجی از فايل، ابتدا فايل . قرار می گيرد *در اين دستورات برابر UNITبه صفحه نمايش، بخش از صفحه کليد و خروجی

.به فايل اختصاص می دهد) UNIT(را باز می کنيم، اين کار يک عدد

OPENدستور

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

:به اين شکل است

OPEN(UNIT= number, FILE= ’Name of file’, STATUS= status ,ACCESS= access…(

number يعنی شما می توانيد با خيال –انتخاب کنيد 255تا 0اين عدد را بين (عددی است که شما به فايل اختصاص می دهيد

. ، اين عدد شناسه فايل است!)ايل مجزا را باز کنيدف 255راحت تا

status وضعيت فايل را مشخص می کند و می تواند برای ايجاد فايل جديد‘NEW’ باشد، يا‘OLD’ برای باز کردن فايل موجود و اگر

برای ايجاد فايلهای موقت که با پايان برنامه يا بسته شدن فايل، فايل از بين ’SCRATCH‘بکار می رود و ’UNKNOWN‘مطمئن نيستيد

اگر فايل موجود باشد، پاک شده و فايل جديد جايگزين آن می گردد و . برای جايگزاری فايل جديد است ’REPLACE‘وضعيت ! می رود

.اگر فايل موجود نباشد، فايل جديد ايجاد می گردد

access فايل را مشخص می کند که ممکن است، نوع دسترسی به‘DIRECT’ يا‘SEQUENTAL’ نوع دسترسی به فايل بسيار مهم . باشد

پيش . در اين فايلها داده ها بترتيب خط به خط خوانده و نوشته می شوند. بسيار ساده است ’SEQUENTAL‘است، اما دسترسی ترتيبی

.فرض دسترسی ترتيبی است

CLOSEدستور

:ساختار اين دستور به شکل زير است. گردد بعد از پايان کار با فايل آنرا ببنديد پيشنهاد می

CLOSE)UNIT= unit, STATUS = status…(

unit شماره شناسه فايل است وstatus وضعيت بستن می تواند‘KEEP’ برای حفظ فايل و‘DELETE’ پيش فرض . برای حذف فايل است

.حذف فايل است

زيربرنامه هاتوابع و

Intrinsic Functionsتوابع داخلی

.بعضی از مهمترين اين توابع به شرح زير هستند. هر مترجم برنامه فرترن کتابخانه ای از توابع داخلی دارد

SIN, COS, ASIN, ACOS, TAN, ATAN, COTAN: توابع مثلثاتی

، باقيمانده تقسيم MIN,MAX، حداقل و حداکثر EXPتابع نمايی ، LOG, LOG10، لگاريتم SQRT، جذر ABSقدرمطلق : توابع رياضی

MOD و ...

…,DOT_PRODUCT, MATMUL, TRANSPOSE: توابع ماتريسی

در . توابع بسيار زياد ديگری نيز وجود دارد؛ همچنين ممکن است که مترجم شما توابع بيشتری از توابع استاندارد در اختيار شما قرار دهد

!!ج به تابعی داشتيد، قبل از اينکه خودتان به فکر نوشتن آن باشيد مطمئن شويد که آن تابع وجود نداردهر حال اگر احتيا

بعضی از اين توابع انواع داده ها را بعنوان ورودی خود می پذيرند البته اگر چند ورودی وجود داشته باشد همه بايد از يک نوع باشند،

برای مشخص کردن نوع Digital Visual Fortranبعضی از مترجم ها مانند . شتيبانی می کنندبعضی از اين توابع نيز نوع مشخصی را پ

.).نرم افزار خود مراجعه نماييد helpبرای جزئيات به (داده ورودی و خروجی از پيشوند و پسوند برای توابع استفاده می کند

.فراخوانی توابع مانند اختصاص يک مقدار به متغير می باشد

Result_variable = function_name({list of parameters})

:برای مثال

a= sin(b)

b متغيری است که به تابع ارسال می گردد وa حاصل تابع سينوس خواهد بود!

Intrinsic Subroutinesزيربرنامه های داخلی

تابع يک متغير بازگشتی دارد درحاليکه زير ! البته اين تنها فرق آنها نيست. فرق تابع و زير برنامه در تعداد متغيرهای بازگشتی آنهاست

زير برنامه ها . تابع يک مقدار را بر می گردانند اما حق تغيير متغيرهای ورودی را ندارند. برنامه می تواند بيش از يک مقدار را برگرداند

.به شکل زير فراخوانی می شوند CALLزيربرنامه ها با دستور . قدار بازگشتی ندارند، در عوض امکان تغيير متغيرهای خود را دارندم

CALL subroutine_name({list of variables})

:بعضی از زيربرنامه های داخلی عبارتند از

DATE_AND_TIME, MVBITS, RANDOM_NUMBER, RANDOM_SEED ,SYSTEM_CLOCK

External Functionsتوابع خارجی

:ساختار تابع به شکل زير است. معموالً بعد از پايان برنامه می توانيد توابع خودتان را اضافه کنيد. شما می توانيد خودتان توابع را بنويسيد

type FUNCTION name ({dummy arguments})

local variable declaration

body of function…

name = expression

body of function continued if needed

END FUNCTION name

type اگر به ساختار باال توجه . حاصل تابع مقداری است که توسط تابع بازگردانده می شود. را مشخص می کند) نوع حاصل تابع(نوع تابع

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

. تابع اختصاص داده شود" نام"جايی از تابع، مقداری به

منظور از . (قابل دسترسی در بدنه تابع است 1شامل همة ثابت ها، متغيرها و حتی روالهاي، dummyargumentsمتغيرهای ظاهری

نوع اين متغيرهای . وقتی تابع فراخوانی می گردد بايد ليستی از اين متغيرها به آن فرستاده شود). بع و زيربرنامه ها هستندروالها، توا

نوع متغيرها در هنگام ارسال به توابع توسط . واقعی بايد با متغيرهای ظاهری موجود در تعريف تابع يکسان باشد، اما نام آنها مهم نيست

! رل نمی گردد و اگر نوع متغيرهای يکسان نباشد با اشکاالت عجيبی روبرو خواهيد شدمترجم برنامه کنت

.بعنوان مثال برای محاسبه نيروی جاذبه بين دو جسم با استفاده از فرمول نيوتن، تابع نيوتن را به شکل زير تعريف می کنيم

REAL FUNCTION Newton (m1, m2, r)

REAL:: gamma = 6.672E-11, m1, m2, r

Newton = -gamma*m1*m2/r**2

END Newton

Statement Functionsتوابع يک خطی

.وقتی توابعی که بکار می بريد، آنچنان کوتاه هستند که در يک خط تمام می شوند، می توانيد از اين ساختار استفاده کنيد

Function_name({list of parameters}) = expression

.مثالً تابع نيوتن که در باال تعريف شد را می توان با اين ساختار به شکل زير نوشت

Newton(m1, m2, r) = -6.672E-11*m1*m2/r**2

External Subroutinesزيربرنامه های خارجی

.ساختار زير برنامه ها به شکل زير است

SUBROUTINEname {dummy argument list{

local variables declaration

body of subroutine…

END SUBROUTINEname

، يعنی آدرس متغير در )++Cدر arg&يا Pascalدر VAR argمانند (”call by reference“تمام متغيرها با آدرس فرستاده می شوند

در توابع نيز چنين است، اما فرض می گردد که . تقيماً تغيير دهدحافظه به زيربرنامه فرستاده می شود، و زيربرنامه می تواند متغير را مس

.توابع متغيرهای ورودی را تغيير نمی دهند

RETURN, SAVE, EXTERNAL, INTERNALدستورات

ن يابد همة روالهای خوب بايد يک نقطه ورود و يک نقطه خروج داشته باشند، اما گاهی الزم است که زيربرنامه در نقطه ای ديگر پايا

اين دستور اجرای زير برنامه را متوقف کرده و برنامه را . استفاده می گردد RETURNبرای اينکار از دستور ). برای مثال هنگام ايجاد خطا(

. به روال فراخوانی کننده اين زير برنامه باز می گرداند

بخواهيم اين مقادير در اجرای بعدی زيربرنامه موجود اگر. پس از پايان يک زيربرنامه، مقدار همة متغيرهای محلی از بين می رود

اين . ، بايد اين موضوع را برای مترجم مشخص کنيم تا مترجم بداند که بايد مقدار متغيرها را ذخيره کند)STATIC ALLOCATION(باشد

:ساختار اين دستور به اين شکل است. به مترجم اصالع می دهيم SAVEموضوع را با دستور

SAVE [{list of local variables to be saved}]

اين . وقتی يک تابع بعنوان متغير به يک روال ديگر فرستاده می شود، نوع تابع بايد قبل از ارسال بعنوان داخلی يا خارجی تعريف گردد

.تعريف با دستورات زير صورت می گيرد

INTRINSIC {list of function names}

EXTERNAL {list of function names}

برای مثال

PROGRAM func

EXTERNAL CTN

INTRINSIC SIN, COS

REAL::angle=0.785 !...pi/4

REAL::sine,cosine,tangent

CALL TRIG(angle,SIN,sine)

WRITE(*,*) 'SIN(0.785)=',sine

CALL TRIG(angle,COS,cosine)

WRITE(*,*) 'COS(0.785)=',cosine

CALL TRIG(angle,CTN,cotangent)

WRITE(*,*) 'COTAN(0.785)=',cotangent

READ*,r

END PROGRAM func

SUBROUTINE TRIG(X,F,Y)

Y = F(X)

RETURN

END SUBROUTINE TRIG

FUNCTION CTN(X)

CTN = COS(X)/SIN(X)

RETURN

END FUNCTION CTN

ساختارهای کنترلی

.ساختارهای کنترلی جهت اجرای برنامه را کنترل می کنند

IFساختار

ساختار . در اين ساختار بنابر حاصل يک مقايسه اجرای برنامه به جای ديگری منتقل می شود. اين ساختار يک ساختار تصميم گيری است

.عمومی آن به شکل زير است

IF (First condition statement) THEN

First sequence of commands

ELSE IF (Second condition statement) THEN

Second sequence of commands

ELSE IF …

ELSE

Alternative sequence of commands

END IF

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

IF (number .LT. 0) THEN

sign=-1

ELSE IF (number .GT. 0) THEN

sign=1

ELSE

sign=0

END IF

.صرفنظر می شود END IFو THEN ،ELSEدر اين حالت از . با يک دستور، آنرا در يک خط خالصه کرد IFمی توان برای اجرای يک

IF (Condition statement) Statement to be executed

IF (r==0) WRITE(*,*) 'r=0'

Doحلقه

گفته می شود که (در برنامه نويسی پيشرفته بسيار بد است GOTOچون استفاده از حلقه . اين حلقه برای تکرار بخشی از برنامه است

در هر حال جالب نيست که در هنگام اجرای برنامه به بخش ديگری پرش کرد، حداقل اينکار). امکان اشتباه اين دستور بسيار زياد است

.خوانايی برنامه را بسيار کاهش خواهد داد

:به شکل زير است DOساختار دستوری استفاده از حلقه

label: DO counter=start, limit, step

Sequence of commands to be looped through

END DO label

.می توان از دستورات زير استفاده کرد Cدر زبان whileو forبرای پياده سازی حلقه های ديگر مثل حلقه

برای استفاده از اين دستورات بايد برای حلقه . برای تکرار حلقه از ابتدا می باشد CYCLEبرای خروج از اجرای حلقه و دستور EXITدستور

ساختار ! است GOTOتفاده از دستور در نظر گرفت اين کار را با دقت بسيار زياد انجام دهيد زيرا اينکار نيز مانند اس (label)ها برچسب

:اين دستورات به شکل زير است

EXIT [name of loop]

CYCLE [name of loop]

پيشنهاد می کنم تا جای ممکن از اين دستورات استفاده نکنيد، چون شما می توانيد بجای استفاده از اين دستورات با تغييراتی در کد

در اين . مثال زير توجه کنيد که برای روشنتر شدن روش استفاده از اين دستورات بيان شده است به. برنامه را به شکل ديگری بنويسيد

.مشخص است که اعداد نبايد صفر يا منفی باشند.مثال داده های موجود در يک آرايه بترتيب جذر گرفته و معکوس می گردد

REAL:: array(5)

Outer: DO

READ(*,*) array

Inner: DO k=1, 5

IF (array(k)==0) CYCLE inner

IF (array(k)<0) EXIT

Array(k)=1/SQRT(array(k))

END DO inner

WRITE(*,*) array

END DO outer

استفاده می EXITبرای خروج از چنين حلقه هايی از دستور ). بدون محدوديت DOحلقه (در برنامه باال يک حلقه بينهايت وجود دارد

.گردد

: بشکل زير است 77در فرترن DOساختار حلقه

DO label, counter=start, limit, step

Sequence of commands to be looped through

label CONTINUE

GOTOدستور

.ساختار اين دستور بسيار ساده است. از اين دستور تا حد امکان استفاده نکنيد

GOTO label

.و اجرای برنامه به آن محل منتقل می گردد! جای برنامه که بخواهيدو يک برچسب در هر

شرطی GOTOدستور

.استفاده از اين دستور هم مانند دستور قبل منع شده است

STOPدستور

دستور به شکل ساختار اين . از اين دستور استفاده می گردد! اگر بخواهيم برنامه را متوقف کنيم و کنترل را به سيستم عامل بازگردانيم

:زير است

STOP [‘message’]

Arraysآرايه ها

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

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

.بصورت ديناميک اختصاص داده شود، تعداد را مشخص نمی کنيم

type array_name({lower bound in nth dimention:Upper bound in nth dimention})

. ع داده را اعداد حقيقی در نظر می گيريمبرای مثال فرض کنيد که می خواهيد داده های دمای نقاط در يک شبکه را ذخيره کنيد، نو

:است 20تا 1می باشد و در عرض از 70تا 50شماره نقاط در طول از

REAL:: temperature(50:70, 1:20)

يا

REAL:: temperature(50:70, 20)

آرايه ها بترتيب ستون در . بعد داشته باشد 7می تواند تا 77آرايه در فرترن . حد پايين آرايه بصورت پيش فرض از يک شروع می شود

به آرايه ها دسترسی داشته باشيم بهتر است که حلقه شمارنده ستونها داخل حلقه DOحافظه قرار می گيرند و اگر بخواهيم با دستور

دسترسی به هريک از اجزائ آرايه ها با استفاده از انديسهای آن صورت می ). برای سرعت دسترسی باالتر(ار گيرد شمارنده سطر ها قر

وجود دارد که کار با آرايه ها را سريعتر و کارآمدتر کرده است و در صورتی که چنين دستوراتی وجود 90گيرد، البته دستوراتی در فرترن

.مخصوصاً اگر برای استفاده از کامپيوترهای چند پردازنده ای برنامه نويسی می کنيد. نيدداشته باشد، از آنها استفاده ک

و 56قرار دهيم و همچنين دمای نقطه tempرا بيابيم و در متغير 12و عرض 55مثال باال فرض کنيد که دمای نقطه ای با طول در

.کلوين قرار دهيم 400را برابر 13

temp = temperature(55,12)

temperature(56,13) = 400.0

برای مثال برای نمايش کل . برای خواندن يا چاپ آرايه ها می توان انديسها را ناديده گرفت تا عمل مورد نظر روی کل آرايه انجام گيرد

.روی صفحه نمايش از دستور زير استفاده کردtemperatureآرايه

WRITE(*,*) temperature

.ه تعداد اعضاء در يک سطر جا نگيرد کمی گيج کننده استاين نمايش در صورتی ک

ارسال آرايه بعنوان يک پارامتر به تابع

پس , تنها مشکل عدم اطالع آرايه از اندازه خودش می باشد, بسياری از موارد شما می خواهيد که يک آرايه را به يک تابع ارسال کنيد

يا بايد اندازه آرايه را هم بعنوان يک پارامتر ديگر به تابع ) fixed-size array(ثابت باشد بايد آرايه فرستاده شده به تابع دارای اندازه

برای آخرين پارامتر *اگر اندازه آرايه مشخص نباشد می توانيم آن آرايه را با آرگومان ! ارسال کنيم تا مبادا از مرزهای آرايه فراتر برويم

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

.طول آرايه اطالع نخواهد داشت و شما خودتان بايد مطمئن شويد که فراتر از محدوده اعضاء آرايه نرويد

: مراجع

Aloksandra Donev ,”Introductionto FORTRAN“ ,Physics Department, State University of Michigan, September

1999–recommended forreading

1377، کانون نشر علوم، چاپ اول، "Visual C++ 6کتاب آموزشی "محمد نوروزی، : ترجمه

1370، چاپ دوم "علوم نوين فرترن، موسسه نشر –برنامه نويسی کامپيوتر "دکتر حبيب اهللا ده مرده، پرويز سرگلزايی، چنگيز دل آرا،

]2 [http://www.pcc.qub.ac.uk/tec/courses/f90/ohp/header_ohMIF_1.html

]3 [Help of Digital Visual FORTRAN –standard edition V 6.0