Ввод данных в языке Турбо Паскаль выполняется стандартными процедурами (операторами) 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