Процедуры ввода-вывода: 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

 

Содержание |  Назад  |  Вперед