
- •22. Операторы ввода-вывода в Фортране, аналогия последовательного обмена с кассетным магнитофоном
- •23. Ответы на вопросы "Что", "Куда-откуда" в операторах обмена данными
- •25. Форматный вывод таблиц
- •Правило таблицы
- •26. Атрибуты и новая форма описания объектов в современном Фортране. Массивы в раннем фортран -77 и современном Фортране. Конформные массивы.
- •27. Секция и конструктор массива
- •Примеры манипуляций с секциями
- •28. Характеристики массива
- •29.Размещение массива в памяти компьютера
25. Форматный вывод таблиц
Форматный вывод
Форматный вывод дает исчерпывающие возможности по оформлению текстов. Форматный вывод так хорошо продуман, что за 50-летнюю историю Фортрана существенно не изменился. Форматный вывод сложнее вывода стандартных текстов, поэтому изложим его описание неформально и формально.
Правило таблицы
Правило таблицы работает автоматически, если об этом не знать могут быть неприятные сюрпризы.
Когда автоматически включается в работу правило таблицы? Если много объектов – мало дескрипторов write (*,мало) много, то
Format позволяет оформлять таблицы по следующим правилам
малое число дескрипторов - это число колонок таблицы
много объектов - это общее количество чисел в таблице
много / мало - это число строк в таблице
все или часть дескрипторов на участке сканирования просматриваются многократно, потенциально бесконечно
участок сканирования заключается в скобки
несколько write, ссылаясь на один и тот же Format с разным количеством чисел, порождают таблицы с разным числом строк, но с одинаковым количеством колонок
По расположению участка сканирования и полученному результату различают
таблицу без заголовка, порождаемую Format( .. ) , в котором нет никаких скобок, кроме скобок формата - эти скобки формата == и дают участок сканирования
таблицу с заголовком, порождаемую форматом, в котором сколько угодно скобок, кроме скобок формата Format( ....=заголовок=>….(==> ) ) заголовок просматривается однократно == участок сканирования- это последняя пара скобок непосредственно внутри формата
Пример
Не изменяя format, можно получить два заполненных бланка
write (*,2000) ‘Звягин В.Ф’, ’Серебристый’,4, 212.57, ‘Cавин Ю.А.’,’Невский пр.’, 2 , 1314.37
2000 format(‘ФИО абонента’,4x,’название улицы’/ a, 4x,a/ ‘200’ ,i1/ 15x,’всего’ , F7.2)
26. Атрибуты и новая форма описания объектов в современном Фортране. Массивы в раннем фортран -77 и современном Фортране. Конформные массивы.
Атрибуты и операторы в Фортране-77 и в Фортране –90
В Фортране-77 атрибутов нет, есть только операторы. В MS-Фортране 5.1 в опережение стандарта Фортран–90 появились атрибуты, которые писали в квадратных скобках после имени объекта, например, real*8 Dlina [ allocatable ] ( -2:2, : ) Основу описаний в Фортране-90 составляют атрибуты, но для преемственности сохраняется форма оператора.
Атрибут |
Назначение |
Фортран-77 |
Фортран –90 |
DATA |
Начальные значения объектов |
Оператор |
Как атрибут не пишется, однако инициализация всегда возможна. Как оператор сохранен. |
PARAMETER |
Именованная константа |
Оператор |
Атрибут/оператор |
ALLOCATABLE |
Динамический объект |
В MS-Фортране 5.1 [Атрибут] в квадратных скобках после имени |
Атрибут |
SAVE |
Сохраняемый объект (вне стека) |
В MS-Фортране 5.1 [Атрибут] в квадратных скобках после имени |
Атрибут |
INTENT |
Тип связи параметра: (IN)-входной, (OUT)- выходной, (INOUT) – вход-выходной |
Нет |
Атрибут |
OPTIONAL |
Необязательный параметр процедуры |
Нет |
Атрибут |
PUBLIC |
Общедоступный объект модуля |
Нет |
Атрибут |
PRIAVITE |
Локальный объект модуля |
Нет |
Атрибут |
POINTER |
Указатель |
Нет |
Атрибут |
TARGET |
Объект ссылки |
Нет |
Атрибут/оператор |
В Фортран –90 лучше писать атрибуты, а не операторы, потому что:
все свойства объекта собраны в одном определении
переменные с одними и тем же набором свойств (атрибутов) идут общим списком
Новый принцип описания объектов в Фортране-90
Новый принцип описания объектов совмещает полное объявление типа и размерности, а также всех прочих атрибутов массива. Важно, что все собрано в одном описании. Если несколько массивов имеют одинаковый набор свойств, то они идут одним списком. Именно такой способ рекомендован как основной в обновленном языке Фортран-90, изобилующем многими уточняющими атрибутами. Например, вполне понятно описание в стиле Фортран-90 Integer*1, dimension (1:5), parameter :: CHET=(/ 0,2,4,6,8 /), NECHET=(/ 1,3,5,7,9 /) в этом описании имеется
знак двойного двоеточия "::" в середине строки говорит о том, что по определению набор атрибутов (свойств), перечисленных слева от "::", относится ко всем объектам, указанным справа от "::"
в примере справа от "::" два вектора CHET, NECHET, что свидетельствует о совпадении их свойств, при разных значениях
атрибут integer*1, нужен, чтобы указать целый тип элементов, компактно упакованных, каждый в 1 байт
атрибут dimension, чтобы отличить массив от простой переменной и дать размерностные характеристики массива
атрибут parameter, чтобы указать, что всё это константы
составной знак (/ .. .. /) - это конструктор массива, в данном примере целые числа из диапазона 0:9 подразделены на четные CHET и нечетные NECHET
В Фортране-90 атрибут dimension может иметь не только массив, но и функция.
В Фортране-77 Real и dimension являются не атрибутами, а операторами, допускается совмещать описания dimension X(60) и Real X, опуская dimension. Такой “экономный” способ описания не вполне согласуется с требованием явного полного перечисления свойств объектов, он не стал основным в Фортране-90
В Фортране-77 допускается писать одно описание |
Вместо двух описаний |
Real X(60) |
Real X dimension X(60) |
MS в опережение стандарта также разрешила применение некоторых атрибутов, которые по их предложению в MS Ф5.1 записывались в квадратных скобках после имени объекта, например, RealMatrix [allocatable](:,:) Написание атрибутов в квадратных скобках не принято в Фортране-90.
Конформные массивы - одинаковы по форме, – это ключевое понятие в параллельном программировании. Параллелизация начинается с описания конформныхмассивов, но это лишь база.