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

ЛАБОРАТОРНЫЙ ПРАКТИКУМ:
«ПРОГРАММИРОВАНИЕ НА ФОРТРАНЕ»

СТРУКТУРА ПРАКТИКУМА

ВВЕДЕНИЕ

ВАЖНАЯ ИНФОРМАЦИЯ

1. ПРАВИЛА ЗАПИСИ ПРОГРАММЫ

1. Набор символов Фортрана

2. Форматы записи программы

3. Фиксированный формат

4. Свободный формат

2. ТРАНСЛЯЦИЯ ПРОГРАММЫ

1. Программа в одном исходном файле

2. Трансляция исходного файла

3. Трансляция нескольких исходных файлов

4. Трансляция модулей

3. КОНЦЕПЦИЯ ДАННЫХ ЯЗЫКА ФОРТРАН

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

2. Понятие типа

3. Буквальные константы

4. Разновидности типов и диапазоны значений

5. Скалярные переменные и константы

6. Массивы

7. Производные типы данных

4. ВЫРАЖЕНИЯ И ПРЕОБРАЗОВАНИЕ ТИПОВ

1. Скалярное присваивание

2. Арифметика Фортрана

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

4. Работа с текстовыми строками

5. Операции с массивами

5. УПРАВЛЯЮЩИЕ ОПЕРАТОРЫ

1. Условный оператор и конструкция IF

2. Оператор варианта – конструкция CASE

3. Циклы – разновидности конструкции DO

4. Оператор GO TO

6. ВВОД/ВЫВОД ДАННЫХ

1. Простейшие операции ввода/вывода

2. Форматный ввод/вывод данных

3. Ввод/вывод массивов в неявных циклах

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

7. ПРОГРАММНЫЕ КОМПОНЕНТЫ И ЭЛЕМЕНТЫ ООП

1. Структура программных компонентов

2. Внешние подпрограммы

3. Внутренние подпрограммы

4. Модули как библиотеки производных типов

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

ЗАДАЧИ ДЛЯ ПРОГРАММИРОВАНИЯ

6.3. Неявные циклы и ввод/вывод массивов

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

Для вывода двумерного массива на экран в виде матрицы можно использовать конструкцию DO с фиксированным числом повторений и ухищрение в спецификации формата вывода – когда все элементы строки с номером выводятся без перевода строки (запрет переводить строку контролирует символ «$» в конце спецификации формата). Перевод строки осуществляется за счет пустого оператора PRINT за пределами внутреннего цикла (Пример 6.9).

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


unix-workdir

Пример 6.9. Печать таблицы с помощью конструкции DO.

program ARRDO1
integer, parameter:: N = 3
integer, dimension(N, N) :: DIGITS = RESHAPE( (/1, 4, 7, 2, 5, 8, 3, 6, 9/), (/3,3/) )
do I = 1, N
do J = 1, N
print '(1x,i1 $)',DIGITS(I,J) 
end do
print*,''
end do
end
		

Записанный неявный цикл может служить выражением, для последующего внешнего цикла – т. е. через запятую записывается переменная внешнего цикла со своими границами и шагом и все это заключается в круглые скобки (Пример 6.10).


unix-workdir

Пример 6.10. Печать таблицы с помощью неявного цикла.

program ARRDO2
integer, parameter:: N = 3
integer, dimension(N, N) :: DIGITS = RESHAPE( (/1, 4, 7, 2, 5, 8, 3, 6, 9/), (/3,3/) )
print'(3(1x,i1))', ((DIGITS (I, J), J = 1, N ), I = 1, N) ! Неявный цикл
end
		

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


unix-workdir

Пример 6.11. Печать таблицы с помощью неявного цикла.

program TBLPRN
integer, parameter:: N = 3
print'(3(1x,i1))', ((3*(I – 1)+J,  J = 1, N ), I = 1, N) ! Неявный цикл
end
		

Использование неявных циклов в конструкторах массивов показано в п. 3.6 – но в этом случае в неявный цикл не могут быть включены даже простейшие выражения – только переменные.