ПРОЦЕДУРЫ ВВОДА И ВЫВОДА

 

Ввод/вывод связан с обменом информацией между оперативной памятью и внешними устройствами. Здесь рассмотрены процедуры ввода/вывода: read, readln, write, writeln, использующие стандартные файлы ввода/вывода. Стандартным файлом ввода является клавиатура, а вывода – экран. Для ввода данных с клавиатуры применяются процедуры:

read (<список ввода>);

readln (<список ввода>);

Список ввода – это последовательность из одной или более переменных типа char, string, а также любого целого или вещественного типа. При вводе числовых переменных процедура read вначале выделяет подстроку во входном потоке по следующему правилу: все ведущие пробелы, символы табуляции и маркеры конца строки пропускаются, выделяется первый значащий символ, признаком конца подстроки является любой из вышеперечисленных символов или символ конец файла. Выделенная таким образом подстрока рассматривается как символьное представление числовой константы, которое преобразуется в соответствии с типом переменной, и полученное значение присваивается переменной. Если значащих символов в строке нет, а список ввода еще не исчерпан, то автоматически осуществляется переход к новой строке. Процедура readln идентична процедуре read за исключением того, что после считывания последней переменной, оставшаяся часть строки пропускается, так что следующее обращение к read или readln начнется с первого символа новой строки. Кроме того, процедуру readln можно вызывать без параметров, что приведет к пропуску всех символов текущей строки. Рассмотрим следующий фрагмент программы:

var a,b,c,d:real;

begin ... read(a,b,c,d); ... end.

Пусть, требуется ввести числа 1,3;13,3;76,8;125,0. Информация набирается в виде:

1.3 13.3 76.8 125.0

на одной или нескольких строках. В результате выполнения процедуры read переменной а присвоится значение 1.3, переменной b – значение 13.3, с – 76.8, d – 125.0. Если же ввод производится с помощью двух процедур:

readln(a,b,c);read(d);

числа, соответствующие a,b,c, набираются на одной строке, а число, соответствующее d, – на другой.

Для вывода данных на экран используются процедуры:

writeln(<список ввода>);

write(<список ввода>);

Список вывода может содержать одно или несколько выражений типа char, string, boolean, а также любого целого или вещественного типа. Отличие процедуры writeln от write состоит лишь в том, что в процедуре write курсор остается на той же строке экрана за последним выведенным символом, а в writeln курсор переходит на начало следующей строки. Предположим, что переменные a,b,c описаны как целые и имеют соответственно значения 132, 25, -37. После выполнения процедур

writeln(a,b);write(c);

a и b будут напечатаны на одной строке, а с - на другой:

13225

-37

Кроме того, процедура вывода предоставляет возможность указать в выводимом числе количество позиций и сколько из них после запятой (последнее только для чисел с плавающей точкой):

writeln(a:3,b:5,c:4);

В этом случае при печати под значение переменной a отводится 3 позиции, b5 позиций, под с4 позиции, т.е. будет выведено 132 25 -37.

Если количество литер в представлении выводимого значения меньше, чем указано в процедуре, то оно слева дополняется пробелами. Если количество указанных позиций недостаточно, то происходит автоматическое увеличение поля до необходимых размеров:

writeln('a=',a:1,'b=',b:2,'c=',c:3);

В последнем примере используется возможность вывода строк символов, при этом будет напечатано:

a=132b=25c= -37

Пусть переменные d, e, f описаны как вещественные и имеют соответственно значения 13,13;123,45;-987,654. Результатом работы оператора

writeln('d=',d:5:2,'e=',e:8:3,'f=',f:8:2);

будет строка

d=13.13e= 123.450f= -987.65

Если для чисел с плавающей точкой указывается только количество позиций в числе, без указания числа позиций после запятой, то в этом случае числа выводятся в экспоненциальной форме, занимая указанное количество позиций. Если длина поля не указывается совсем, то под каждое число отводится стандартная длина поля и числа печатаются в экспоненциальной форме:

writeln('d=',d:10,' e=',e:9,' f=',f);

d= 1.313E+01 e= 1.23Е+02 f=-9.8765000000E+02