
- •6.1.2.2. Присваивание ссылок на объект
- •7. Дистанционное обращение
- •7.1. Дистанционные идентификаторы
- •7.2. Присоединения
- •9.2. Квазипараллельное исполнение
- •Integer procedure pos;
- •Inspect sysout do inspect sys in do
- •11.4.2. Семантика
- •1 12.1. Последовательности псевдослучайных чисел
- •14.2.3.2. Семантика
- •14.2.4. Управляющие процедуры
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