Процедуры ввода-вывода: Write и Read |
Содержание | Назад | Вперед |
Ввод данных | Вывод данных | Форматирование вывода
Для ввода и вывода числовой и текстовой информации в языке Паскаль предусмотрены следующие процедуры:
ввод:
Read( [ f ], P1, P2, P3, ..., Pn )
или ReadLn( [ f ], P1,
P2, P3, ..., Pn )
вывод:
Write( [ f ], P1, P2, P3, ..., Pn )
или WriteLn( [ f ], P1,
P2, P3, ..., Pn )
где f - файловая переменная, указывающая логическое имя файла; P1, P2, ... Pn - список ввода-вывода.
Если в процедурах ввода-вывода первым параметром стоит логическое имя файла, то это означает, что поток данных будет приниматьсяы (Read) или направляться (Write) на конкретное физическое устройство компьютера, связанное в данный момент с логическим именем этого файла.
Если имя файловой переменной опущено, то считается, что ввод сопряжен с логическим файлом Input (под ним подразумевается клавиатура с "эхом" ввода на экране), а вывод - с логическим файлом Output (что соответствует выводу на экран). Имена Input и Output являются предопределенными в системной библиотеке (модуле System).
Таким образом, вызов процедуры Read(a, b) полностью эквивалентен вызову Read(Input, a, b), а вызов процедуры Write(b, c) - вызову Write(Output, b, c).
Процедуры ввода информации Read/ReadLn.
Перейти к: | Вывод данных | Форматирование вывода | |
Синтаксис вызова:
Read( [ f ], P1,
P2, P3, ..., Pn ) или ReadLn( [ f ], P1, P2, P3, ..., Pn )
P1, P2, ..., Pn - имена переменных, значения которых будут считаны (введены) из файла f. Тип переменных при вводе из текстового файла (в том числе с клавиатуры) может быть только целым, вещественным, символьным, строковым или совместимым с ними. Сложные структурированные типы (такие, как массив или запись) могут быть введены только по элементам.
Например:
VAR
i : Word;
l : LongInt;
r : Real;
m : array[1..50] of Byte;
s : String;
BEGIN
{
ЧИТАЮТСЯ С КЛАВИАТУРЫ
}
Read( i, l ); { два целых числа
}
Read( l, r, s ); { целое, вещественное число и
строка }
for i:=1 to 50 do Read( m[i] );
{ ввод массива }
END.
Когда вводятся числовые значения, два числа считаются разделенными, если между ними есть хотя бы один пробел, или символ(ы) табуляции (#9), или символ(ы) конца строки (#13). Так, при выполнении процедуры Read( i, l ) (см. выше) можно ввести значения с клавиатуры несколькими способами:
156 23 [Enter]
или
156 [Enter] 23 [Enter]
При вводе с клавиатуры ввод всегда должен завершаться нажатием клавиши Enter, ибо именно она заставляет программу принять введенные буквы или цифры.
При вводе с клавиатуры особой разницы между Read и ReadLn нет. Для текстовых файлов процедура ReadLn (Read Line) считывает значения в текущей строке и переводит позицию на начало следующей строки, даже если в текущей строке остались непрочитанные данные.
Процедуры вывода информации Write/WriteLn.
Перейти к: | Ввод данных | Форматирование вывода | |
Синтаксис вызова:
Write( [ f ], P1,
P2, P3, ..., Pn ) или WriteLn( [ f ], P1, P2, P3, ..., Pn )
Эти процедуры выводят список значений P1, P2, ..., Pn в текстовый файл f. Если файл не указан, то вывод осуществляется на экран. Значения, как и при вводе, могут иметь лишь целые, вещественные, символьные и строковые типы, а также производные от них. Структурированные данные (например, массив) должны вводится по элементам. Выводить можно также значение логического типа Boolean, например
CONST
tr : Boolean = True;
fl : Boolean = False;
BEGIN
Write( tr, '...', fl );
END.
Процедура Write напечатает на экране: TRUE ... FALSE.
Процедура Write выводит данные в текущую строку и не закрывает ее, т.е. следующие данные запишутся в ту же строку. Формально во внешнем файле (на диске) размер строки не ограничен. Исключение составляет вывод на экран. Если выводимый текст "уперся" в правую границу экрана, то он на этом месте разрывается и продолжается с начала следующей строки.
Процедура WriteLn (Write Line) выводит строку данных и закрывает ее: помещает в конец строки символ конца строки #13 (точнее два символа: #10 - конец строки и #13 - "перевод каретки"). При выводе на экран курсор автоматически устанавливается в первую позицию следующей строки.
Список вывода процедуры Write может содержать константы, переменные, выражения, вызовы функций - лишь бы они имели соответствующие типы и были разделены запятыми:
Write( 2+5 );
Write( 'Результаты: ', a+b/sin(x) );
Write( 'Элемент А[', i, ',', j, ']: ', A[i,j] );
Перейти к: | Ввод данных | Вывод данных | |
При выводе значений в текстовый файл и на экран можно указывать формат вывода, т.е. отводить поле для размещения этих значений. Для строковых, символьных и целочисленных значений формат задается одним числом, отделенным от значения двоеточием:
Write( Ch:3, St:10, i:5 );
Это число показывает, сколько позиций (знакомест) отдводится под значение. Так, значение Ch (символ) будет размещено в трех позициях, хотя реально займет лишь одну, строка St - в 20 позициях, а целое значение i - в пяти позициях. Если реальное значение "короче" формата, излищек будет заполнен пробелами. Но если наоборот (формат "мал"), то значение будет выводится, игнорируя спецификацию формата. Ошибки при этом не возникнет. Выравнивание значение в поле формата происходит по правому краю.
При выводе вещественных значение без указания формата числа (по умолчанию) выводятся в экспоненциальном виде. Например,
VAR
x : Real;
BEGIN
x := 27.5;
Write( x );
END.
На экран будет выведено:
2.7500000000Е+01
Для вывода вещественного значения в форме с фиксированной точкой нужно указать следующий формат: сначала, как обычно, указывается общий размер поля, а затем, снова через двоеточие, число знаков после запятой:
Write( x:12:3, sin(2.5):8:1 );
Если при указании формата вывода вещественного значения опустить второй параметр, то значение будет представлено в экспоненциальной форме. Например,
VAR
x : Real;
BEGIN
x := 27.5;
Write( x:5:2, ' ', x:10 );
END.
На экран будет выведено:
27.50 2.7500Е+01
Содержание | Назад | Вперед |