Fortran 90
Диалект языка программирования FORTRANFortran 90 — стандарт языка FORTRAN, утвержденный в 1992 году и следующий за FORTRAN 77. Он является его строгим расширением: любая программа, написанная на FORTRAN 77, может быть скомпилирована и запущена как программа на Fortran 90. Впрочем, ряд возможностей отмечен как устаревшие и может быть удален в последующих версиях стандарта.
Стандарт Fortran 90 вводит много новых средств для операций над массивами, новые методы спецификации точности, свободный формат исходного кода, рекурсию, динамические массивы, объектно-ориентированные элементы и т.д.
Fortran 90 определяет следующие элементы объектно-ориентированного программирования:
- абстрактные типы данных — типы, определенные пользователем;
-
закрытие данных — атрибуты
PRIVATE
иPUBLIC
; - инкапсуляция — средства модулей и закрытых данных;
- наследование и расширение;
- полиморфизм;
- повторное использование кода.
Нововведения в стандарте Fortran 90:
- свободный формат исходного кода программ;
- длина идентификаторов до 31 символа;
- вставочные комментарии;
- работа с массивами;
- рекурсивные процедуры;
- модульность;
- улучшенный механизм передачи параметров;
- пользовательские интерфейсы для процедур;
- перегрузка операторов;
- абстрактные типы данных;
- новый синтаксис объявления типа данных;
-
динамическое распределение памяти посредством атрибута
ALLOCATABLE
и операторовALLOCATE
иDEALLOCATE
; - структурированные конструкции циклов;
-
оператор
CASE
для множественного выбора; - новые и расширенные встроенные процедуры.
Ссылки:
Примеры:
Hello, World!:
Пример для версий Intel Visual Fortran 11.1, g95 0.93, gfortran 4.5.0Этот пример написан в свободном формате, поддерживаемом Fortran 90 и последующими стандартами, а также диалектом F.
! Fortran 90-style comment
program HelloWorld
print *, "Hello, World!"
end program HelloWorld
Квадратное уравнение:
Пример для версий g95 0.93, gfortran 4.5.0В примере используется встроенный тип данных complex
. //
— оператор конкатенации строк. Число перед скобками в описании формата означает количество раз, которые повторяется формат в скобках (в данном случае дважды — для первого и второго корней).
program Quadratic
integer :: a, b, c
real :: d, p1, p2
complex :: cp2
read (*, *), a
if (a == 0) then
write (*, *) "Not a quadratic equation"
stop
end if
read (*, *) b
read (*, *) c
d = b * b - 4 * a * c
p1 = - b / 2.0 / a
if (abs(d) < 1.0e-9) then
write (*, "(A, F8.3)") "x = ", p1
elseif (d > 0) then
p2 = sqrt(d) / 2.0 / a
write (*, "(2(A, F8.3))") "x1 = ", p1 + p2, char(13) // char(10) // "x2 = ", p1 - p2
else
cp2 = sqrt(cmplx(d)) / 2.0 / a
write (*, "(2(A, F8.3, F8.3), A)") "x1 = (", p1 + cp2, ")" // char(13) // char(10) // "x2 = (", p1 - cp2, ")"
end if
end
Факториал:
Пример для версий Intel Visual Fortran 11.1, g95 0.93, gfortran 4.5.0Используется итеративное определение факториала и свободный формат программы. Спецификации формата I и A используются для вывода чисел в десятичном формате и строк, соответственно. При вычислении факториалов 13-16 возникает арифметическое переполнение, не вызывающее ошибку, поэтому выводятся неправильные значения:
13! = 1932053504
14! = 1278945280
15! = 2004310016
16! = 2004189184
program Factorial
integer :: f,n
f = 1
n = 0
do
print "(I2, A, I10)", n, "! = ", f
n = n + 1
f = f * n
if (n == 17) then
exit
end if
end do
end program Factorial
Числа Фибоначчи:
Пример для версий Intel Visual Fortran 11.1, g95 0.93, gfortran 4.5.0Используется итеративное определение чисел Фибоначчи. Самое сложное в этом примере — вывод вычисленных значений в нужном формате, в одну строку и без лишних пробелов. Спецификация формата (I3, A, $)
означает, что вначале выводится целое число в десятичном формате, шириной ровно три символа, затем выводится строка, и наконец, $
подавляет перевод строки, используемый командой print
по умолчанию, так что все выводится в одну строку. Отметим, что в диалекте F спецификатор формата $
не является стандартным; программа работает, но при компиляции выводит предупреждение об этом.
program Fibonacci
integer :: f1,f2,f3,i
i = 1
f1 = 0
f2 = 1
do
f3 = f2 + f1
f1 = f2
f2 = f3
i = i + 1
if (f1 < 10) then
print "(I1, A, $)", f1, ", "
elseif (f1 < 100) then
print "(I2, A, $)", f1, ", "
else
print "(I3, A, $)", f1, ", "
end if
if (i == 17) then
exit
end if
end do
print *, "..."
end program Fibonacci
Комментарии
]]>blog comments powered by Disqus
]]>