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

Inspect sysout do inspect sys in do

(программа) end

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

Ниже идентификаторы, напечатанные заглавными бук­вами, представляют величины, недоступные для программы пользователя.' Многоточие заменяет части алгоритмов или приведенные где-либо в другом месте данного изложения, или описанные неформально, или зависящие от реали­зации.

Параметр LINELENGTH типа integer представляет опре­деляемое реализацией количество литер в строке печатаю­щего устройства.

Переменные SYSIN и SYSOUT представляют соответ­ственно стандартное устройство ввода с перфокарт и стан­дартное выводное печатающее устройство. Программа может ссылаться на соответствующие объекты класса FILE при по­мощи sysin и sysout соответственно. Большинство атрибутов этих объектов непосредственно доступны в результате подра­зумеваемых присоединяющих операторов, охватывающих программу пользователя.

Файлы SYSIN и SYSOUT открываются и закрываются внутри BASICIO, т. е. вне самой программы-.

: 11.1. КЛАСС FILE

■Щ

I

11.1.2. Семантика

-I ■

Внутри программы объект какого-либо подкласса класса FILE служит для представления файла. Четыре подкласса класса FILE определены в самого языке:

^ infile, представляющий последовательные файлы с опера­цией ввода (передачи данных из файла в программу);

outfile, представляющий последовательные файлы с опера­цией вывода (передачи данных из программы в файл);

directfile, представляющий адресные файлы с операциями и ввода, и вывода;

printfile (подкласс класса outfile), представляющий после­довательные файлы с некоторыми возможностями управле­ния печатающим устройством.

При конкретной реализации можно в произвольной сте­пени ограничить использование этих классов в качестве пре­фиксов к классам или префиксов к блокам. С другой, сто­роны, при конкретной реализации можно предусмотреть но­вые системные подклассы, которые могут быть определены в каждой частной системе. .*

■ Каждый объект класса FILE имеет текстовый атрибут NAME, вызываемый по значению. Подразумевается, что это текстовое значение идентифицирует некоторый внешний файл, который тем или иным 'способом, определяемым реализацией,, связывается с этим объектом-класса FILE. Последствия появ­ ления нескольких объектов класса FILE, представляющих один и тот же (внешний) файл, определяются конкретной реализацией, . ..-■'*

Текстовая переменная image служит для обозначения текстового значения, которое работает, как «буфер», в том смысле, что эта переменная содержит обрабатываемый в дан­ный момент образ внешнего файла. В конкретной реализации можно потребовать, чтобдл переменная image в момент ввода или вывода ссылалась на целый текстовый объект.

Процедуры setpos, pos, more и length включены по сооб­ражениям удобства.

Файл может быть либо «открыт», либо «закрыт», что ука­зывается значением переменной OPEN, Ввод или вывод об­разов может происходить только на открытом файле. Перво­начально файл закрыт (за исключением SYSIN и SYSOUT, которые «с точки зрения программы» всегда открыты).

Процедуры open и close выполняют операции открытия и закрытия файла. Поскольку эти процедуры являются вир­туальными величинами, их можно полностью,переопределить (на всех уровнях доступа) для объектов, принадлежащих к специальным подклассам -классов infile, outfile и т. д. Хотя эти процедуры определяются конкретной реализацией, они должны следовать следующей схеме:

procedure open (7\ ....); text T;

begin if OPEN then ERROR;

OPEN:-true;

image : — T ;

setpos (1);

e nd open;

procedure close (......);

begin if ПOPEN then ERROR; OPEN— false;

image : — notext ч « <■

end close;

здесь многоточия обозначают возможные дополнительные па­ раметры и операторы, '

* *

П.2. класс infile

11.2.2. Семантика

Объект класса 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 array a [I :n, Ь: m]; integer /, /;

procedure error; ;

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

end; -,

#[n> /]: = inreal; if inchar ^ "*" then error; fiext: end; end . .

11.3 класс outfile

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