Семантика
Объект класса 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 untiln — I do
begina[i, /]:= inreal;
if (ifmore theninchar ф "_" else false)
. thenerror *
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 увеличивается на единицу процедурой locate. Если файл не содержит образа с порядковым номером, равным значению LOC, то действие процедуры inimage определяется реализацией языка. В остальном эта процедура аналогична процедуре из разд. 11.2.
Процедура outimage передает копию текстового значения -переменной image на внешний файл, добавляя тем самым к файлу еще один внешний образ, порядковый номер которого равен текущему значению переменной LOC. Если файл не вмещает передаваемого текстового значения в качестве внешнего образа, то выдается сообщение об ошибке. Если файл уже содержал некоторый образ с тем же самым порядковым номером, то такой образ уничтожается. Значение переменной LOC увеличивается на единицу процедурой locate. В остальном процедура 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 отлична от единицы.