Программирование в среде Турбо Паскаль (Поляков, Круглов) - страница 158

Подобные проблемы переменных форматов, вообще говоря, решаются легко. В Турбо Паскале разрешено задавать форматы целочисленными переменными или константами:

- 245 -

VAR

F, n : ShortInt;

BEGIN

F:=8; n:=3;

WriteLn( 123.456 : F : n );

END.

До сих пор мы рассматриваем форматы, размещающие и форматирующие одновременно. Но когда длина значения заранее неизвестна, размещение-выравнивание по правому краю может дать некрасивые форматы:

Короткое число в формате 10 = 12

Длинное число в формате 10 = 12345678

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

Короткое число в формате -10 = 12

Длинное число в формате -10 = 12345678

Для задания такого режима надо ближнюю к значению спецификацию формата задавать отрицательной:

Write( 123.456 : 6 : 1, 22 : 4 ); { ' 123.5' и ' 22' }

Write( 123.456 :-6 : 1, 22 :-4 ); { '123.5' и '22' }

Несмотря на некоторое отсутствие гибкости в способе задания формата (нельзя задавать форматы-шаблоны — как в Фортране, Бейсике, а надо описывать каждое значение), механизм форматированного вывода текстовой информации Турбо Паскаля достаточно мощный. Помните только, что форматы имеют смысл лишь при работе с текстовыми файлами. Во всех остальных случаях они неприменимы.

12.7. Типизированные файлы и операции ввода-вывода


Типизированный, или компонентный, файл — это файл с объявленным типом его компонентов, т.е. файл с наборами данных одной и той же структуры. Как и в стандарте Паскаля, объявление такого файлового типа имеет структуру

File of ТипКомпонента,

- 246 -

где компонент может иметь любой ординарный или структурированный тип, предопределенный или построенный программистом. Запрещено лишь объявлять файлы файлов и файлы объектов, а также файлы структурированных компонентов (массивов, записей и др.), содержащих те же файлы или объекты. Так, допустимы следующие объявления:

TYPE

DimComp = Array [1..100,1..2] of Real;

RecComp = RECORD

X,Y : Byte;

A : DimComp

END;

DimFile = File of DimComp;

RecFile = File of RecComp;

IntFile = File of Integer;

Но компилятор не пропустит такие типы:

TYPE

FileFilel = File of File of Real; { неверно: файл файлов }

FileFile2 = File of DimFile; { неверно: файл файлов }

FRecComp = RECORD

X,Y : Byte;

F : File of Char

END;

FRecFile = File of FRecComp; { нельзя: файл в компоненте!}

ObjComp = OBJECT

...

END;

ObjFile = File of ObjComp; { неверно: файл объектов }

При написании программ необязательно определять специальные файловые типы. Это можно сделать «на ходу» при описании переменных: