آموزش برنامه نویسیزبان های برنامه نویسیمباحث عمومیمحیط برنامه نویسیمهندسی نرم افزارنرم افزار

زبان فورترن Fortran

fortran

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

همانطور که در اغلب کتابهای مکانیک دیده اید، در اغلب برنامه های مهندسی از این زبان استفاده می گردد. زبان برنامه نویسی فرترن با وجود سادگی از قدرت و سرعت بالایی برخوردار است، بطوریکه می توان از آن برای نوشتن برنامه های CFD استفاده کرد. فرترن اغلب با قابلیت فوق العاده در مورد اعداد معرفی می گردد و همانطور که از اسمش (FORmula TRANslation) پیداست، برای انجام محاسبات ریاضی در کارهای علمی خلق شده است. در گذشته این زبان دارای محدودیتهایی بوده که در نسخه های جدید این مشکلات حل شده است و این زبان به یک زبان بسیار قوی تبدیل شده است. اغلب کتابخانه های لازم برای انجام انواع محاسبات در این زبان وجود دارد. این زبان در استاندارد فرترن ۹۰ از قابلیت نوشتن برنامه های محاسبات موازی برای کامپیوتر های چند پردازنده ای پشتیبانی می کند که آینده روشنی را برای محاسبات سنگین CFD نشان می دهد. این زبان جزء اولین زبانهای خلق شده برای کامپیوتر می باشد که در IBM نوشته شده است. قابلیت محاسبات سریع با سادگی در برنامه نویسی باعث محبوبیت آن بین مهندسان و دانشمندان شده است. زبان فرترن در حال حاضر دارای قابلیت برنامه نویسی شیء گرا شده است.معمولاً از فرترن ۷۷ و ۹۰ استفاده می گردد که نسخه ۹۰ آن محبوبیت عمومی تری دارد. در این متن از استاندارد های برنامه نویسی فرترن ۹۰ استفاده می کنیم و در موارد لازم در مورد فرترن ۷۷ هم بحث خواهیم کرد.

چرا فرترن؟

زبان اصلی برنامه نویسی در کاربردهای علمی فرترن است. اغلب کدهای قدیمی با این زبان نوشته شده است. بنابراین لازم است که یک دانشجوی مهندسی با این زبان آشنایی داشته باشد. سالها پیش به نظر می رسید که با پیشرفت و محبوبیت عمومی زبانهایی مانند C زبان فرترن منسوخ گردد، اما با گذشت سالها این زبان همچنان استفاده فراوان دارد. این ماندگاری مدیون کتابخانه ها و کدهای ۴۰ ساله این زبان است. در هر حال استانداردهای جدید این زبان قدرت زیادی به این زبان داده است. این زبان همچنان بعنوان مهمترین زبان برای مهندسان و دانشمندان بشمار می آید. فرترن برای انجام محاسبات ریاضی با سرعت و قابلیت بالا طراحی شده است. البته زبان فرترن هنوز در ایجاد محیط گرافیکی کمبود دارد و اگر بخواهید برای فرترن یک رابط گرافیکی کاربر(Graphical User Interface) بنویسید، باید خود را درگیر فراخوانی توابع ویندوز(API ها!) کنید. انتخاب راحت تر استفاده از یک زبان ساده مانند Visual Basic یا Delphi برای ایجاد رابط گرافیکی کاربر است. در این روش GUI را در این زبانها می سازیم و موتور اصلی برنامه برای کار با معادلات و انجام محاسبات را در FORTRAN می نویسیم و بعد آنرا با فرمت DLL (Dynamic Link Library) در اختیار برنامه قرار می دهیم. برنامه Ansys که بین مهندسان مکانیک محبوبیت دارد با زبان فرترن نوشته شده است.

فرترن ۹۰

