FORTRAN: Разлика между версии

Изтрито е съдържание Добавено е съдържание
Zmeiko (беседа | приноси)
При промяната е въведена информация за типове данни, оператори, променливи и константи във Фортран
Ред 64:
* [[GFortran]] – разни операционни системи
* [[Sun Studio]] – [[Solaris (операционна система)|Solaris]], [[OpenSolaris]], [[Linux]]
 
= Характеристики и синтаксис на езика =
 
=== Типове данни ===
Във FORTRAN се използват пет основни типа данни :
 
1.            Целочислен тип -  може да Съдържа само цели числа
 
Пример  – 1, 2, 3, ... , n<syntaxhighlight lang="fortran">
program testInt
implicit None
integer::largeval
print *, huge(largeval)
end program testInt
</syntaxhighlight>Резултатът от показаното парче код ще е 2147483647
 
Забележка:  Методът '''huge()''' ще даде най-голямото число което може да държи определен тип.
 
Също така може да се конкретизират байтовете на числото използвайки kind спецификатора.  <syntaxhighlight lang="fortran">
program testInt
implicit none
 
!two byte integer
integer(kind=2) :: shortval
!four byte integer
integer(kind=4) :: longval
!eight byte integer
integer(kind=8) :: verylongval
!sixteen byte integer
integer(kind=16) :: veryverylongval
!default integer
integer :: defval
print *, huge(shortval)
print *, huge(longval)
print *, huge(verylongval)
print *, huge(veryverylongval)
print *, huge(defval)
end program testInt
 
</syntaxhighlight>Резултатът от показаното парче код ще е
 
32767
 
2147483647
 
9223372036854775807
 
170141183460469231731687303715884105727
 
2147483647
 
2.            Реален тип – това е тип с плаваща запетая  0.111, 3.14, 5.68 . Традиционнo има два различни реални типа , обикновенният реален тип и двойно прецизния тип. Фортран 90/95 доставя повече контрол над прецизността на реалните и целочислените типове през kind спецификатора.  <syntaxhighlight lang="fortran">
program division
implicit none
real :: p, q, realRes
integer :: i, j, intRes
p = 2.0
q = 3.0
i = 2
j = 3
realRes = p/q
intRes = i/j
print *, realRes
print *, intRes
end program division
</syntaxhighlight>Резултатът от показаното парче код ще е
 
0.666666687   
 
0
 
3.            Комплексен тип – този тип се използва за запазването на комплексни числа.
 
Комплексното число има две части, реална част и имагинерна част. Две последователни числови единици за дъхранение(памет), запазват тези две части. Комплексното число (3.0, -5.0) е равно на 3.0 – 5.0i. Основната функция за създаването на комплено число е cmplx(). Това доставя резултат от реална и имагинерна част, всяка с неината си прецизност независимо от типа на входните данни.<syntaxhighlight lang="fortran">
program createComplex
implicit none
integer :: i = 10
real :: x = 5.17
print *, cmplx(i, x)
end program createComplex
 
</syntaxhighlight>Резултатът от показаното парче код ще е
 
(10.0000000, 5.17000008)
 
Следващите редове демонстрират аритметика с комплексни числа
 
<syntaxhighlight lang="fortran">
program ComplexArithmatic
implicit none
 
complex, parameter :: i = (0, 1) ! sqrt(-1)
complex :: x, y, z
x = (7, 8);
y = (5, -7)
write(*,*) i * x * y
z = x + y
print *, "z = x + y = ", z
z = x - y
print *, "z = x - y = ", z
z = x * y
print *, "z = x * y = ", z
z = x / y
print *, "z = x / y = ", z
end program ComplexArithmatic
 
</syntaxhighlight>Резултатът от показаното парче код ще е
 
(9.00000000, 91.0000000)
 
z = x + y = (12.0000000, 1.00000000)
 
z = x - y = (2.00000000, 15.0000000)
 
z = x * y = (91.0000000, -9.00000000)
 
