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

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

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

ВВЕДЕНИЕ

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

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

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

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

Подобно конструкции IF конструкция CASE позволяет выполнять тот или иной блок операторов, в зависимости от определенного условия. Условие выбора определяется значением скалярного выражения целого, логического или текстового типа. Выражение, определяющее условие выбора должно быть записано в круглых скобках в операторе SELECT CASE.

SELECT CASE (выражение)
CASE селектор 1
...блок операторов 1
CASE селектор 1
...блок операторов 1
CASE селектор N
...блок операторов N
CASE DEFAULT
...блок операторов
END SELECT

Для выбора блока операторов необходимо, чтобы селектор оператора CASE этого блока содержал элемент, совпадающий по значению с выражением в SELECT CASE. Общая форма селектора – это заключенный в скобки список неперекрывающихся значений и интервалов того же типа, что и выражение, определяющее условие выбора блока исполняемых операторов.

В качестве примера (Пример 5.4) можно запрограммировать алгоритм определения четности целых чисел (тот же алгоритм, что и в примере Пример 5.2)

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


Пример 5.4. Пример логической конструкции IF с альтернативой.

program EVENCASE
integer NUMBER
logical EVEN
read*, NUMBER
EVEN = NUMBER / 2 * 2 == NUMBER
select  case (EVEN)
	case (.TRUE.)
		print*, ″Четное″
	case (.FALSE.)
		print*, ″Нечетное″
end select
end
	


Пример 5.5. Задание селекторов в виде списка и закрытого диапазона.

program DETECTSYM
character SYMBOL
read*, SYMBOL
select case (SYMBOL)
	case(″–″  , ″+″, ″/″, ″*″)	! Селектор в виде списка
		print*,'Арифметический оператор'
	case(“0”: “9”)	! Селектор в виде закрытого диапазона значений
		print*,'Цифра'
	case default
		print*,'Неизвестный символ'
end select
end
	

Селекторы могут задаваться списком и закрытым диапазоном, а в Примере 5.6 значения селектора задаются как закрытым, так и открытым диапазоном.

Закрытый диапазон значений задается своей левой и правой границами, разделенными двоеточием. Соответственно, в диапазоне, открытом слева отсутствует левая граница, а в диапазоне открытом справа – правая граница. По своему смыслу открытые диапазоны аналогичны логическим отношениям «меньше либо равно» и «больше либо равно».

Конструкция CASE может содержать не обязательный блок, начинающийся строкой CASE DEFAULT. В этот блок входят операторы, выполняемые, если все прочие CASE-блоки не сработали. Такой блок не обязательно должен быть последним.


Пример 5.6. Задание селекторов в виде закрытого и открытого диапазона.

program SUBSTEMP
!Состояние субстанции, как функция температуры.
integer TEMPERATURE, ABSNUL, FLAME
parameter(ABSNUL = –273, ICE = 0, FLAME = 1000000)
read*, TEMPERATURE
select case (TEMPERATURE)
	case(:–273)
		print*, ″Давно замерзло все, что можно″
	case(ABSNUL:ICE)
		print*, ″Лед″
	case(FLAME:)
		print*, ″Пламень″
	case default
		print*, ″Туман и сырость″
end select
end