Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Симула.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
393.73 Кб
Скачать

11.3.2. Семантика

. i - '

Объект класса outfile служит для представления после­довательно организованного выходного файла.

Передача образа из^текста image в файл осуществляется процедурой outimage. В случае когда длина текста image не соответствует свойствам внешнего файла, эта процедура дей­ствует по правилам, определенным при реализации языка. После передачи текста процедура заполняет image пробе- -лами и устанавливает индикатор позиции равным единице. • Процедура close вызывает один раз процедуру outimage, если указатель позиции отличается от единицы. В остальном процедура действует по схеме, приведенной в разд. П.1.2._

Процедура outchar трактует файл как непрерывный по­ток литер.

Остальные процедуры обеспечивают средства для «поэле­ ментного» вывода. Каждый элемент редактируется в неко­ торый подтекст image, на первую литеру этого подтекста ука­ зывает указатель позиции текста image, а длина подтекста равна параметру w. Указатель -позиции увеличивается на зна­ чение параметра т. Если элемент не умещается до конца текста image, то перед редактированием происходит обраще­ ние к процедуре outimage. '

Процедуры outint, outreal и outfrac определяются в тер­минах соответствующих процедур редактирования, принад­лежащих тексту image, и имеют дополнительный параметр типа integer, который указывает длину формируемого под­текста.

Для процедуры outtext размер элемента равен длине тек­стового параметра. Заметим, что этот параметр вызывается по значению, т. е. (строка) является возможным фактическим параметром для этой процедуры.

Пример ■ 1:

Следующий фрагмент программы мог бы быть процеду­рой error для примера, приведенного в разд. 11.2.2.

procedure error; begin character c\

outtext ('столбец7)] outint (/, 4); setpos (pos — 1); с : = inchar ; 1 ' if c^V'Ac^V1 then outtext (' _засорен7);

else outtext (*_имеет_слишком_много^элементов9); if сФ"*" then begin .sysout,setpos (sysout. pos — 15);

outtext ('muaoJ) end * .

else L: if inchar^,,*" then go to L; outimage; go to next ч end error;

И.4. класс directfile

11.4.1. Определение

FILE class directfile; virtual: procedure locate, endfile,

inimage, outimage; begin integer LOC; integef procedure location; location: = LOC ;

procedure locate (/); integer /;

begin ; LOC : = г end locate;

procedure open begin ; locate (1) end open;

procedure close ;

Boolean procedure endfile ; :. ;

procedure inimage;

begin if endfile then ERROR ;....'....; locate (LOC + 1);

setpos (1); end inimage; procedure outimage;

begin ; locate (LOC + 1); image: = notext;

setpos (1) end outimage;

character procedure inchar ;

Boolean procedure lastitem ;

integer procedure inint ;

real procedure inreal ;

integer procedure infrac ;

text procedure intext ;

procedure outchar ;

text procedure FIELD ;

procedure outint ;

procedure outfix ;

procedure outreal ;

procedure outfrac ;

procedure outtext ;

end directfile; . .

i ■

11.4.2. Семантика

Объект класса directfile служит для представления внеш него файла, в котором отдельные образы адресуемы К0№МИ (целыми) числами —номерами, ' ■"

Переменная LOC обычно содержит порядковый номер не­которого внешнего образа. Процедура location дает доступ к текущему значению переменной LOC. Процедура locate мо­жет быть использована для присваивания этой переменной данного значения. Присваивание может сопровождаться оп­ределенными в реализации проверками и командами обра­щения к устройству внешней памяти, соответствующему дан­ному файлу.

Процедура open разыскивает первый образ файла. В осталь­ном она следует схеме, приведенной в разд. 11.1.2.

Процедура endfile вырабатывает значение true тогда и только тогда, когда текущее значение переменной LOC не указывает ни на какой образ внешнего файла. Процедура определяется конкретной реализацией.

Процедура inimage передает в текст image копию внеш­него образа, на который в данный момент указывает пере­менная LOC (если таковой образ имеется). Затем значение переменной LOC увеличивается на единицу процедурой lo­cate. Если файл не содержит образа с порядковым номером, равным значению LOC, то действие процедуры inimage оп­ределяется реализацией языка. В остальном эта процедура аналогична процедуре из разд. 11.2.

Процедура outimage передает копию текстового значения -переменной image на внешний файл, добавляя тем самым к файлу еще один внешний образ, порядковый номер кото­рого равен текущему значению переменной LOC. Если файл не вмещает передаваемого текстового значения в качестве внешнего образа, то выдается сообщение об ошибке. Если файл уже содержал некоторый образ с тем же самым по­рядковым номером, то такой образ уничтожается. Значение переменной LOC увеличивается на единицу процедурой lo­cate. В остальном процедура outimage аналогична процедуре из разд. 11.3.

Другие процедуры класса directfile аналогичны соответ­ствующим процедурам из разд. 11.2. и 11.3,

11.5. класс prlntfile

11.5.1. Определение

outfile class prlntfile;

begin Integer LINES PER PAGE, SPACING, LINE;

Integer procedure line; line : = LINE;

procedure lines per page {n)\ Integer n\

begin.,..} LINES PER PAGE; = /z end;

