ВВЕДЕНИЕ В ФОРТРАН
Как пользоваться этим руководством.
Концепция данных Фортрана.
Типы и буквальные константы.
Имена (идентификаторы).
Переменные и константы.
Скаляры и массивы.
Именование данных.
Печать текста и чисел на экран.
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, при передаче ей соответствующих фактических параметров.