Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование / WORD / Лекции по ЯП (часть 1).doc
Скачиваний:
102
Добавлен:
15.04.2015
Размер:
1.69 Mб
Скачать

11.2. Ввод с клавиатуры

Для ввода с клавиатуры определены процедуры read и readln.

геаd(список);

readln[(список)];

В скобках указывается список имен переменных через запятую. Квадратные скоб­ки указывают на то, что список может отсутствовать.

Синтаксическая диаграмма:

Например:

read(a. b. с); readln(y); readln;

Внимание. Вводить можно целые, вещественные, символьные и строковые величины. Вводи­мые значения должны разделяться любым количеством пробельных символов (про­бел, табуляция, перевод строки).

Ввод значения каждой переменной выполняется так:

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

  2. Эти символы преобразуются во внутреннюю форму представления, соответ­ствующую типу переменной.

  3. Значение записывается в ячейку памяти, определяемую именем переменной.

Например, при вводе вещественного числа 3.78 в переменную типа real оно пре­образуется из четырех символов (3, «точка», 7 и 8) в шестибайтовое представле­ние в виде мантиссы и порядка.

Кроме того, процедура геаdln после ввода всех значений выполняет переход на следующую строку исходных данных. Иными словами, если в последующей час­ти программы есть ввод, он будет выполняться из следующей строки исходных данных. При использовании процедуры read очередные исходные данные будут взяты из той же строки. Процедура геаdln без параметров просто ожидает нажа­тия клавиши Enter.

Особенность ввода символов и строк состоит в том, что пробельные символы в них ничем не отличаются от всех остальных, поэтому разделителями являться не мо­гут. Например, пусть определены переменные

var

a : integer;

b : real;

d : char;

и в программе есть процедура ввода read(a, b, с). Допустим, переменной а надо задать значение, равное 2, переменной b — 3,78, а в d записать символ #. Любой вариант расположения исходных данных приведет к неверному результату, по­скольку после второго числа требуется поставить пробельный символ для того, чтобы его можно было распознать, и этот же символ будет воспринят как значе­ние переменной d.

2 3.78#

2 3.78#

2 3.78 #

Символом  обозначено нажатие клавиши Tab. В первом случае будет выдана ошибка времени выполнения, а в двух оставшихся переменной d будет присвое­но значение символа табуляции и символа пробела соответственно. Правильным решением является ввод чисел и символов в разных процедурах и размещение символов в отдельной строке, например:

readln(a, b);

readln(d);

Ввод данных выполняется через буфер — специальную область оперативной па­мяти. Фактически данные сначала заносятся в буфер, а затем считываются отту­да процедурами ввода. Занесение в буфер выполняется по нажатию клавиши Enter вместе с ее кодом (#13#10). Процедура read, в отличие от readln, не очищает буфер, поэтому следующий за ней ввод будет выполняться с того места, на кото­ром закончился предыдущий, то есть начиная с символа конца строки.

read(a); { считывается целое }

write(' Продолжить? (у/n) ');

readln(d); { вместо ожидания ввода символа считывается символ #13

из предыдущего ввода }

Чтобы избежать подобной ситуации, следует вместо процедуры read использо­вать readln.