Информационные системы ускорителей

ВВЕДЕНИЕ В ФОРТРАН

Как пользоваться этим руководством.

Концепция данных Фортрана.

Типы и буквальные константы.

Имена (идентификаторы).

Переменные и константы.

Скаляры и массивы.

Именование данных.

Печать текста и чисел на экран.

Hello World!

Печать целых чисел.

Печать вещественных чисел.

Печать текста.

Когда format предпочтительней.

Арифметические и текстовые выражения.

Арифметические операторы и правила.

Вещественная арифметика.

Целая арифметика.

Смешанная арифметика.

Текстовые выражения.

Инициализация переменных и констант.

Оператор присваивания.

Инициализация скалярных констант.

Инициализация массивов констант.

Ввод данных с клавиатуры.

DATA-инициализация скалярных переменных.

DATA-инициализация массивов переменных.

Условные опреаторы.

Логические выражения.

Оператор IF.

Конструкция IF.

Конструкция CASE.

Циклы.

Цикл с фиксированным числом повторений.

Цикл с выходом по условию.

Пресловутый GOTO.

Неявные циклы.

Процедуры и функции.

Подпрограммы-процедуры.

Подпрограммы-функции.

Комплексный пример: сортировка массива.

Встроенные функции Фортрана.

Работа с внешними файлами.

Файловый ввод/вывод.

Открытие/закрытие файла.

Позиционирование файла.

ПОДПРОГРАММЫ-ПРОЦЕДУРЫ.

Подпрограммы (функции и процедуры) используются во избежание повторения одних и тех же последовательностей операторов примененяемых, быть может, к разным данным.

Так, задачей программы SOMINV является инвертировать три целых одномерных массива, т. е. перевернуть их "задом на перед" (меняются местами первый элемент с последним, второй с предпоследним и т.д.)

Собственно, инверсией занимается подпрограмма-процедура INVER, в свою очередь используя процедуру EXCHAN, осуществляющую попарную перестановку элементов.

      program SOMINV
      integer A(2), B(3), C(4) 
      data A /1, 2/ B/3, 4, 5/ C/6, 7, 8, 9/
      print*, A; print*, B; print*, C
      call INVER(A,2); call INVER(B,3); call INVER(C,4)
      print*, A; print*, B; print*, C
      end

      subroutine INVER(X, N)
      integer X(N)
      if (N. eq. 1) return
      do i = 1, N/2
        call EXCHAN(X, N, i, N-i+1)
      enddo
      return
      end

      subroutine EXCHAN(X, N, N1, N2)
c     В передаваемом прцедуре одномерном целом массиве 
c     происходит перестановка элементов с номерами N1 и  N2
      integer X(N), SAVE
      SAVE = X(N1)
      X(N1) = X(N2)
      X(N2) = SAVE
      return
      end

Подпрограмма-процедура начинается с ключевого слова SUBROUTINE, после которого указывается ее имя и, в круглых скобках, список формальных параметров. Завершается подпрограмма-процедура оператором END, как и основная программа.

В начале подпрограммы формальные параметры типизируются, а так же объявляются как массивы, если являются таковыми. Так же объявляются внутренние переменные и константы подпрограммы. В Фортране все переменные локальные, соответственно, если в двух разных программных единицах встречаются одинаковые имена, то они никак не связаны друг с другом. Так формальный массив X процедуры INVER никак не связан с одноименным формальным массивом процедуры EXCHAN.

Внутренние переменные подпрограммы могут инициализироваться оператором DATA, однако такая инициализация действительна только при первом вызове подпрограммы.

Вызов подпрограммы-процедуры осуществляется инструкцией CALL. Возврат в вызывающую программную единицу осуществляет оператор RETURN. Отсутствие оператора RETURN вызовет останов основной программы при первом же вызове подпрограммы. Принудительный останов работы программы можно осуществить инструкцией STOP.

При вызове подпрограммы происходит подстановка фактических параметров на место соответствующих им однотипных формальных параметров. При этом на место формальных скаляров передаются фактические скаляры, на место формальных массивов - фактических массивы той же размерности.