z = x / y = (-0.283783793, 1.20270276)
 
4.            Логически тип – има само два вида логически типове .true и .false
 
5.            Символен тип – Той е предназначен за запазването на символи и символни низове. Дължината на символният низ може да се зададе чрез len спецификатора. Ако не е зададена стойност той е 1. <syntaxhighlight lang="fortran">
character (len=40) :: name
name = “Zara Ali”
</syntaxhighlight>Функцията name(1:4) би дал изрязаният низ “Zara”.
 
=== Оператори ===
Операторът е символ който казва на компилатора каква математическа или логическа манипулация да направи.Фортран доставя следните типови оператори.
 
-         Аритметически оператори
 
-         Логически оператори
 
-         Логически оператори
 
Аритметични оператори
 
Следващата таблица показва всички аритметични оператори които поддържа Фортран.
 
A = 5 и B = 3.
{| class="wikitable"
|'''Оператор'''
|'''Описание'''
|'''Пример'''
|-
|<nowiki>+</nowiki>
|Събира два операнда
|A + B ще даде 8
|-
|<nowiki>-</nowiki>
|Изважда от първи операнд, втория
|A - B ще даде 2
|-
|*
|Умножава двата операнда
|A * B ще даде 15
|-
|/
|Разделя първия на втория операнд
|A / B ще даде 1
|-
|**
|Повдига първия операнд на степен втори операнд
|A ** B ще даде 125
|}
Релационни оператори
 
Следващата таблица показва релационните оператори поддържани от Фортран.
 
A = 10, B = 20 ;
{| class="wikitable"
|'''Оператор'''
|'''Еквивалент'''
|'''Описание'''
|'''Пример'''
|-
|==
|.eq.
|Проверява дали двата операнда са равни
|(A == B) не вярно       
|-
|/=
|.ne.
|Проверява дали двата операнда са различни.
|(A != B) вярно
|-
|>
|.gt.
|Проверява дали първия операнд е по-голям от втория
|(A > B) не вярно
|-
|<
|.lt.
|Проверява дали първия операнд е по-малък от втория
|(A < B) вярно
|-
|>=
|.ge.
|Проверява дали първия операнд е по-голям или равен на втория
|(A >= B) не вярно
|-
|<=
|.le.
|Проверява дали първия операнд в по-малък или равен на втория
|(A <= B) вярно
|}
Логически оператори
 
Логическите оператори във Фортран работят само само с логически стойност '''true''' или '''false'''
 
Следващата таблица показва всички логически оператори поддържани от Фортран.
 
A = true, B = false;
{| class="wikitable"
|'''Оператор'''
|'''Описание'''
|'''Пример'''
|-
|.and.
|Логически И, трябва и двата операнда да са true, за да върне true
|(A .and. B) false
|-
|.or.
|Трябва поне единият операнд да е true, за да върне true
|(A .or. B) true
|-
|.not.
|Логическо отрицание, служи за обръщане на логиката
|!(A .and. B) вярно
|-
|.eqv.
|Логически ЕКВИВАЛЕНТ, служи за проверка на еквивалентносттана двата оператор
|(A .eqv. B) не вярно
|-
|.neqv.
|Логически НЕ-ЕКВИВАЛЕНТЕН оператор, служи за проверка на не-еквивалентността на двата операнда
|(A .neqv. B) не вярно
|}
 
=== Променливи ===
Променливата е нищо друго освен име дедено на паметта за съхранение, за да може нашета програма да манипулира. Всяка променлива трябва да си има ТИП, който определя размера и разположението на паметта.
 
Името на променливатя може да съдържа букви, цифри и знака “_”. Имената във Фортран трябва да следват следните правила:
 
-         Не може да бъдат по големи от 31 знака
 
-         Името трябва да съдържа само букви, цифри (0 - 9) и „_“
 
-         Първият знак трябва да буде буква
 
-         Имената са чувствителни към малки и големи букви
 
