Introduction to Fortran
90/95
همانرب کی داجیا لحارم
هلاسم لماک تخانش و فیرعت همانرب متیروگلا داجیا یسیون همانرب نابز کی هب متیروگلا لیدبت (
رف لاثم نرت
)
ای )codes( اهدک نتشون نیشام نابز هب اهدک همجرت compile(
) )*.exe( ییارجا لیاف کی داجیا نآ یلامتحا یاهاطخ عفر و همانرب یارجا
همانرب ندومن دنتسم
تراچولف (
امندنور )
ددع ود برض و عمج
c=a+b d=a*b
نرترف نابز هچخیرات
FORmula TRANslation invented 1954–8 by John Backus and his team at IBM
FORTRAN 66 (ISO Standard 1972)
FORTRAN 77 (1980)
Fortran 90 (1991)
Fortran 95 (1996)
Fortran 2003 (2004)
Fortran 2008 (ongoing)
Fortran Alphabets
فورح
A B C D E F…
a b c d e f…
تسین ساسح گرزب و کچوک فورح هب تبسن نرترف •
. دادعا
0 1 2 3 4 5 6 7 8 9
هسیون صاخ یاهرتکاراک ای یاه
, “ ( ) * + - / : = - ! & $ ; < >
? . % _ blank
اهریغتم
همانرب نابز رد یم هدافتسا ریغتم مان هب یرصانع زا یسیون
یارب عقاو رد هک دوش
دنک یم داجیا ار یلحم هریخذ .
دوش یم هتخاس ریز تروص هب اهریغتم
. .دشاب رتکاراک 31 یاراد رثکادح دناوت یم ریغتم کی •
دشاب فرح دیاب امازلا ریغتم کی رتکاراک نیلوا •
. یم اهرتکاراک هیقب •
طخریز ای و فرح ،ددع طقف دناوت (underline)
دشاب
. یمن ریغتم مان ناونع هب ،اههژاو دیلک ای و هدش ورزر یاههژاو زا •
دومن هدافتسا ناوت
. :تسرد یاه لاثم
Conut, Ali
X900g, I1025
R2_D2, R2D2_
طلغ یاه لاثم :
M.t.u, R2-D2
6feet
_system
A_name_made_up_of_more_than_31_letters
too long, 38 characters
صخشم عاونا هدننک
اه
صخشم هدننک
نابز کی رد هک دنتسه یتوافتم ءایشا اه
همانرب دور یم راک هب یسیون
. نرترف 90
ود یاراد یلک روطب
صخشم عون تسا ریز حرش هب هدننک
: یددع یاههدننکصخشم •
حیحص
یقیقح
طلتخم
صخشم •
هدننک یاه
یددعریغ
رتکاراک
یقطنم
صخشم عاونا هدننک
یددع یاه
integer
• correct: 0, -345, 789, +1234
• incorrect: 12.0, --4, 5+
real
• correct: 123.45, .123, 123., -0.12, +0.12
• incorrect: 65
complex
• x+iy
صخشم عاونا هدننک
یددعریغ یاه
character
• correct: 'Ali' or "Ali" (content: Ali and length: 3), 'Ali is #2' (content: Ali is #2 and length: 9)
special case: 'Ali''s apple' (content: Ali’s
apple and length: 11)
• incorrect: 'you and me, 'Tech's seminar', 'have a nice day"
• Correct: "Ali's apple"
هتشر کی ،دریگ یم رارق فروتساپآ لخاد رد هک یبلطم •
( string )
دوش یم هدیمان .
Logical
تسا طلغ ای تسرد رظن دروم یش هک دریگ یم رارق هدافتسا دروم یدراوم یارب •
.
• A<0 (True or False)
• .TRUE., .FALSE.
صخشم عون ملاعا هدننک
اه
رد همانرب ره یادتبا صخشم دیاب
هدننک زا نرترف هنرگو دومن یفرعم ار اه
شیپ ضرف
دنک یم هدافتسا دوخ یاه .
رمارگ syntax(
) تسا ریز حرش هب
: Integer :: j, icount
Real :: wide, angle
Logical :: try
Character(Len = 5) :: name
Character(Len = 10) :: city, nation*20, box, bug*1
Character :: answer, marital_status
answer and marital_status are each of length 1
تملاع یاه هژاو هدننکادج ::
integer real ،
logical ،
و .دشاب یم اهریغتم زا character
صخشم عون ملاعا هلابند هدننک
اه
نلاعا زا رگا integer
ای و دوشن هدافتسا Real
. ییاهریغتم
فورح اب هک i,j,k,l,m,n
رد ،دنتسه حیحص دنوش یم عورش
یم یقیقح تروصنیا ریغ دنشاب
. دینک هجوت ریز یاه لاثم هب :
integer
• ic, kzip, name, l_geo
real
• zip, code, geo
Names starting with I–N are INTEGER
Ones with A–H and O–Z are REAL
روتسد implicit none
روتسد همانرب کی یادتبا رد رگا implicit none
راک هب
دوش هتفرگ .
ک اهریغتم عاونا نلاعا هب طوبرم ضرف شیپ را
من نلاعا ءانثتسا نودب ار اهریغتم مامت دیاب و دنک یمن رد دو
دهد یم اطخ همانرب تروصنیا ریغ .
implicit none
integer :: ice, coke
real :: var, kind
نیزاغآ ای هیلوا رادقم
رد تسا نکمم و دنوش یم عورش نیعمان ریداقم اب اهریغتم دننک رایتخا یتوافتم ریداقم فلتخم یاه مجرتم .
اد نودب اما ،دنتسه تباث ریداقم هیبش یلیخ هیلوا ریداقم نتش
تیصوصخ parameter
Integer :: count = 0, I = 5, J = 100
Real :: max = 1005.25, min = -0.01
Character(Len=10) :: light = ’Amber’
Logical :: red = .TRUE., blue = &
.FALSE., green = .FALSE.
رتماراپ کی ملاعا
سد زا ناوت یم رتماراپ کی هب تباث ریداقم نداد تبسن یارب روت
Parameter دومن هدافتسا
.
integer, parameter :: limit = 100
real, parameter :: pi = 3.14159, twopi = 2*pi
integer, parameter :: month_in_a_year = 12
هجوت :
عون زا رگا integer, real
و ...
یتیصوصخ چیه نودب
نتشاذگ هاگنآ ،دوش هدافتسا (
::
) اب رگا اما ،تسا یرایتخا
یریگراک هب ،دوش ماوت رگید تایصوصخ (
)::
گو تسا یمازلا هنر
دهد یم اطخ همانرب .
Character(Len=*), parameter :: &
error = 'unknown'
اهنآ بیترت و اهرگلمع
عون اهرگلمع
تکرش یریذپ
یباسح ناوت
(**)
میسقت برض و (/)
(*)
قیرفت عمج و (-)
(+) پچ هب تسار
تسار هب پچ تسار هب پچ
یبسن یواسم ای رتکچوک
(<=) رتکچوک ،
(<)
یواسم ای رتگرزب (>=)
رتگرزب ، (>)
یواسمان یواسم ،(/=)
(==) تسار هب پچ
تسار هب پچ تسار هب پچ
یقطنم .NOT.
.AND.
.OR.
پچ هب تسار تسار هب پچ تسار هب پچ
اهنآ بیترت و اهرگلمع زا ییاهلاثم
لاثم 1
X + Y * Z is equivalent to X + (Y * Z):
X + Y / 7.0 is equivalent to X + (Y / 7.0)
A – B + C is equivalent to (A – B) + C
A + B ** C is equivalent to A + (B ** C)
– A ** 2 is equivalent to – (A ** 2)
A – ((( B + C))) is equivalent to A – (B + C)
You can force any order you like
(X + Y) * Z
Adds X to Y and then multiplies by Z
اهنآ بیترت و اهرگلمع زا ییاهلاثم
لاثم :2
A / B * C – is it A / (B * C) or (A / B) * C?
A ** B ** C – is it A ** (B ** C) or (A ** B) ** C?
Fortran specifies that:
A / B * C is equivalent to (A / B)
* C
A ** B ** C is equivalent to A **
(B ** C)
Yes, ** binds from right to left!
نداد تبسن و ترابع
ترابع :
یم اهریغتم و اهرگلمع زا یبیکرت دشاب
.
a+2
b*b-4*a*c
A>B
تملاع زا هدافتسا اب (
= ) یریغتم هب ار ترابع کی ناوتیم
داد تبسن .
Delta = b*b-4*a*c
Area = pi*r**2
count = count+1
تارابع عاونا
حیحص تارابع
Division always truncates towards zero
If K = 4 and L = 5, then K+L/2 is 6
(-7)/3 and 7/(-3) are both -2
یبیکرت تارابع
INTEGER :: K = 5
REAL :: X = 1.3
X = X+K/2
That will add 2.0 to X, not 2.5
K/2 is still an INTEGER expression
باستنا هب عجار صاخ یاه لاثم
N = 10./3 (value of N is 3)
X = 10/3 (value of X is 3.0)
Y = 10/3. (value of Y is 3.33333)
10./33.33333 N3
10/3 3 X 3.
10/3. 3.33333 Y 3.33333
یحص ددع رب حیحص ددع رگا هک دومن هجوت دیاب اجنیا رد ح
ی تروص رگا اما دوب دهاوخ حیحص نآ هجیتن ،دوش میسقت ا
ب یم یقیقح نآ هجیتن هاگنآ ،دشاب یقیقح رسک جرخم دشا
.
شیپ عباوت هتخاس
( 1 )
عبات فیصوت
ناموگرآ عون خساپ عون
َ ABS(x)
رادقم قلطم ردق
integer x
real integer
real
SQRT(x)
مود هشیر
real x
real
SIN(x)
سونیس نایدار بسح رب x
real real
COS(x)
سونیسک نایدار بسح رب x
real real
TAN(x)
تناژنات نایدار بسح رب x
real real
EXP(x)
ییامن عبات
real x
real
LOG(x)
نیرپن متیراگل
real x
real
شیپ عباوت هتخاس
( 2 )
عبات فیصوت
ناموگرآ عون خساپ عون
LOG10(x)
یانبم متیراگل x 10
real real
INT(x)
حیحص ءزج
real x
integer
NINT(x)
هب حیحص ددع نیرتکیدزن
real x
integer
REAL(x)
لیدبت هب x
integer real
real
MAX(x1,…,xn)
رثکادح ات x1
real xn
real
MIN(x1,…,xn)
لقادح ات x1
real xn
real
MOD(x,y)
هدنامیقاب رب x
real y
integer real
integer
همانرب جیاتن نتشون هوحن
تاروتسد زا نتشون یارب print
ای و write
دوش یم هدافتسا .
رمارگ
تسا ریز تروص هب اهنآ :
• print*, expr_1, expr_2, …
یصاخ بلاق یجورخ هک تسا نیا زا یکاح هراتس
(format) درادن
.
• write(*,*) expr_1, expr_2, …
دنک یم لمع لااب دننام مود هراتس
.
ددرگ یم پاچ شیامن هحفص یور جیاتن هک تسا نیازا یکاح لوا هراتس
. •
ددرگ یم داجیا یلاخ رطس کی طقف و دوش یمن پاچ یزیچ ریز تلااح رد .
• Print*
• write(*,*)
هداد ندناوخ هوحن اه
( 1 )
هداد رگا هداد دیاب ،دشاب هدشن هیارا همانرب لخاد اه
هحفص زا ار اه
دناوخ دیلک و شیامن
.
ندناوخ روتسد رمارگ تسا ریز حرش هب read
read(*,*) var_1, var_2, ….
روتسد دننام ،مود هراتس اجنیا رد write
نیدب لوا هراتس و تسا
دوش یم هدناوخ دیلک هحفص زا هداد هک تسا ینعم
. read هک راب ره
دور یم دیدج رطس هب همانرب ،دوش یم ارجا
. تسا ریز حرش هب read روتسد هداس رمارگ
read*, var_1, var_2, …
هداد هک تسا نآ زا یکاح هراتس هک بلاق نودب اه
(format) یصاخ
دوش یم هدناوخ .
هداد ندناوخ هوحن اه
( 2 )
روتسد هب ندیسر ضحم هب همانرب یم فقوتم read
ات دوش
هداد دناوخب دیلک هحفص قیرط زا ار رظن دروم یاه
. هداد نیا اه
د ار اهنآ ای و دومن پیات هلصاف اب رطس کی رد ناوت یم ار ر
درک پیات فتلخم روطس .
روتسد رد اهریغتم مامت ات راک هب همانرب ،دوشن هدناوخ read
دنز یم کمشچ بترم رگناشن و داد دهاوخن همادا دوخ .
لماک همانرب کی لاثم
Program solve_equation Real :: a,b,c
Real :: d
Real :: root1, root2
! read in coefficient a,b,c Print*,’a,b,c please:’
read*,a,b,c
! compute the square root of discriminant d d = sqrt(b*b-4*a*c)
! solve equation
root1 = (-b+d)/(2*a) ! first root root2 = (-b-d)/(2*a) ! second root
! display the results
write(*,*) ‘Roots are’, root1, ‘and’, root2 End Program solve_equation
Text Editor
Compiler
link
lib
Executable Code Source
Code
Object
Code User
Library Phase I:
Translation
Phase II:
Linkage
Phase III:
Execution