Процедуры ввода данных.

 

Ввод данных в языке Турбо Паскаль выполняется стандартными процедурами (операторами) READ или READLN, вывод - процедурами WRITE или WRITELN. Процедуры READ и READLN используют для ввода символов (тип данных CHAR), строк (тип данных STRING) или числовых данных (тип данных INTEGER, BYTE, REAL и др.).

 

Вызов процедуры READ имеет следующий вид:

 

READ ([<имя файла>,]<список переменных>);

Для процедуры READLN соответственно:

 

READLN ([<имя файла>,]<список переменных>);

При отсутствии <имени файла>считывание данных производится из стандартного файла INPUT; при этом стандартными устройствами считаются клавиатура или дисплей, связанные с файлом INPUT.

 

Каждому оператору ввода соответствует свой поток данных, в котором перечисляются значения констант, присваиваемые переменным, указанным в списке переменных. Присваивание значений из входного потока происходит слева направо в соответствии с порядком следования переменных в списке переменных.

 

Необходимо помнить:

- Типы переменных и констант должны совпадать (исключение составляет только тип данных REAL, для которых можно при вводе указывать переменные и константы типа INTEGER).

- Вводимые числовые данные должны быть разделены одним или несколькими пробелами; нельзя отделять пробелами знак от числа и цифру от цифры одного и того же числа.

- Если вводится строка (тип данных STRING), то READ считывает столько символов, сколько допустимо по максимальной длине, заданной в описании VAR.

- При вводе последовательности символов (тип данных CHARили STRING) пробел воспринимается как символ.

Например.

 

А) Ввод числовых данных:

Var B,A,D: Real;

K:Integer;Входной поток данных:

. . . 2.5 –4.95 20 1.25Е2

Read(A,D);После ввода:

Read(K,B); A=2.5; D=-4.95; K=20; B=125

 

Б) Ввод числовых и строковых данных.

Var A: Real;

B:Integer;

C1,C2,C3: Char;Входной поток данных:

D: String[5]; 2.5 10 KLMКОШКА

. . . После ввода:

Read(A,B,C1,C2,C3,D); A=2.5; B=10; C1=’ ’;

C2=’K’;C3=’L’;

D=’MКОШК’

 

Из примера видно, что ввод смешанных данных (и числовых и строковых) из одного входного потока осуществляется не совсем верно. Если же во входном потоке данных после 0 не поставить пробел, то это приводит к ошибке ввода данных (ERROR 106). Поэтому рекомендуется вводить числовые значения отдельно от символов или строк.

 

При выполнении оператора READ конец строки ввода (нажатие клавиши <Еnter>) приравнивается к вводу пробела, разделяющего элементы данных во входном потоке; в этом случае нет перехода к следующей строке данных во входном потоке, а входные данные последовательно считываются в соответствующие переменные.

 

Например, для одних и тех же операторов ввода входной поток может быть разным:

Read(A,B,C); Входной поток:2 9 5 3 7 или

Read(D,Е); Входной поток 1 строка:2 9 5

2 строка 3 7

Отличие оператора READ от READLN состоит в том, что после считывания последней переменной при READLN остаток строки ввода игнорируется. Следующий за ним оператор READ или READLN считывает данные с начала новой строки, т.е. оператор READLN реагирует на конец строки (нажатие клавиши <Еnter>) и в случае его обнаружения происходит переход к следующей строке данных во входном потоке данных. Возможно использование оператора READLNбез параметров; в этом случае обеспечивается безусловный переход к следующей строке данных во входном потоке.

Например, рассмотрим ввод элементов двумерного массива разными способами:

1) For I:=1 to 2 DO