Променливите се декларират в началото на програмата или подпрограмата<syntaxhighlight lang="fortran">
integer :: total
real :: average
complex :: cx
logical :: done
character(len=80) :: message ! a string of 80 characters
 
</syntaxhighlight>Инициализиране на стойности:
 
<syntaxhighlight lang="fortran">
total = 20000
average = 1666.67
done = .true.
message = “Hello World from team “Grapefruit” Sofrtware University - Sofia”
cx = (3.0, 5.0) ! cx = 3.0 + 5.0i
 
</syntaxhighlight>Може да се използва същата функция cx за инициализацията на комплексни стойности<syntaxhighlight lang="fortran">
cx = cmplx (1.0/2.0, -7.0) ! cx = 0.5 – 7.0i
cx = cmplx (x, y) ! cx = x + yi
</syntaxhighlight>Следващия пример демонстрира декларацията на променлива, инициализацията и изкарване и на конзолата.<syntaxhighlight lang="fortran">
program variableTesting
implicit none
 
! declaring variables
integer :: total
real :: average
complex :: cx
logical :: done
character(len=80) :: message ! a string of 80 characters
!assigning values
total = 20000
average = 1666.67
done = .true.
message = "Hello World from team “Grapefruit” Sofrtware University - Sofia "
cx = (3.0, 5.0) ! cx = 3.0 + 5.0i
 
Print *, total
Print *, average
Print *, cx
Print *, done
Print *, message
end program variableTesting
 
</syntaxhighlight>Когато по-горният код се изпълни, на конзолата ще се изпише:
 
20000
 
1666.67004   
 
(3.00000000, 5.00000000 )
 
T
 
Hello World from team “Grapefruit” Sofrtware University – Sofia
 
=== Константи ===
Константите са фиксирани стойности които програмата не може да променя по време на изпълнението и. Тези фиксирани сойности се наричат още '''литерали.'''
 
Константите могат да бъдaт от всеки от основните типове данни като, integer, floating, character, complex или string.
 
Има само две логически стойности за константи, '''.true.''' или '''.false.'''
 
Константите се използват също като регулярните проментливи, с това изключение че не могат да се променят.
 
Именовани константи и литерали
 
Има два типа константи
 
-         Литерал константи
 
-         Именовани константи
 
Литерал константите имат стойност, но нямат име
 
Пример
{| class="wikitable"
|'''Тип'''
|'''Пример'''
|-
|Integer константи
|0 1 -1 300 123456789
|-
|Real константи
|0.0 1.0 -1.0 123.456 7.1E+10 -52.715E-30
|-
|Complex константи
|(0.0, 0.0) (-123.456E+30, 987.654E-29)
|-
|Logical константи
|.true. .false.
|-
|Character константи
|"PQR" "a" "123'abc$%#@!"
 
" a quote "" "
 
'PQR' 'a' '123"abc$%#@!'
 
<nowiki>' an apostrophe '' '</nowiki>
|}
 
Именованите константи има име и стойност. Именованите константи трябва да се декларират в началото на програмата или процедура, също като декларация на тип променлива. Именованите константи се декларират с атрибута '''parameter'''.<syntaxhighlight lang="fortran">
real, parameter :: pi = 3.1415927
</syntaxhighlight>Следната програма изчислява изместване поради вертикално движение под действието на гравитацията.<syntaxhighlight lang="fortran">
program gravitationalDisp
! this program calculates vertical motion under gravity
implicit none
 
! gravitational acceleration
real, parameter :: g = 9.81
! variable declaration
real :: s ! displacement
real :: t ! time
real :: u ! initial speed
! assigning values
t = 5.0
u = 50
! displacement
s = u * t - g * (t**2) / 2
! output
print *, "Time = ", t
print *, 'Displacement = ',s
end program gravitationalDisp
 
</syntaxhighlight>След компилация на кода, резултатът ще бъде:
 
Time = 5.00000000   
 
Displacement = 127.374992  
 
== FORTRAN и суперкомпютрите ==