nextupprevious
Next:2.2.6 Общий вид Zonnon-программ
Up:2.2 Выражения, операторы и функции
Previous:2.2.4 Составной оператор


2.2.5 Операторы ввода-вывода

Устройства ввода и вывода конкретного компьютера отображаются в виртуальной Zonnon-машине (ВМ) так называемыми стандартными файлами Input (ввод) и Output (вывод). Input и Output представляют собой переменные, значениями которых являются слова в алфавите целых, вещественных и литерных значений. При этом для каждого состояния ВМ определено разделение значения переменной Input на два cлова (которые мы будем обозначать через Input1 и Input2) таким образом, что Input1 -- последовательность входных значений, уже прочитанных к данному моменту, а Input2 -- непрочитанная часть последовательности входных значений, т.е. слово, хранящееся в переменной Input, получается конкатенацией слов Input1 и Input2 (обозначаем Input = Input1 $ \parallel$ Input2, где $ \parallel$ -- знак операции, вычисляющей по двум словам их конкатенацию).

В начальном состоянии ВМ переменная Input2 содержит входные данные Zonnon-программы (т.е. Input2 = Input), а Input1 и Output -- пустые слова.

В конечном состоянии ВМ значением переменной Output является последовательность результатов данного выполнения Zonnon-программы, а переменная Input2, как правило, хранит пустое слово, т.е. Input = Input1.

Чтение значений из входного файла осуществляется с помощью оператора обращения к стандартной процедуре read, синтаксис которого изображен на рис. 2.8
 

read(InDesignator {, InDesignator})

Рис. 2.8. Оператор обращения к стандартной процедуре ввода
 

Количество переменных в операторе (фактических параметров обращения) указывает, сколько входных значений должно быть одновременно прочитано при его однократном выполнении; при этом первое прочитанное значение присваивается первой переменной из списка параметров, второе -- второй переменной из списка параметров и т.д.

По существу, действие, изображаемое оператором read (X,$\alpha$), где $\alpha$ -- непустой список переменных, совпадает с действием составного оператора

begin read(X); read($\alpha$) end,

а семантика оператора read(X) может быть описана следующим составным оператором:

begin X := Голова(Input2); Input1 := Input1 $ \parallel$Голова(Input2); Input2 := Хвост(Input2) end.

Напомним (см. п. 1.1.1), что по определению  и  для любой непустой последовательности $\omega = a \alpha$.

Для того, чтобы не возникало ошибки из-за попытки чтения при пуcтой последовательности Input2, в языке имеется стандартная функция Eof с результатом логического типа, выдающая значение True, если все значения входного файла уже прочитаны, т.е. если Input2 -- пустое слово, и значение False, если $\mid Input2 \mid > 0$.

Печать значений (их запись в выходной файл Output) осуществляется с помощью оператора обращения к стандартной процедуре write, синтаксическая диаграмма которого изображена на рис. 2.8.

write (OutExpression {, OutExpression})

Рис. 2.8. Оператор обращения к стандартной процедуре вывода

Действие оператора обращения к процедуре write состоит в последовательном добавлении в конец выходной последовательности значений выражений, перечисленных в качестве фактических параметров.

Оператор write (E, $\alpha$), где $Е$E -- выражение, а $\alpha$ -- непустая последовательность выражений, равносилен составному оператору

begin write(E); write($\alpha$) end,

а действие оператора write(E) описывается оператором присваивания

Output := Output $ \parallel$ A,

где А обозначает изображение текущего значения выражения Е в виде последовательности.

В реальных устройствах вывода имеется возможность удобного размещения выходной информации на экране дисплея, листке бумаги и т.д. Частично такие средства имеются и в языке Zonnon.

Во-первых, предполагается, что помимо литерных значений, составляющих тип char, имеется специальная управляющая литера, называемая "конец строки". В отличие от букв или цифр, литера "конец строки" не печатается при работе реального устройства вывода, а управляет его работой. Включение литеры "конец строки" в выходной файл можно осуществить с помощью оператора обращения к стандартной процедуре writeln. Оператор writeln($\alpha$), где $\alpha$ -- непустая последовательность выражений, равносилен составному оператору

begin write($\alpha$); writeln end.

Далее, список фактических параметров при обращении к процедуре write (или к процедуре writeln) образован из элементов вывода, каждый из которых может принимать один из следующих трех видов:

$X$$X : Y$$X:Y : Z$

где $X$ -- выражение, которое задает выводимое значение литерного, целого, вещественного, логического типа или строку, а $Y$ и $Z$ -- целочисленные выражения, позволяющие управлять способом представления этого значения следующим образом.

Параметр $Y$ определяет минимальное число литер, подлежащих выдаче (часто называемое "шириной поля"). Выводимое значение параметра $X$ преобразуется в последовательность литер, представляющую это значение в стандартной нотации. Она выводится непосредственно вслед за предыдущим выводом (без какого-либо разделения) если спецификация $Y$ опущена. Если ширина поля присутствует, то при выводе последовательность литер, имеющая меньшую длину, чем $Y$, будет дополнена слева пробелами, а при большей длине будет выводиться так, как если бы параметр $Y$ отсутствовал. Значения параметров ширины поля по умолчанию для write и writeln зависят от типа параметра следующим образом:

Параметр $Z$ управляет печатью вещественных значений. Вещественные числа выводятся в плавающем формате, если $Z$ отсутствует, и в формате с фиксированной точкой, если $Z$ присутствует. Параметр $Z$ задает число цифр, печатаемых после десятичной точки.
 

Next:2.2.6 Общий вид Zonnon-программ
Up:2.2 Выражения, операторы и функции
Previous:2.2.4 Составной оператор


© В.Н. Касьянов, Е.В.Касьянова, 2004