Процедуры ввода данных
Ввод данных – это процесспередачи их со внешних носителей информации или устройств ввода в ячейки оперативной памяти для дальнейшей обработки.
Ввод данных со внешних устройств в объявленные в программе переменные осуществляется с помощью встроенных процедур ввода или чтения (от англ. read – читать).
Процедура ввода read имеет синтаксис
read (имя1, имя2, ..., ім'яN);
где read – имя процедуры, стандартный идентифика-
тор;
имя1, имя2, ..., ім'яN – список ввода.
Важно:
В список ввода могут входить переменные целого, действительного, символьного или строкового типа.
Переменные, идентификаторы которых являются параметрами процедуры чтения, не могут быть булевого типа.
Действие процедуры:
Программа приостанавливает свою работу и ждет, пока на клавиатуре будут набраны нужные данные.
Ввод символов сопровождается отображением их на экране.
Набранные символы запоминаются в буфере и передаются процедуре ввода только после нажатия клавиши Enter.
После нажатия клавиши Enter введенные значения присваиваются переменным, имена которых приведены в списке параметров процедуры read.
Важно:
Буфер – это область памяти для временного хранения данных. Благодаря наличию буфера возможно редактирование данных во время их ввода.
Данные, которые вводятся с клавиатуры, представлены как символьная строка, независимо от того содержат ли они числа или символы. Во время выполнения процедуры read эти строковые значения автоматически преобразовываются к типу переменных, которым они предназначены.
Если список переменных насчитывает несколько переменных, то пользователь набирает значения через пробел или нажимает после каждого данного клавишу Enter.
Например, фрагмент программы:
var x0 : byte;
x, z : real;
y : integer;
begin
read (x0);
read (x, y, z);
...
end.
На экране должно быть, например:
5.25 –10 0.05
или,
5.25
–10
0.05
Для выполнения первой команды read (x0) мы вводим число соответственно типу byte – 32 – и нажимаем клавишу Enter. Дальше для выполнения команды read (x, y, z) есть два пути. Первый – ввести все данные через пробел и нажать клавишу Enter, второй – после каждого значения нажимать клавишу Enter.
Если в строке экрана после запуска программы набрано больше чисел, чем задано элементов в списке ввода процедуры read, то остаток строки будет проигнорирован или обработан следующей процедурой read, если такая есть.
Например, если I, K, L – целого типа, то в результате выполнения процедур:
read (I, K);
read (L);
и ввода с клавиатуры строки
5 10 15
переменные получат следующие значения:
I = 5, K = 10, L = 15.
Если команда read (L) отсутствовала бы, то число 15 было бы проигнорировано программой.
В отличие от процедуры read процедура readln (от read line – читать строку) после ввода всех указанных в процедуре элементов списка осуществляет переход к следующей строке дисплея.
Это происходит потому, что процедура readln считывает все символы строки, включая символ завершения строки.
Символ завершения строки формируется во время нажатия клавиши Enter.
В противоположность процедуре readln, процедура read считывает все символы строки, кроме символа его завершения.
Процедура readln имеет синтаксис:
readln (имя1, имя2, ..., ім'яN);
где readln– имя процедуры, стандартный
идентификатор;
имя1, имя2, ..., ім'яN - список ввода.
Предыдущий пример с процедурой readln (I, K, L – целого типа) после выполнения процедур:
readln (I, K);
read (L);
и ввода из клавиатуры строки
5 10 15
обеспечит значения переменных
I = 5, K = 10.
После этого программа будет ждать нажатия клавиши Enter и ввода нового числа с новой строки, чтобы присвоить его переменной L.
Также возможно после каждого значения нажимать клавишу Enter.
А если при поточном вводе будет введено данных меньше, чем задано переменных в соответствующем списке ввода, процедура чтения будет ждать продолжения ввода.
Рассмотрим решение следующей задачи. Необходимо ввести данные:
a = 3,7; b = –1,6×10-6; k= 101; L = –25; c = ‘*’; d = ‘?';
p= true
и воссоздать строки данных на экране дисплея.
Необходимо учитывать, что данные целого и действительного типа отделяются друг от друга пробелами в строке ввода. Это значения переменных a, b, k и m.
Целая часть от дробной отделяется точкой.
Данные символьного типа (значения переменных c и d) записываются в строке ввода подряд, без использования пробела в качестве разделителя.
Данные логического типа (переменная р) нельзя вводить с клавиатуры, т.е. с использованием процедуры ввода.
Одним из вариантов решения задачи может быть следующий:
Program Ex_2;
const p=true;
var a, b : real;
k, m : integer;
c, d : char;
begin
readln (a, b, k, m);
readln(c, d);
end.
Строка ввода данных:
3.7 -1.6e-6 101 -25
*? // без кавычек
Если вызвать процедуру readln без параметров, программа будет ждать нажатия клавиши Enter для продолжения своей работы.