Операторы ввода-вывода

С.А. Григорьев

Простейший оператор ввода в Паскале - оператор READ, он записывается в виде:

READ(имя,имя,...);

где имя - имена переменных или типизированных констант. Вводимые значения задаются в виде допустимых в Паскале констант и разделяются любым количеством пробелов. Для окончания ввода следует нажать клавишу Enter. Оператор ввода можно записать и как READLN, при вводе числовых переменных они эквивалентны. Кроме того, оператор READLN без списка в скобках можно использовать для организации задержки в работе программы - он будет ожидать нажатия клавиши Enter.

Простейший оператор вывода записывается в виде:

WRITE(выражение,выражение,...);

или

WRITELN(выражение,выражение,...);

Вывести можно любое выражение, если необходимо вывести текст, он заключается в апострофы. Оператор WRITELN отличается от оператора WRITE тем, что после вывода происходит переход на новую строку. Можно использовать оператор WRITELN без списка вывода для пропуска строки. Запишем пример программы, осуществляющей ввод и вывод :

   VAR i : Integer;

       w : Word;

        r : Real;

   BEGIN

            WRITELN;

            {------------- ввод -------------}

            WRITE('Введите целое число ');

            READ(i);

            WRITELN;

            WRITE('Введите натуральное число ');

            READ(w);

            WRITELN;

            WRITE('Введите вещественное число ');

            READ(r);

            WRITELN;

            {------------- вывод -------------}

            WRITELN('Вы ввели : ',i,' ',w,' ',r,' их сумма=',i+w+r);

            WRITELN('Нажмите Enter для выхода');

            READLN;

   END.

Впервые записав осмысленную программу, остановимся и обсудим ее внешний вид. Даже на таком тривиальном примере мы можем понять некоторые основные правила оформления программы.

1. Организация диалога с пользователем. Прежде чем записать оператор READ, вы обязаны записать хотя бы один WRITE, который выведет на экран приглашение "Введите ...", причем из этого приглашения пользователь должен понять, какие именно данные ему следует ввести. Так, в нашем примере операторы WRITE('Введите i ');  READ(i); были бы неуместны, так как пользователю неизвестно, что такое i, и он мог бы ввести, например, вещественное число, что привело бы к аварийному завершению программы.

2. Оформление текста программы. Хорошо оформленная программа легко читается и быстрее отлаживается, следует стремиться к "прозрачности" текста, но не к некоторой, вполне субъективной, "красоте". Так, скажем, операторы, выполняющиеся последовательно, следует и записывать строго друг под другом, но не "елочкой" или какой-либо другой фигурой. Средства, используемые для  оформления текста, крайне просты и доступны всякому - это пробелы, пустые строки и комментарии.

При выводе чисел можно их форматировать, т.е. управлять формой их представления. Для этого в списке вывода после выводимого выражения можно указывать модификаторы : “:L:d“ - для вещественных значений и “:L” для вещественных и целых. L и d - целочисленные выражения, первое из них определяет, сколько всего позиций отводится для выводимого числа на экране, а второе - сколько выводится цифр после десятичной точки. Если при выводе вещественного числа задан модификатор “:L:d“, то оно выводится с фиксированной точкой, если же задан модификатор “:L” или он отсутствует - то с плавающей точкой. Пусть значение переменной X равно 123.45678, тогда оператор

WRITE(X);     выведет " 1.2345678000E+02"

WRITE(X:8:2);  выведет " 123.46"

WRITE(X:10:5); выведет " 1.235E+02"

WRITE(X:10);   выведет " 1.235E+02"

WRITE(X:8);    выведет " 1.2E+02"

WRITE(X:1);    выведет " 1.2E+02"

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