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

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

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

ВВЕДЕНИЕ

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

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. Встроенные функции Фортрана

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

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

Для обеспечения возможности работы со сложными структурами данных в Фортране 90/95 предусмотрена возможность создания новых (производных) типов данных, на основе встроенных типов. В качестве иллюстрации (Пример 3.29) рассмотрим создание производного типа POINT, моделирующего точку на координатной плоскости с вещественными (стандартной разновидности) координатами (X, Y). Скалярный объект производного типа называется структурой, содержащей несколько элементов, которые являются данными встроенных типов и объявляются точно так же, как переменные встроенных типов, но при этом заключены в операторные скобки (TYPE … END TYPE). Для обращения к элементу структуры сначала указывается имя объекта, а затем, через разделитель «%» (символ процента ) имя элемента структуры: C%X, C%Y и т.д.


Пример 3.29. Объявление производного типа «Точка на плоскости».

program POINTYPE
type POINT
real  X, Y
end type POINT
type(POINT) , parameter :: A = POINT(1., 2.), B = POINT(3., 4.)
type(POINT) C, D
C%X =5.; C%Y =6.; D%X =7.; D%Y =8.
print *, A; print *, B; print *, C; print *, D
end
	

Скалярные объекты производного типа, также как объекты встроенных типов подразделяются на переменные (как C и D в Примере 3.29) и константы: A и B (там же).

Как и для встроенных типов существует понятие буквальных констант, например: POINT(1., 2.) и B = POINT(3., 4.). Буквальная константа встроенного типа определяется как список (через запятую) констант, являющихся значениями элементов структуры объекта – этот список записывается в круглых скобках, после имени производного типа.

Производный тип может быть определен как через встроенные типы, так и через ранее определенные производные типы. В качестве примера (Пример 3.30) можно, используя точки на координатной плоскости (тип POINT), определить тип VECTOR как пару точек P1 и P2 на координатной плоскости.


Пример 3.30. Объявление производного типа «Вектор».

program VECTYPE
! Объявление производных типов
type POINT
real  X, Y
end type POINT
type VECTOR
type (POINT) P1, P2
end type VECTOR
! Объявление и инициализация переменных производных типов
type (POINT), parameter :: A = POINT(1., 2.), B = POINT(3., 4.)
type (VECTOR) ::  AB =VECTOR(A, B), &
CD = VECTOR( POINT(3., 4.),  POINT(2., 1.))
type (VECTOR) EF
EF%P1%X  =5.; EF%P1%Y  =6.; EF%P2%X  =7.; EF%P2%Y  =8.;
print *, AB; print *, CD
end
	

В приведенном примере заданы три объекта типа VECTOR – векторы AB, CD и EF. Первый из них (вектор AB) инициализирован двумя предварительно определенными именованными константами A и B типа POINT, второй (вектор CD) – двумя буквальными константами того же типа. Третий (вектор EF) инициализирован по компонентам: поскольку вектор EF, как и любой объект типа VECTOR, имеет элементы структуры P1 и P2, каждый из которых компоненты X и Y, то необходимо инициализировать компоненты EF%P1%X, EF%P1%Y и т.д.

Стоит отметить, что, используя атрибут PARAMETER (п. 3.6), можно объявлять массивы производных типов. Массивы также могут являться элементами структуры объектов производного типа, при этом единичный объект (производного типа), в состав которого входит массив, считается скалярным объектом.