فرترن ۹۰ فراتر از یک ویرایش جدید از استاندارد فرترن می باشد و برنامه نویسی را بسیار آسانتر کرده است. این ویرایش کدهای فرترن ۷۷ را نیز پشتیبانی می کند. فرترن ۹۰ یک زبان برنامه نویسی انعطاف پذیر و قوی است, این زبان امکانات برنامه نویسی شیء گرا را داراست. امکانات دسترسی به امکانات سیستمی مانند تخصیص حافظه, استفاده از اشاره گرها و بسیاری امکانات دیگر به آن اضافه شده است؛ بعبارت دیگر فرترن ۹۰ بیشتر شبیه به C++ است تا فرترن ۷۷! ارتقاء قابلیتهای عددی, استفاده از دستورات حالت موازی (چند پردازنده ای) که یک پیشرفت شایان ذکر در برنامه نویسی علمی و نوشتن کدهای موازی می باشد. این روند در فرترن ۹۵ دنبال شده است و انتظار می رود در ویرایش های جدیدتر این زبان امکانات گسترده تری برای برنامه نویسی علمی به این زبان اضافه گردد

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

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

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

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

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

 

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

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

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

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

  1. تمام دستورات فرترن باید بین ستون ۷ تا ۷۲ از فایل قرار داشته باشند.
  2. فاصله خالی برای مترجم برنامه معنایی ندارد ولی برای خوانایی برنامه باید از آنها استفاده کرد!
  3. دستوراتی که در ستون ۱ تا ۵ آنها خالی است اما در ستون ۶ کاراکتری غیر از صفر قرار دارد به عنوان ادامه دستورات خط قبل به حساب می آیند (حداکثر تا ۱۹ خط مجاز است!).
  4. شماره خط دستورات باید بین ستون ۱ تا ۵ نوشته شوند و حداکثر می تواند یک عدد ۵ رقمی باشد (فرترن به شماره خط نیازی ندارد و فقط برای ارجاع از دستوراتی مانند GOTO استفاده می گردد.
  5. خوب است که حداکثر با دو دندانه در برنامه بخشهای مختلف را مشخص کنید.
  6. توضیحات برنامه در ستون اول خود C دارند.

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

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

متغیرها

پیشنهاد می گردد که همه متغیرهای برنامه در ابتدای برنامه تعریف (تعیین نوع) گردند. برای اینکه هیچ متغیری از قلم نیفتد، از دستور IMPLICIT NONE در ابتدای برنامه استفاده کنید. این دستور به مترجم برنامه خواهد گفت که اگر در برنامه به متغیر تعریف نشده ای برخورد، اعلام خطا کند. البته فرترن به تعیین نوع نیازی ندارد! اما این کار خطاهای برنامه نویسی شما را کاهش خواند داد. زبانهای برنامه نویسی زیادی در اولین استفاده از متغیر برای آن متغیر نوعی در نظر می گیرند و نیازی نیست که برنامه نویس نوع متغیرها را مشخص کند زبان فرترن نیز چنین است. تعریف متغیر توسط برنامه نویس یا مترجم برنامه در برنامه نویسی حرفه ای برای مدت زیادی مورد بحث بود تا اینکه ناسا یکی از سنسورهای سفینه فضایی ونوس را بعلت یک تعریف متغیر اشتباه توسط مترجم برنامه (مترجم نوع دیگری را برای متغیر در نظر گرفته بود) از دست داد. بنابراین تعریف متغیر توسط برنامه نویس بعنوان یک روش مناسب انتخاب شد. خوشبختانه در بسیاری از زبانهای برنامه نویسی مدرن تعریف متغیر توسط برنامه نویس اجباری است. فرترن برای داشتن سازگاری از تعریف داخلی متغیر توسط مترجم پشتیبانی می کند

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

  1. حداکثر طول نام متغیرها ۳۴ کاراکتر است.
  2. فقط امکان استفاده از حروف کوچک و بزرگ انگلیسی (a…z A…Z,)، اعداد(۰,۱,..,۹) و کاراکتر زیر-خط ( _ ) وجود دارد.
  3. توجه داشته باشید که بزرگی یا کوچکی حروف برای فرترن فرقی ندارد.
  4. اولین کاراکتر یک اسم باید حرف باشد.
  5. از کلمات کلیدی در نامگذاری استفاده نکنید.

 

انواع داده ها

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

۱.       نوع INTEGER برای اعداد صحیح

۲.       نوع REAL برای اعداد اعشاری (تقریباً ۸ رقم)

۳.       نوع DOUBLE برای اعداد اعشاری با دقت بیشتر (تقریباً ۱۶ رقم معنی دار) [این اعداد را مضاعف می نامیم]

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

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

۶.       نوع COMPLEX برای اعداد مختلط به عنوان یک جفت با دقت REAL، اغلب توابع فرترن ۷۷ بر روی اعداد مختلط قابل استفاده هستند

ثابت های هم به همین شکل بکار می روند مثلاً ۱۲۳۴ یک عدد ثابت صحیح است، ۱۲۳۴.۰ یا ۱.۲۳۴E3 یک ثابت اعشار و ۱.۲۳۴D3 عدد اعشار با دقت مضاعف است. اعداد مختلط به شکل (۳.۱۴,-۱E5) نمایش داده می شوند و کاراکترها بین دو کوتیشن قرار می گیرند  ‘AbBa’یا ‘S’. ثابتهای منطقی فقط می توانند دو مقدار .TRUE. و .FALSE. را داشته باشند (به نقاط ابتدایی و انتهایی هر یک توجه کنید).

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

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

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

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

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

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

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

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

توان

ضرب و تقسیم

جمع و منها

توابع رشته ای

در توابع داخلی فرترن، توابع رشته ای نیز وجود دارد. برای مثال تابع LEN اندازه رشته می دهد، توابع CHAR و ICHAR بترتیب برای تبدیل عدد صحیح به کاراکتر و تبدیل کاراکتر به عدد صحیح به کار می روند. INDEX برای یافتن یک رشته در رشته دیگر کاربرد دارد. توابع مقایسه رشته ها مانند LGE، LGT، LLE و LLT و بسیارس از توابع دیگر وجود دارند که در صورت نیاز امکان مطالعه آنها را خواهید داشت

ورودی و خروجی

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

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

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

نظرات