همیشه داستانهای جذابی در دنیای فناوری وجود داره، داستانهایی که از نیازها و مشکلاتی که در زمان خودشون وجود داشتن، نشأت میگیرن. این داستانها فقط درباره فناوری نیستن؛ بلکه درباره افرادی هستن که با خلاقیت و پشتکارشون، راهحلهای نوآورانهای ایجاد کردن. یکی از این داستانها، داستان زبانیه که شاید کمتر در موردش شنیده باشید: Fortran. بیا با هم سفری به گذشته داشته باشیم و ببینیم چطور Fortran به دنیا اومد و چرا هنوز هم مهمه.
بیا برگردیم به دهه 1950 میلادی، زمانی که کامپیوترها تازه داشتن پا به عرصه میذاشتن. اون موقع، این دستگاهها بزرگ و پرهزینه بودن و بیشتر برای محاسبات علمی و مهندسی استفاده میشدن. برای حل یک مسئله ساده ریاضی باید ساعتها وقت میذاشتن و برنامهنویسی برای این دستگاهها خیلی سخت و پیچیده بود.
فرض کن بخوای یه مسئله ریاضی ساده رو حل کنی، اما به جای استفاده از ماشین حساب یا اپلیکیشنهای امروزی، باید یه زبان پیچیده و غریب رو یاد بگیری. اینجا بود که IBM در سال 1957 با معرفی Fortran (که مخفف "Formula Translation" هست) اومد و این مشکل رو حل کرد.
Fortran اولین زبان برنامهنویسی سطح بالا بود که برای محاسبات عددی و علمی طراحی شد. این زبان برنامهنویسی رو از حالت پیچیده و دشوار به یه کار نسبتاً سادهتر تبدیل کرد. این زبان به برنامهنویسان این امکان رو داد که معادلات ریاضی خودشون رو به زبانی قابل فهم برای کامپیوتر ترجمه کنن.
Fortran یه زبان برنامهنویسی کامپایلشدهست که بیش از 60 سال از عمرش میگذره و توی محاسبات پیچیده ریاضی و علمی خیلی به کار میاد.
Fortran به عنوان یه زبان عمومی تعریف میشه که برای اجرای محاسبات پیچیده ریاضی و پردازش دادهها، به خصوص توی جامعه دانشگاهی، استفاده میشه. دلیلش هم اینه که عملکرد و سازگاری خیلی خوبی داره.
با اینکه این زبان بیش از 60 سال سن داره، هنوزم جزو 20 زبان برنامهنویسی برتر دنیاست. چرا؟ چون کار کردن باهاش نسبتاً سادهست و ظرفیت بالایی داره.
فقط چند زبان مثل C++ میتونن توی سرعت اجرای برنامهها باهاش رقابت کنن. خیلی از برنامهنویسا هم Fortran رو به C++ ترجیح میدن چون نیاز به مدیریت حافظه و بهینهسازی کمتری داره.
"Fortran زبانیه که هیچوقت نمیمیره. مثل جیمز باند برنامهنویسیه."
این مقاله میخواد یه مرور کلی از زبان برنامهنویسی Fortran بده، بگه چطور کار میکنه و مزایا و معایبش رو بررسی کنه.
از زمان شروع به کارش در دهه 1950، Fortran توی زمینههای محاسباتی مختلفی استفاده شده. این زمینهها شامل موارد زیر میشه:
Fortran هنوزم یه زبان برنامهنویسی مهمه و بیشتر ابرکامپیوترهای سریع دنیا ازش استفاده میکنن. این زبان توی چندین نسخه مختلف منتشر شده و هر نسخه جدیدش ویژگیهای جدیدی اضافه کرده ولی با نسخههای قبلی هم سازگار مونده.
Plankalkul، که توسط Konrad Zuse توسعه داده شده بود، اولین زبان برنامهنویسی سطح بالا در دنیا بود، ولی فقط روی کاغذ باقی موند. John Backus، که فارغالتحصیل دانشگاه کلمبیا با مدرک ریاضی بود، در اوایل دهه 1950 وقتی که به عنوان برنامهنویس توی مرکز کامپیوتر IBM کار میکرد، اولین زبان برنامهنویسی سطح بالا به نام Fortran رو ایجاد کرد.
این زبان برای استفاده در ماشین محاسبات الکترومکانیکی به نام Selective Sequence Electronic Calculator (SSEC) طراحی شده بود. این ماشین با حدود 23,000 رله الکترومکانیکی و 13,000 لوله خلاء، برای انجام محاسبات پیچیده مثل اونهایی که توسط ناسا نیاز بود، طراحی شده بود. John Backus سه سال زمان گذاشت تا SSEC رو برنامهنویسی کنه و در این مدت یه برنامه به نام speedcoding رو ایجاد کرد که اولین برنامهای بود که مکانیزم ذخیرهسازی و دستکاری برای اعداد کوچک و بزرگ رو داشت.
IBM در نهایت پیشنهاد Backus رو قبول کرد، یه تیم تشکیل داد و کامپیوتر IBM 704 رو منتشر کرد که منجر به نسخههای تجاری Fortran شد. Fortran در نهایت به کامپیوتر این امکان رو داد که یه مسئله ریاضی پیچیده رو به سرعت به یه برنامه تبدیل کنه و اجرا کنه.
Fortran از روزهای اولیهاش به عنوان زبان برنامهنویسی برای IBM 704 راه طولانیای رو طی کرده و چندین نسخه مهم داره:
در سال 1957، John Backus اولین کامپایلر Fortran رو بعد از تقریباً سه سال کار معرفی کرد. نوار مغناطیسی کامپایلر Fortran حاوی حدود 250,000 خط کد ماشین بود. با هر نصب IBM 704، یک نسخه از نرمافزار و یک راهنمای 51 صفحهای هم ارائه میشد.
IBM در سال 1958 Fortran II رو معرفی کرد. مهمترین بهبود این نسخه اضافه شدن توابع و زیرروالهای نوشته شده توسط کاربر بود که برنامهنویسی رویهای رو بهتر کرد. تعداد دستورات در Fortran II افزایش یافت و شامل زیرروالها، توابع، بازگشت، فراخوانی و پایان شد.
در همون سالی که Fortran II منتشر شد، IBM نسخه Fortran III رو هم با کدهای اسمبلی یکپارچه و قابلیتهای بیشتر منتشر کرد. اما این نسخه هیچ وقت به عنوان یک محصول به مصرفکنندگان ارائه نشد. تا سال 1960، چندین نسخه از Fortran برای کامپیوترهای IBM موجود بود. با افزایش محبوبیت Fortran، تولیدکنندگان رقیب هم شروع به ارائه کامپایلرهای Fortran برای ماشینهای خودشون کردن.
در سال 1961، در پاسخ به درخواستهای عمومی، IBM شروع به توسعه Fortran IV کرد. Fortran IV ویژگیهای وابسته به ماشین Fortran II رو حذف کرد و ویژگیهای جدیدی مثل نوع داده منطقی اضافه کرد. در سال 1965، Fortran IV ملزم به رعایت دستورالعملهای انجمن استانداردهای آمریکایی شد.
در سال 1966، انجمن استانداردهای آمریکایی (که امروزه به نام ANSI شناخته میشه) یک کمیته برای ایجاد استاندارد آمریکایی Fortran تشکیل داد. این فرآیند منجر به تولد Fortran 66 شد که اولین نسخه استاندارد بازاری این زبان بود. پس از انتشار رسمی Fortran 66، فروشندگان کامپایلرها، افزونههای اضافی Fortran رو هم اضافه کردن.
آوریل 1978 زمان تصویب رسمی استاندارد جدید Fortran به نام Fortran 77 بود. برای حل مشکلات Fortran 66، نسخه جدیدتر زبان برنامهنویسی دارای قابلیتهای بیشتری بود. به دلیل تکامل سریع خدمات برنامهنویسی و محاسباتی، ایجاد یک استاندارد تجدید نظر شده برای جایگزینی Fortran 77 به تأخیر افتاد.
بازنگری در سال 1992 نام رسمی این زبان رو از FORTRAN به Fortran تغییر داد. علاوه بر این، Fortran 90 شامل ویژگیهای جدیدی بود که تحولات عمده برنامهنویسی بعد از استاندارد 1978 رو برجسته میکرد. توضیحات توکار، اجزا، ورودیهای کد آزاد، شناسهها و توابع بازگشتی از جمله ویژگیهای جدید بودن.
سال 2003 آغاز Fortran مدرن با پشتیبانی از برنامهنویسی شیءگرا بود. در Fortran 2003، قابلیتهای جدیدی مثل بهبود ورودی/خروجی، دستکاری دادهها و اشارهگرهای رویهای اضافه شد. در سال 2010، Fortran 2008 منتشر شد که یک بهروزرسانی جزئی بود. نسخه بعدی زبان برنامهنویسی، Fortran 2018، در نوامبر 2018 در دسترس قرار گرفت که یک بهروزرسانی عمده بود و ویژگیهای جدیدی به نسخه قبلی اضافه کرد. این زبان برنامهنویسی همچنان توسط ریاضیدانان و دانشمندان در سراسر جهان استفاده میشه.
بزار برات بگم چرا Fortran یه نقطه عطف مهم توی دنیای نرمافزار بود. این زبان برنامهنویسی، همونطور که ریزپردازندهها توی سختافزار تغییرات بزرگی ایجاد کردن، تونست سطح تعامل بین انسان و کامپیوتر رو به یک سطح بالاتر ببره و یه زبان قابل فهمتر برای ما انسانها ایجاد کنه.
John Backus و تیمش یه زبان برنامهنویسی ساختن که ترکیبی از اختصارات انگلیسی و جبر بود. Fortran شبیه فرمولهای جبری بود که مهندسان و دانشمندان معمولاً استفاده میکردن. وقتی که این زبان رو یاد میگرفتن، دیگه نیازی نبود به برنامهنویس وابسته باشن تا مسائل علمی و مهندسیشون رو به زبان کامپیوتر ترجمه کنه. این باعث شد که کاربران تجاری هم بتونن به راحتی از تکنولوژی استفاده کنن، چیزی که امروز خیلی معمول شده.
Fortran هنوزم توی زمینههایی که نیاز به محاسبات پیشرفته دارن، خیلی مهمه. چند تا از برنامههای معروفی که با Fortran نوشته شدن عبارتند از:
Fortran همچنین بین برنامههای مدلسازی آب و هوا خیلی محبوبه چون فرمولهای ریاضی رو به راحتی میتونن به کد تبدیل کنن. علاوه بر این، عملکرد سریعی داره و بیشتر جامعه مدلسازی آب و هوا با این زبان آشنا هستن.
برنامههای مدرن Fortran شامل چندین واحد برنامهنویسی میشن، از جمله برنامه اصلی، زیر برنامههای کمکی و ماژولها. هر برنامه شامل یه برنامه اصلی و شاید عناصر برنامه دیگهای باشه.
برخلاف زبانهایی مثل Basic، یه برنامه Fortran توی یه پنجره مخصوص Fortran نوشته نمیشه. در عوض، با یه ویرایشگر متن نوشته و ذخیره میشه و یه کامپایلر Fortran اون رو به یه فایل اجرایی تبدیل میکنه.
برای شروع نوشتن یه برنامه Fortran، باید یه ویرایشگر ساده مثل Notepad رو باز کنی. مراحل کار به این صورته:
program squarearea
real s, area
c این برنامه مساحت یک مربع رو محاسبه میکنه
print *, 'طول ضلع مربع چقدره؟'
read *, s
area = s * s
print *, 'مساحت مربع برابر است با: ', area
print *, 'خداحافظ!'
end
اولین خط اسم برنامه رو مشخص میکنه، در حالی که خط دوم میگه که 's' و 'area' مقادیر واقعی با دقت اعشاری یک هستن. خط سوم که با 'c' شروع میشه، توضیحاتی برای برنامهنویسه و توسط Fortran نادیده گرفته میشه. خطوط بعدی طول مربع رو از کاربر میپرسن، مساحت رو محاسبه میکنن و نتیجه رو نمایش میدن.
حالا که میدونی یه برنامه Fortran چطور کار میکنه، بزار به بعضی از اصطلاحات و دستورات کلیدی این زبان نگاه کنیم:
خب، بیایم درباره مزایا و معایب Fortran صحبت کنیم. توی آوریل 2021، شاخص TIOBE که محبوبیت زبانهای برنامهنویسی مختلف رو ارزیابی میکنه، Fortran رو به عنوان بیستمین زبان محبوب در دنیا معرفی کرد. این واقعاً جای تعجب داره، چون Fortran بیش از 60 سال عمر داره! ولی چرا؟ به خاطر مزایایی که داره!
با این حال، با وجود این مزایا، Fortran چند تا عیب هم داره.
Fortran یه زبان برنامهنویسی نسبتاً قدیمیه که هنوز هم به طور گسترده استفاده میشه. این زبان با افزودن ویژگیهای جدید و سازگار با نسخههای قبلی سعی میکنه با زبانهای برنامهنویسی مدرن همگام بمونه و همچنان فعالانه توسعه پیدا میکنه.
حتی با اینکه زبانهای برنامهنویسی مدرن به سمت رویکردهای عمومیتر میرن، این زبان تخصصی قدرتمند همچنان توی چندین بخش مهم محاسباتی جایگاه خودش رو داره. حتی در عصر ابرکامپیوترها، واضحه که Fortran همچنان موندنیه.
بیا چندتا از ویژگیهای این زبان برنامهنویسی رو بررسی کنیم.
Fortran از ابتدا برای برنامههای محاسباتی سنگین در علوم و مهندسی طراحی شده. کامپایلرها و کتابخانههای قوی و تستشده بهت این امکان رو میدن که کدی بنویسی که خیلی سریع و نزدیک به سختافزار اجرا بشه.
"Fortran: پدربزرگ زبانهای برنامهنویسی مدرن که هنوز هم سریعتر از نوههاش داره ماراتن میدوه!"
Fortran به صورت استاتیک و قوی تایپبندی شده، یعنی کامپایلر میتونه خیلی از خطاهای برنامهنویسی رو در مراحل اولیه بگیره. این ویژگی همچنین به کامپایلر اجازه میده کدهای باینری کارآمد تولید کنه.
Fortran یه زبان نسبتاً کوچیکه که یادگیری و استفاده ازش به طرز عجیبی آسونه. بیان بیشتر عملیات ریاضی و حسابی روی آرایههای بزرگ مثل نوشتن معادلات روی وایتبرد سادهست.
Fortran بهت این امکان رو میده که کدی بنویسی که بهترین روش برای حل مشکلت باشه: امری، رویهای، آرایهمحور، شیءگرا یا تابعی.
Fortran یه زبان برنامهنویسی موازی ذاتی با سینتکس آرایهای شهودی برای ارتباط دادهها بین CPUهاست. میتونی تقریباً همون کد رو روی یه CPU، سیستم چند هستهای با حافظه مشترک، یا سیستم HPC با حافظه توزیعشده یا ابری اجرا کنی. Coarrays، تیمها، رویدادها و زیرروالهای جمعی بهت اجازه میدن الگوهای مختلف برنامهنویسی موازی رو که بهترین روش برای حل مشکلت هستن، بیان کنی.
شاید قبلاً با زبانهای برنامهنویسی دیگه مثل Python، R، یا MATLAB کار کرده باشی که سینتکس سادهای دارن و برای توسعه سریعتر طراحی شدن، حتی اگه عملکردشون کمی پایینتر باشه. Fortran ممکنه توی خیلی از موارد با این زبانها متفاوت باشه، ولی اصول برنامهنویسی تقریباً همونه و بعضی از سینتکسهاش با زبانهای دیگه مشابهته.
بیایم با یه نگاه کلی به یه برنامه ساده Fortran شروع کنیم. نگران جزئیات سینتکس و کلمات کلیدی نباش، فقط ساختار کلی رو ببینیم.
این برنامه مساحت یک مثلث رو با استفاده از فرمول هرون محاسبه میکنه:
! ------------------------------------------------------
! محاسبه مساحت یک مثلث با استفاده از فرمول هرون
! ------------------------------------------------------
PROGRAM HeronFormula
IMPLICIT NONE
REAL :: a, b, c ! سه ضلع مثلث
REAL :: s ! نیممحیط
REAL :: Area ! مساحت مثلث
LOGICAL :: Cond_1, Cond_2 ! دو شرط منطقی
READ(*,*) a, b, c
WRITE(*,*) "a = ", a
WRITE(*,*) "b = ", b
WRITE(*,*) "c = ", c
WRITE(*,*)
Cond_1 = (a > 0.) .AND. (b > 0.) .AND. (c > 0.0)
Cond_2 = (a + b > c) .AND. (a + c > b) .AND. (b + c > a)
IF (Cond_1 .AND. Cond_2) THEN
s = (a + b + c) / 2.0
Area = SQRT(s * (s - a) * (s - b) * (s - c))
WRITE(*,*) "مساحت مثلث = ", Area
ELSE
WRITE(*,*) "خطا: این مثلث نیست!"
END IF
END PROGRAM HeronFormula
سه خط اول، خطوط توضیحات هستن. اینا رو توی خیلی از برنامههای Fortran میبینی و به برنامهنویس و کاربر کمک میکنه تا کد رو بهتر بفهمن. خطوط توضیحات اجرا نمیشن و هر چیزی میتونی توشون بنویسی. توی Fortran، علامت تعجب (!) برای خطوط توضیحات استفاده میشه.
شروع برنامه! Fortran یه زبان توضیحی و پرحرفه، یعنی باید بهش دقیق بگی که میخوای چیکار کنی. اینجا به Fortran میگیم که میخوایم برنامهمون رو شروع کنیم و میتونیم بهش یه اسم هم بدیم. خط آخر رو ببین: با دستور END PROGRAM برنامه رو تموم میکنیم. Fortran دوست داره بدونه کجا برنامهها و بخشهای کد تموم میشن.
توی این قسمت، متغیرهایی رو که قراره توی برنامه استفاده بشن تعریف میکنیم. توی Fortran، معمولاً این کار رو در ابتدای برنامه انجام میدیم. Fortran دوست داره از اول بدونه که با چه متغیرهایی سر و کار داره. توی این قسمت توضیحات هم اضافه کردیم تا بفهمیم هر متغیر چیکار میکنه.
بقیه برنامه جاییه که مساحت مثلث محاسبه میشه. متغیرهای از پیش تعریف شده، مقادیرشون رو با استفاده از عملگرها و توابع ریاضی دریافت میکنن و نتیجه رو با استفاده از تابع WRITE نمایش میدیم. برنامه رو هم با دستور END PROGRAM تموم میکنیم.
این برنامه رو به صورت یه فایل متنی ساده ذخیره میکنی و بهش پسوند .f90 میدی (به صورت عرفی). برای اجرای برنامه، اول باید اونو کامپایل کنی که توی بخش بعدی آموزش میدم.
برنامههای Fortran با کلمه کلیدی PROGRAM شروع میشن و بهشون میتونیم یه اسم هم بدیم. پایان برنامه هم باید با END PROGRAM مشخص بشه.
مثال:
PROGRAM MyProgram
! اینجا کارهایی انجام بده
END PROGRAM MyProgram
توی این برنامه، میتونیم توابع تعریف کنیم، متغیرها رو اعلام کنیم و محاسبات رو انجام بدیم، مثل بقیه زبانهای برنامهنویسی مثل R یا Python.
متغیرها دادهها یا مقادیری هستن که توی برنامه استفاده میشن. یه متغیر میتونه یه مقدار واحد رو نمایندگی کنه، مثل x = 3، یا یه ساختار بزرگتر برای نگهداری دادهها مثل یه جدول یا لیست مقادیر. متغیرها میتونن مقادیر غیرعددی مثل متن، حروف و کلمات رو هم نگهداری کنن.
توی Fortran، باید مشخص کنیم که متغیرها چه نوع دادهای رو نگهداری میکنن. Fortran یه سری کلمات کلیدی داره که برای تعریف انواع مختلف متغیرها استفاده میشن. مثلاً برای تعریف متغیرهای INTEGER برای محاسبات بعدی، اینجوری مینویسیم:
INTEGER :: n = 3
INTEGER :: m = 6
ما با این دستورات داریم میگیم که میخوایم دو عدد صحیح به نامهای n و m بسازیم و به ترتیب بهشون مقدارهای 3 و 6 رو اختصاص بدیم. (البته میتونیم مقداردهی رو تا مراحل بعدی برنامه به تأخیر بندازیم.)
Fortran برای مقادیر عددی انواع مختلفی داره. مثلاً اگه محاسبات ما نیاز به اعداد غیرصحیح داشته باشه، مثل 3.141، از نوعی به نام REAL استفاده میکنیم. یعنی یه عدد حقیقی.
REAL :: x = 1.0
REAL :: pi = 3.141
وقتی توی یه برنامه Fortran متغیرها رو تعریف کردیم، میتونیم اونها رو تغییر بدیم و باهاشون کار کنیم.
معمولاً تو این زبان، متغیرها توی اولین خطوط برنامه یا تابع تعریف میشن، مثل برنامه مثالی که بالا داشتیم. یه نوع دیگه هم توی برنامه مثالی داشتیم که نوع LOGICAL بود. این نوع برای متغیرهایی استفاده میشه که مقدار True یا False دارن.
LOGICAL :: Cond_1, Cond_2
دقت کن که میتونیم چندین متغیر رو توی یه خط و با کاما جدا کنیم. این کار فضای کمتری میگیره و معادل اینه که:
LOGICAL :: Cond_1
LOGICAL :: Cond_2
اسم متغیرها میتونن از حروف الفبای لاتین، زیرخط و اعداد تشکیل بشن. دقت کن که Fortran به حروف بزرگ و کوچک حساس نیست. یعنی Keywords و اسم متغیرها میتونن با حروف بزرگ یا کوچک نوشته بشن و Fortran بین حروف بزرگ و کوچک تفاوتی قائل نمیشه، پس مراقب باش که توی اسم متغیرها از هر دو استفاده نکنی. مثلاً Cond_1 همون cond_1 هست.
طبق عرف، معمولاً میبینی که کلمات کلیدی Fortran با حروف بزرگ نوشته میشن، البته این الزامی نیست. مثلاً REAL، INTEGER، IF، ELSE، PROGRAM و غیره. تو میتونی از حروف بزرگ یا کوچک استفاده کنی، ولی بهتره که برای خوانایی بیشتر یکدست باشی.
وقتی یه برنامه Fortran رو اجرا میکنی، راحتترین راه برای دیدن نتایج محاسبات یا خروجیها، چاپ اونا توی ترمینال، خط فرمان یا کنسوله. (همون جایی که فرمانها وارد میشن و متن روی صفحه نمایش داده میشه.)
همچنین نیاز داری که یه راهی برای وارد کردن داده به برنامه داشته باشی. این کار هم (برای این مثال ساده) با وارد کردن مقادیر مستقیماً توی ترمینال با کیبورد انجام میشه.
Fortran دو تابع مفید داره که بهت کمک میکنه دادهها و پیامها رو بخونی و نمایش بدی: تابع READ و تابع WRITE.
تابع READ به برنامه Fortran میگه که مقادیری رو که وارد میکنی از طریق کیبورد بگیره و توی متغیرهایی که توی برنامه تعریف کردی ذخیره کنه. توی برنامه مثالی مثلث ما از READ به این شکل استفاده کردیم:
READ(*,*) a, b, c
توی توابع Fortran، هر ورودی که لازم باشه، توی یه لیست داخل پرانتزها قرار میگیره. توی READ، اولین ستاره () یعنی ورودی از کیبورد توی دستور READ میاد و توی دستور WRITE به صفحه نمایش میره. دومین ستاره () یعنی کامپیوتر تصمیم میگیره که عناصر ورودی و خروجی چطوری بر اساس نوع دادهها توی لیست متغیرها باشن.
لیست متغیرهایی که بعد از READ میان، مقادیری که تایپ میکنی رو یکی یکی میگیرن. پس توی برنامه ما، سه متغیر a، b و c داریم که قبلاً تعریف شدن. وقتی برنامه اجرا میشه و به دستور READ میرسه، ازت میخواد که یه متغیر وارد کنی و Enter رو بزنی. این کار سه بار تکرار میشه و هر مقداری که تایپ کنی به ترتیب به a، b و c اختصاص داده میشه.
تابع WRITE خیلی شبیه READ هست، ولی فقط متغیرها رو به ترتیب مشخص شده چاپ میکنه. مثلاً:
WRITE(*,*) a, b, c
مقادیر اختصاص داده شده به a، b و c رو چاپ میکنه.
Fortran بهطور خاص برای محاسبات عددی طراحی شده و کلی توابع داخلی برای عملیات ریاضی داره. توی برنامه مثال مساحت مثلث، از توابع پایهای مثل +، -، *، / برای جمع، تفریق، ضرب و تقسیم استفاده کردیم. یه تابع دیگه هم داریم که توی این مثال استفاده شده، ()SQRT که جذر یک عدد رو پیدا میکنه.
عبارات منطقی مثل "اگه A و B درست باشن، اون وقت C رو انجام بده" یا "اگه مقدار X کمتر از 10 باشه، اون وقت X رو بر Y تقسیم کن" هستن. این عبارات راهی برای کنترل رفتار برنامه براساس مقایسهها یا مقادیر درست و غلط (LOGICAL types توی Fortran) هستن.
قسمت بعدی برنامه محاسبه مساحت مثلث، بعد از دستورات READ و WRITE، شروع به محاسبه دو شرط (مقادیر درست/غلط) برای بخش نهایی محاسبه میکنه:
Cond_1 = (a > 0.0) .AND. (b > 0.0) .AND. (c > 0.0)
Cond_2 = (a + b > c) .AND. (a + c > b) .AND. (b + c > a)
یادته که Cond_1 و Cond_2 از نوع LOGICAL هستن، یعنی میتونن درست (TRUE) یا غلط (FALSE) باشن.
مقدار درست یا غلطی که به این دو متغیر اختصاص داده میشه، بستگی به نتیجه ارزیابی عبارتی داره که سمت راست علامت مساوی قرار داره.
دو عملگر منطقی توی این مثال استفاده شدن: عملگر بزرگتر از (>) و عملگر .AND. . عملگر بزرگتر از همونطور که توی ریاضیات هست، عمل میکنه. مثلاً 1 > 2 نتیجه غلط (FALSE) میده، چون یک بزرگتر از دو نیست.
عملگر .AND. بررسی میکنه که آیا هر دو عبارت در دو طرفش درست هستن یا نه. مثلاً (1 < 2) . AND. (3 < 4) نتیجه درست (TRUE) میده، چون هر دو عبارت درست هستن. دقت کن که میتونیم از پرانتز هم استفاده کنیم تا ترتیب ارزیابی عبارات رو مشخص کنیم. اول کامپیوتر عبارت داخل پرانتز رو ارزیابی میکنه، بعد میره سراغ ارزیابی کل عبارت .AND. .
نتیجه این دو خط (درست/غلط) بستگی به ورودیهایی داره که به برنامه میدی، که به زودی بهشون میرسیم.
همه برنامهها باید براساس نوع داده ورودی یا نتایج محاسبات تصمیمگیری کنن. این رو میتونیم به عنوان جریان برنامه یا منطق برنامه بشناسیم. این مثل تصمیمهای منطقیای هست که توی زندگی روزمره میگیریم:
"اگه امروز بارون بیاد، اون وقت چترم رو میبرم، وگرنه کلاه آفتابیم رو برمیدارم."
بیا نگاهی به بخش نهایی برنامه محاسبه مساحت مثلث بندازیم:
IF (Cond_1 .AND. Cond_2) THEN
s = (a + b + c) / 2.0
Area = SQRT(s * (s - a) * (s - b) * (s - c))
WRITE(*,*) "مساحت مثلث = ", Area
ELSE
WRITE(*,*) "خطا: این یک مثلث نیست!"
END IF
Fortran از این دو کلمه کلیدی برای انجام تصمیمهای منطقی داخل برنامه استفاده میکنه. برای انجام کاری براساس یه شرط، از ساختار IF [condition] THEN استفاده میشه. بخش شرط که بعد از دستور IF میاد، میتونه یه متغیر LOGICAL باشه یا خودش یه عبارت منطقی. کلمه THEN شروع کدی رو علامتگذاری میکنه که اگه شرط درست باشه، اجرا میشه.
دستور ELSE اختیاریه، ولی مفیده اگه بخوای کاری انجام بدی اگه شرط غلط بود. اگه این بخش اختیاری رو نداشته باشی، برنامه به سادگی به بخش بعدی کد میره بدون اینکه کار دیگهای انجام بده. اینجا از دستور ELSE استفاده کردیم تا اگه ورودیها نشون بده که با یه مثلث سروکار نداریم، پیام خطا چاپ بشه.
یادت باشه که باید پایان بلوک IF...THEN...ELSE رو با دستور END IF علامتگذاری کنی.
این پایان برنامه محاسبه مساحت مثلث ما بود. در نهایت هم دستور END PROGRAM داریم که پایان برنامه رو نشون میده و به Fortran میگه که کارمون تموم شده.
ولی چطور برنامه رو اجرا کنیم؟ این رو توی بخش بعدی توضیح میدیم.
برنامههای Fortran قبل از اجرا یه مرحله اضافه دارن. وقتی برنامه رو نوشتیم و به صورت یه فایل متنی ذخیره کردیم، باید اونو به فرمتی تبدیل کنیم که سختافزار کامپیوتر بفهمه و پردازش کنه. به این مرحله میگن کامپایل، یعنی برنامه رو به فرمتی مناسب برای کامپیوتری که میخوایم روش اجرا کنیم، تبدیل میکنیم.
اگه قبلاً با زبانهایی مثل R، Python، یا MATLAB کار کردی، ممکنه با این مرحله کامپایل برخورد نکرده باشی، چون روش معمول اجرای برنامهها توی این زبانها این مرحله رو از دید کاربر مخفی میکنه. این زبانها به عنوان زبانهای تفسیری شناخته میشن. برنامه از طریق یه برنامه خاص به نام مفسر اجرا میشه و این کار رو بهصورت دینامیکی یا در زمان اجرا انجام میده.
Fortran، که برای محاسبات عددی سریع بهینه شده، نیاز داره کاربر مرحله کامپایل رو خودش انجام بده، که این امکان رو میده تا گزینههای بهینهسازی برنامه و بسیاری از تنظیمات نهایی برنامه رو دقیق تنظیم کنه.
برای کامپایل برنامه، مطمئن شو که برنامه نمونه محاسبه مساحت مثلث رو از بخش قبلی آموزش ذخیره کردی. اونو به اسم triangle.f90 ذخیره کن. برای این مثال خاص باید روی سیستم عامل لینوکس باشی. (امکان کامپایل Fortran روی ویندوز و MacOS هم وجود داره، ولی نام دستورات ممکنه کمی متفاوت باشه).
یک جلسه خط فرمان/ترمینال رو باز کن. توی خط فرمان، چک کن که برنامه کامپایلر gfortran در دسترس باشه با تایپ gfortran --version. اگه نصب باشه، باید نسخه رو برگردونه. (اگه نه، پیام خطا میگیری)
[dvalters@baltic01 Programming-tutorials]$ gfortran --version
GNU Fortran (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28)
Copyright (C) 2015 Free Software Foundation, Inc.
GNU Fortran comes with NO WARRANTY, to the extent permitted by law.
You may redistribute copies of GNU Fortran under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING
توی همون دایرکتوری که فایل .f90 رو ذخیره کردی، این دستور رو اجرا کن:
gfortran triangle.f90 -o triangle
این به gfortran (یک کامپایلر Fortran، معمولاً روی سیستمعاملهای لینوکس) میگه که فایل triangle.f90 رو بگیره و یه برنامه به نام triangle برای ما تولید کنه. علامت -o به ما امکان میده که یه نام خروجی برای برنامهمون مشخص کنیم.
وقتی این دستور رو اجرا کردی، باید یک فایل اجرایی جدید به نام triangle در همون دایرکتوری که فایل اصلی triangle.f90 رو ذخیره کردی، ببینی.
برای اجرای این فایل (توی لینوکس)، تایپ کن ./triangle. برنامه باید شروع به کار کنه. حالا میتونی سه مقدار خودت رو وارد کنی و هر بار کلید ENTER رو بزنی تا مقدار وارد بشه. بعد از زدن کلید ENTER بعد از مقدار سوم، برنامه مساحت مثلث رو با استفاده از فرمول هرون محاسبه میکنه.
چند بار برنامه رو با طولهای مختلف اضلاع مثلث اجرا کن. وقتی مقادیر برای مثلث درست نباشن، چه اتفاقی میافته؟ آیا پیام خطای مورد انتظار رو میگیری؟
Fortran بالغ و در حال توسعه فعاله. آخرین نسخه زبان Fortran 2023 هست. بیش از دوازده کامپایلر منبع باز و اختصاصی Fortran وجود داره. علاوه بر این، پروژههای منبع باز مثل کتابخانه استاندارد و مدیر بسته Fortran هم در حال توسعه فعال هستن.
Fortran بیشتر در حوزههایی استفاده میشه که زودتر محاسبات رو پذیرفتن، علوم و مهندسی. این شامل پیشبینی عددی هوا و اقیانوس، دینامیک سیالات محاسباتی، ریاضیات کاربردی، آمار و امور مالی میشه. Fortran زبان غالب در محاسبات با کارایی بالاست و برای ارزیابی سریعترین ابرکامپیوترهای جهان استفاده میشه.
اگه داری برنامه یا کتابخانهای مینویسی که نیاز به انجام محاسبات سریع عددی روی آرایههای بزرگ داره، Fortran بهترین ابزار برای این کاره.
همونطور که گفتیم، Fortran یکی از زبانهای برنامهنویسی قدیمی و قدرتمنده که هنوز هم در دنیای محاسبات علمی و مهندسی جایگاه ویژهای داره. با وجود گذشت بیش از 60 سال از معرفیش، Fortran با بهروزرسانیهای مداوم و امکانات پیشرفته، همچنان ابزار محبوبی برای محاسبات عددی و علمی باقی مونده. یادگیری Fortran برای هر برنامهنویس علاقهمند به محاسبات با عملکرد بالا، میتونه یک سرمایهگذاری ارزشمند باشه. با تواناییهای بالا و جامعه پشتیبانی قوی، Fortran هنوز هم انتخاب برتر برای پروژههای محاسباتی پیچیدهست.