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

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

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

ВВЕДЕНИЕ

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

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. ВВОД/ВЫВОД ДАННЫХ

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

Любая работающая программа, преобразует исходные данные в конечный результат. Исходные данные считываются из файлов, ассоциированных с внешними устройствами, а затем обрабатываются и записываются в другие внешние файлы. В Фортране каждое устройство и файл, с которым взаимодействует программа, в смысле ввода/вывода, имеет идентификационный номер. Например, номер стандартного устройство ввода – клавиатуры, обычно «5», а номер стандартного устройства вывода – экрана монитора, обычно «6». Для устройства ввода/вывода «по умолчанию» в качестве номера используется «*» – символ «звездочка». Обычно устройствами ввода/вывода «по умолчанию» являются экран и клавиатура, хотя, в зависимости от настроек вычислительной системы, такими устройствами может оказаться все что угодно – от пылесоса до крылатой ракеты, если они управляются данным компьютером.

Для ввода данных в Фортране предусмотрен оператор READ, а для вывода – оператор WRITE. Для вывода данных на стандартное устройство чаще используется оператор PRINT, поскольку формат его записи предполагает, что устройство вывода предопределено.

Входные и выходные данные всегда имеют определенный вид или формат представления. Для правильного восприятия информации, как человеком, так и компьютером, имеет значение, представлены ли целые переменные со значениями «один», «два» и «три» на экран в виде «123» или «1^^2^^3» (через пробелы). Поскольку при написании программы внимание разработчика чаще всего сосредоточено на правильной реализации вычислительного алгоритма, то для ввода/вывода данных предусмотрен формат по умолчанию, обозначаемый «*» (звездочкой).

Таким образом «умолчание «, в отношении ввода/вывода данных, подразумевает соглашение относительно стандартного устройства и формата ввода и вывода данных – именно этот вариант ввода/вывода используется в большинстве примеров программ данного учебного пособия. Соответствующие операторы Фортрана приведены в Таблице 6.1.

Таблица 6.1. Варианты операторов ввода/вывода под управлением списка

Оператор Действие
READ (*,*) список ввода Ввод с клавиатуры
READ *, список ввода Ввод с клавиатуры
WRITE (*,*) список вывода Вывод на экран
PRINT *, список вывода Вывод на экран

В операторах READ(*,*) и WRITE(*,*) в круглых скобках, через запятую записаны две «звездочки» – первая означает выбор устройства по умолчанию. Если не оговорено иное, то для ввода по умолчанию используется клавиатура, а для вывода – экран монитора. Вторая «звездочка» имеет тот же смысл, что и единственная «звездочка» в операторах READ* и WRITE* – она означает выбор правил «по умолчанию» в отношении формата ввода или вывода данных. Это сигнал компилятору, что программисту лень или некогда думать о формате представления результатов, и ему (компилятору Фортрана) придется взять это на себя. Формат ввода/вывода по умолчанию будет зависеть от типа вводимых или выводимых элементов, записанных в виде списка – проще говоря, перечисленных через запятую – поэтому такой вариант ввода/вывода еще называют вводом/ выводом под управлением списка.

Список ввода/вывода начинается сразу после закрытия круглых скобок для READ(*,*) и WRITE(*,*) или через запятую после единственной «звездочки» для READ* и WRITE*. В список могут присутствовать скаляры и массивы всех встроенных и производных типов, включая переменные, буквальные и именованные константы и выражения.

Наиболее распространен вывод данных под управлением списка, когда числовые данные сопровождаются текстом, в виде текстовых буквальных констант (Пример 6.1).


Пример 6.1. Простейший вывод данных под управлением списка.

program DATAOUT
integer, parameter :: N=3
real:: X=1., Y=2., Z=3.
print*, ″Вывод значений  N=″, N, “переменных:”
print*, ″X=″, X, ″Y=″, Y, ″Z=″, Z 
end
	


Вывод данных под управлением списка визуально понятен, но не слишком презентабелен:

Вывод значений N= 3 переменных:

X= 1.0000000 Y= 2.0000000 Z= 3.0000000

Для управления отступами, пробелами и количеством знаков необходимо использовать форматный вывод данных (п. 6.1).

В отношении рассмотренного примера необходимо сделать несколько замечаний. Начинающие программисты, приступающие к программированию на Фортране, иногда считают, что при выводе переменной X, перед ней нужно обязательно писать «X=«, что здесь есть какая-то связь. Смысловая связь действительно существует, но она в голове программиста, а не в списке оператора PRINT, которому безразлично, будет ли это текст «X=» или «X равно» или же это будет «Hello, World!» или не будет вообще никакого текста. Оператор PRINT просто выводит на экран все элементы, указанные ему в списке вывода, и текстовая буквальная константа «X=» такой же равноценный и независимый элемент этого списка, как имя вещественной переменной X.

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


Пример 6.2. Простейший ввод данных под управлением списка.

program DATAIN
integer:: X
integer, dimension (2, 2) :: A
read*, X, A
print*, ″X=″, X, ″A=″, A
end
	

В представленном примере один оператор READ осуществляет ввод с клавиатуры скалярной переменной X и массива A из четырех элементов. Соответственно, после запуска программы необходимо ввести с клавиатуры 5 целых чисел, через пробел или запятую. Также можно подтверждать ввод каждого числа клавишей «Enter» – при этом для завершения ввода необходимо пять чисел – только тогда оператор READ завершит свою работу.

Объекты производных типов данных вводятся и выводятся как последовательность значений элементов, составляющих структуру объекта. О вводе/выводе массивов речь идет в (п. 6.3).