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

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

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

ВВЕДЕНИЕ

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

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

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

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

Как уже отмечалось (п. 3.4) тестовые данные (CHARACTER) имеют особенность описания, связанную с параметром разновидности типа: KIND, который применяется для указания кодовой таблицы символов: ASCII, UTF, Windows-1251 и т.д. При этом оптимальная кодовая таблица символов уже выбрана операционной системой, при инсталляции компилятора Фортрана и поэтому с кодовыми страницами символов нужно работать аккуратно. Если есть необходимость явного указания кодовой страницы, то KIND указывается через запятую, с длиной тестовой строки в символах: LEN, например: CHARACTER (KIND= KIND(″UTF″), LEN=13).

LEN является параметром, отвечающим за длину текстовой строки, измеряемую количеством символов,. С его помощью можно, например, объявить именованную 13-ти символьную текстовую константу TEXT (произвольное имя) со значением “Hello, World!”.

Причем с константой TEXT (Пример 4.8) можно работать не только как с целостным объектом, но и выделять в нем подстроки, задавая их границы через номера начального и конечного символа. Например, нетрудно видеть, что подстрока ″Hello″ – это символы строки TEXT, с первого по пятый, а подстрока ″World! ″ – символы с восьмого по тринадцатый. Самое простое, что можно сделать со строкой и ее подстроками – это напечатать их (Пример 4.8).


Пример 4.8. Текстовая константа и ее подстроки

program TEXTLINE1
character(LEN=13), parameter :: TEXT=″Hello, World! ″
print*, TEXT;  print*, TEXT(1:5);  print*,TEXT(8:12)
end
	


Если в программе используются текстовые константы, то их значения (как и любых других констант) не изменяется – соответственно, еще на стадии компиляции может быть автоматически посчитано количество символов в константе и произведена ее инициализация. Это означает, что необязательно считать символы в константе – это сделает компилятор, если в качестве значения длины строки LEN указать: «*» – (звездочку). При этом возможно сокращение записи – «звездочка» без LEN (Пример 4.9).


Пример 4.9. Автоматическое определение длины текстовой константы

program TEXTLINE2
character(LEN = *), parameter :: TEXT1=″Hello, World!″
character(*), parameter :: TEXT2=″Global World! ″
print*, TEXT1;  print*, TEXT1(1:5);  print*,TEXT1(8:12)
print*, TEXT2;  print*, TEXT1(1:6);  print*,TEXT1(8:12)
end
	

С текстовой переменной, как и с константой можно работать, как целостным объектом (это происходит при инициализации), а можно работать с подстроками, задавая их границы (Пример 4.10).


Пример 4.10. Текстовая переменная и ее подстрока

program TEXTLINE3
character(LEN=13) :: TEXT= ″Hello, World! ″
TEXT(1:6) = “Global”
print*, TEXT
end
	

Указание длины строки LEN для текстовых переменных обязательно.

Для тестовых данных определена единственная операция – конкатенация (Пример 4.11), обозначаемая сдвоенными прямыми слешами: «//». Конкатенация позволяет последовательно объединить несколько текстовых строк в одну строку.


unix-workdir

Пример 4.11. Текстовая переменная и ее подстрока

program TEXTLINE4
character(LEN=*), parameter :: TXT1=″Hello″, TXT2 = ″Global″, TXT3=″World!″
character(LEN=LEN(TXT1)+LEN(TXT2)+LEN(TXT3)+3) :: TEXT
TEXT= TXT1 // ″,^″ // TXT2 // ″^″ // TXT3 // ″!″; print *, TEXT
end
	

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