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

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

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

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

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

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

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

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

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

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

Hello World!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Оператор IF.

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

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

Циклы.

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

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

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

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

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

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

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

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

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

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

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

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

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

КОНСТРУКЦИЯ IF.

Приведенная ниже программа DETECTIF, определяющая знак и четность числа, введенного с клавиатуры, демонстрирует варианты использования конструкции IF. Конструкция IF является модернизацией оператора IF, на тот случай, когда при соблюдении заданного условия требуется выполнить не один, а несколько операторов.

      program DETECTIF
      integer a
      read*, a

c     Минимальный вариант конструкции "if" с отсутствием альтернатив.
      if( a .gt. 0.) then
        print 100, a
  100   format(1x,i9,'> 0')
        print*,'Положительное'
      endif
      if( a .lt. 0.) then
        print 200, a
  200   format(1x,i9,'< 0')
        print*,'Отрицательное'
      endif
      if( a .eq. 0.) then
        print 300, a
  300   format(1x,i9,'= 0')
        print*,'Ноль'
      endif

c     Вариант конструкции "if" только с альтернативой "else".
      if(a. eq. a/2*2) then
        print*,'Четное'
      else
        print*,'Нечетное'
      endif

c     Вариант конструкции "if" только с альтернативами "else if".
      if( a .gt. 0.) then
        print*,'Положительное'
      elseif( a .lt. 0.) then
        print*,'Отрицательное'
      elseif( a .eq. 0.) then
        print*,'Ноль'
      endif

c     Вариант полной конструкции "if" со всеми вариантами альтернатив.
      if(a. eq. a/2*2 .and. a .gt. 0.) then
        print*,'Четное, положительное'
      elseif(a. eq. a/2*2 .and. a .lt. 0.) then
        print*,'Четное, отрицательное'
      elseif(a. ne. a/2*2 .and. a .gt. 0.) then
        print*,'Нечетное, положительное'
      elseif(a. ne. a/2*2 .and. a .lt. 0.) then
        print*,'Нечетное, отрицательное'
      else
        print*,'Ноль'
      endif

      end

Конструкция всегда начинается с IF-строки. Эта строка начинается с ключевого слова IF, за которым следует первое из, возможно, нескольких альтернативных условий, а затем ключевое слово THEN. Далее строка не может содержать ни чего, кроме комментария. В последующих строках записывается блок операторов, которые должны выполняться при соблюдении условия. Число оператроров в блоке не ограничивается.

Если в конструкции IF проверяется несколько альтернативных условий, то блоки операторов, соответствующие второму и последующим условиям, предваряются ELSEIF-строками, начинающимися с ключевого слова ELSEIF, а в остальном полностью аналогичными IF-строке.

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

Строка ENDIF всегда завершает конструкцию IF.

Допускается произвольная вложенность конструкций IF, при условии их взаимного непересечения.