Семантика

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

Процедура inimage передает (очередной) образ внешнего файла в текстовую переменную image. При выполнении про­цедуры выдается сообщение об ошибке, если в результате передачи image получает значение notextили не может вме­стить образ внешнего файла. Если же image может вместить больше, чем (очередной) образ внешнего файла, то послед­ний выравнивается влево, а оставшаяся часть поля перемен­ной image заполняется пробелами. Указатель позиции стано­вится равным единице.

Когда достигается конец файла, переменной image при­сваивается некоторое текстовое значение (определяемое реа­лизацией), а переменная ENDFILE получает значение true. Обращение к процедуре inimage, когда ENDFILE имеет зна­чение true, считается ошибкой.

Процедура open даёт переменной ENDFILE значение false и обращается один раз к процедуре inimage. В остальном она следует схеме, приведенной в разд. 11.1.2.

Процедура endfile* дает доступ к значению переменной ENDFILE.

Остальные процедуры обеспечивают механизмы для «по-литерного» ввода, позволяя трактовать файл как «непрерыв­ную» последовательность литер с «указателем позиции» (pos) относительно первой литеры текущего образца.

Процедура inchar доставляет очередную литеру и продви­гает указатель позиции на единицу.

Процедура lastitem вырабатывает значение true, если все литеры вплоть до конца файла (если таковые имеются) яв­ляются литерами пробела. Она может иметь побочный эф­фект, состоящий в том, что пропускается (просматривается) любое количество литер пробела.

Процедуры inreal и infrac определяются в терминах соот­ветствующих процедур дередактирования «образа». В осталь­ном определение каждой из этих двух процедур аналогично определению процедуры inint. Все эти три процедуры про­сматривают и преобразуют запись числа, содержащую пер­вую отличную от пробела литеру и содержащуюся в одном образе, пропуская произвольное количество литер пробела вначале.

Выражение intext (n), где п есть целое число, не пре­вышающее image. length, доставляет ссылку на первую по­следовательность из п литер, содержащихся в одном образе. Указатель позиции pos продвигается на следующую литеру. " Процедуры inchar и intext обе могут давать доступ к со­держимому текстовой переменной image, соответствующему концу файла.

 

Пример: . -

Следующий фрагмент программы вводит матрицу столбец за столбцом. Подразумевается, что последовательные эле­менты разделены пробелами или содержатся в различных„руются в деклараций класса, а точный смысл их может быть определен (или даже переопределен) в его подклассах. __ Заслугой авторов является также разработка стандарт-нйх средств ввода — вывода и текстовых операций для обра-

ботк-и строк.

Наконец, следует подчеркнуть, что язык СИМУЛА-67 лредставляет собой расширение языка АЛГОЛ-60 и содержит последний в качестве своего подмножества. Таким образом, имеется возможность разработки транслятора, который по­зволял бы выполнять программы, написанные как на языке СИМУЛА-67, так и на языке АЛГОЛ-60- Учитывая широкое

распространение языка АЛГОЛ-60 в нашей стране, можно надеяться, что внедрение в практику языка СИМУЛА-67 бу­дет означать не только дальнейшее развитие в области авто­матизации программирования, но и необходимую преемствен­ность.

"'v Предлагаемая вниманию читателя книга не претендует на роль учебного пособия и несколько страдает недоработанно-стью в методическом отношении. Для понимания ее требуется знание общих основ программирования, а также языков АЛ-

ТОЛ-60 и СИМУЛА-1. Тем не менее фактическое содержа­ние книги представляет большой интерес для широкого круга специалистов, занятых применением вычислительных машин

: и моделированием сложных систем.

образах. За последним элементом каждого столбца должна непосредственно следовать звездочка. .

begin arraya [I :n, Ь: m]; integer /, /;

procedureerror;__________________________________________________________________________ ;

for /:~1 step lfc untilm do
begin for /: = 1 "step 1 until
n I do
begin
a[i, /]:= inreal;
if (ifmore theninchar ф "_" else false)
. then
error *

end; -,

#[n> /]: = inreal; ifinchar ^ "*" thenerror;
fiext: end;________________________________________ end._________________________________________________ .

11.3класс outfile

Объект класса 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 characterc\

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

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

outtext ('muaoJ) end* .elseL: ifinchar^,,*" then go toL; outimage; go tonext ч enderror;

И.4. класс directfile

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

'

Объект класса 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 отлична от единицы.