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

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

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

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

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

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

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

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

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

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

Hello World!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Оператор IF.

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

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

Циклы.

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

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

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

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

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

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

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

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

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

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

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

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

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

СОРТИРОВКА МАССИВА.

Программа ARRSORT частично демонстрирует то, что называется повторным использованием кода. В двух предыдущих пунктах представлены функции ARRMAX и NUMAX, а также процедура EXCHAN. Тем самым, фактически, создана минимальная библиотека процедур и функций для работы с одномерными целыми массивами. Тексты процедур и функций можно объединить в один файл и создать из него объектный или библиотечный модуль. Если это пока вызывает трудности, можно попросту скопировать тексты необходимых процедур и функций в файл текущей програмы.

      program ARRSORT
      integer A(2), B(3), C(4) 
      data A /2, 1/ B/4, 5, 3/ C/ 7, 6, 9, 8/
      print*,A
      print*,B
      print*,C
      call SORT(A,2); call SORT(B,3); call SORT(C,4)
      print*,A
      print*,B
      print*,C
      end
      
      subroutine SORT(X, N)
      integer X(N)
      if(N .eq. 1) return
      do LIM = N, 2, -1
        call EXCHAN(X, LIM, LIM, NUMAX(X,LIM))
      enddo
      return
      end

Процедура SORT реализует метод так называемой линейной сортировки или, как его еще называют, метод сортировки с поиском максимального (минимального) элемента.

Идея метода следующая: найти максимальный элемент в массиве и поменять его местами с последним элементом. Затем найти максимальный элемент среди элементов с певого до предпоследнего и поменять его с предпоследним и т.д., пока не останется выявить наибольший элемент среди первых двух и поставить его на второе место.

Для реализации метода нужно, чтобы граница поиска максимального элемента смещалась влево на единицу с каждой перестановкой. Это легко реализуется конструкцией DO, в которой переменная цикла изменяется от N до "1", с шагом "-1", где N - число элементов массива и первоначальная граница поиска максимального элемента.

Процедура EXCHAN позволяет переставлять местами два элемента массива. При вызове процедуры имя массива указывается в качестве первого фактического параметра.

Число передаваемых в процедуру элементов массива (LIM) указывается в качестве второго фактического параметра.

Следующие два фактических параметра это номера элементов, которые нужно переставить местами. Очевидно, что элемент, стоящий на границе неупорядоченной области массива, то есть элемент с номером LIM нужно поменять местами с максимальным из элементов этой области, тем самым элемент с номером LIM перейдет в упорядоченную область. Значение номера максимального из LIM элементов массива X дает функция NUMAX, при передаче ей соответствующих фактических параметров.