procedure spacing (/г); integer n\ "■>'■'

begin ; SPACING : -n end ;

procedure eject (n); integer n;

begin if /z<OAn>LINES PER PAGE then ERROR;

.... ; LINE : = n end eject;

procedure open .... begin .... ; eject (I); .... end ; •■ procedure close .... begin .... ; if pos ф\

. then outimage end;

procedure outimage; . F ^ \ -

begin ; *

image: = notext; setpos (1);

■■' LINE : = LINE + SPACING;

if LINE > LINES PER PAGE then eject (1) end; " •

LINES PER PAGE:-...... ; '

SPACING: -1

end printfile; . '

W m ■

* , " II

■ * >

11.5.2. Семантика

Объект класса printfile служит для представления выход­ного файла, реализуемого печатающим устройством. Класс printfi e является подклассом класса outfile. Переменная image в объекте класса printfile представляет строчку (яв­ляется образом строчки) на печатной странице.

.Переменная LINES PER PAGE указывает максимальное число физических строчек, которые могут быть напечатаны на каждой странице, включая пробельные строчки. В мо­мент порождения объекта этой переменной присваивается оп­ределяемое реализацией значение. Для изменения этого зна-' чения можно воспользоваться процедурой lines per page.

Переменная SPACING указывает количество строк, про­ пускаемых между двумя последовательными операциями вы­ дачи на печать. Переменная получает значение 1 в момент порождения объекта. Ее значение можно изменить посред­ ством процедуры spacing. (В некоторой реализации эта про­ цедура может иметь побочный эффект, состоящий в измене­ нии значения переменной LINE.) Если переменная SPACING равна 0, то последовательные образы печатаются на одном и том же физическом месте (без протяжки бумаги)., "

Переменная LINE указывает порядковый номер строчки, подлежащей выдаче на печать, _ считая от начала текущей страницы. Значение этой переменной можцр1.11олучить

цедурой line, ■ ... .. ' ,',[ ■-

Процедура eject служит для установки печатающего уст­ройства на строчку, указываемую параметром п. Предусма­триваются следующие.два случая:

l<n<LINE:

очередной образ будет на­ печатан на строчке номер ri ;' • " ■ . следующей страницы;

LINE < п < LINES PER PAGE:

очередной образ будет на-

- . печатан на строчке номер п

текущей страницы.

Процедура outimage работает по правилам разд. 11.3. Кроме того, она обновляет переменную LINE и заставляет ее указывать на первую строчку следующей страницы, когда-текущая страница оказывается заполненной.

Процедуры open и close следуют правилам разд. 11.1. Кроме того, процедура open устанавливает печатающее уст­ройство на начало страницы, a close выдает текущее значе­ние текста image, если pos отлична от единицы.

\2. СЛУЧАЙНЫЙ ВЫБОР

*

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]