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

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

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

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

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

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

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

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

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

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

Hello World!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Оператор IF.

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

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

Циклы.

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

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

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

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

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

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

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

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

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

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

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

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

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

ВВОД ДАННЫХ С КЛАВИАТУРЫ.

Начльные значения данных могут быть введены с клавиатуры, для этого используется оператор READ, форма записи которого, в точности повторяет форму записи PRINT. После ключевого слова указывается форматная информация или "звездочка", а затем, через запятую, список ввода. Это называется ввод под управлением списка.

Программа RDINP, в числе прочих, демонстрирует возможность так называемого непродвигающего ввода/вывода на примере считывания переменной Z. Обычно перед вводом печатается сообщение о том, какие данные необходимо ввести. Курсор при этом переводится на следующую строку. Чтобы предотвратить перевод строки, в конце формата вывода указывается символ "$" (знак доллара). Такой вариант непродвигающего вывода не задокументирован в стандартах ФОРТРАН-77 и Фортран-90, однако поддерживается многими компиляторами. Вариант, документированный в стандарте Фортран-90 будет рассмотрен в разделе "Работа с внешними файлами".

      program RDINP
      parameter( N = 2)
      dimension MATRIX(N, N)

      print'(1x,''введите X,Y'')'
      read*, X, Y
      print'(1x,''введите Z = ''$)'
      read*, Z
      print*, X, Y, Z

      print'(1x,''введите матрицу MATRIX построчно:'')'
c     Для матрицы MATRIX i - номер строки, j - номер столбца
      read*, ((MATRIX(i,j), j=1, N), i=1,N)
      print'(1x,''Вывод MATRIX построчно:'')'
      print'(2(1x,i2))',((MATRIX(i,j), j = 1, N), i=1, N)
      print'(1x,''Строки и столбцы поменялись!:'')'
      print'(2(1x,i2))', MATRIX
      end

Спецификации формата при вводе те же, что и при выводе данных. Формат при вводе не столь актуален, поскольку буквальные константы, отвечающие за представление данных можно вводить в любом допустимом виде. Ввод под управлением списка все "проглотит".

Если в операторе ввода последовательно считывается несколько чисел подряд, то они должны разделяться пробелами или запятыми (безразлично). Можно каждое новое число вводить с новой строки - это тоже допускается, а если вводятся текстовые константы, то именно этот режим ввода предпочтительней. Ввод текстовых данных, пожалуй, единственный случай, когда формат актуален (напомним, что за формат текстовых данных отвечает дескриптор "A", с указанием после него символьной длины текста).

В предыдущем пункте отмечалось, что для печати массива достаточно указать в списке вывода его имя. Однако, следует учитывать, что элементы массивов хранятся в оперативной памяти последовательно, один за другим. Поэтому, если подобным образом печатать матрицу NxN в табличном виде, выводя по N элементов в строке, то столбцы окажутся строками, а строки столбцами.

Дело в том, что при хранении двумерной матрицы, сначала следуют элементы первого столбца, затем второго и т.д., то есть в Фортране матрицы хранятся "по столбцам". Поэтому при выводе необходимо контролировать изменение индексов строк и столбцов используя циклы: явные или неявные, как в программе RDINP.