]]> ]]>

Fortran 90

Диалект языка программирования FORTRAN

Fortran 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

]]>

Работа программистам