«Ни один ремесленник, который стремится к вершинам своей профессии, не примет негодных инструментов; и ни один производитель, который ценит качество работы, не будет упрашивать ремесленника принять их»
5. Процедура вывода данных
Процедура вывода используется для стандартных типов данных вида real, integer, char, boolean и имеет вид
write[ln][([файл],параметр1[:w1[:d1]],параметр2[:w2[:d2]],..)],
где файл – имя логического файла для вывода значений во внешний физический файл;
параметр1, параметр2 – выражение, идентификатор, значения типа integer, real, char, boolean или запись символов в апострофах;
:w1 – количество позиций, заданных под информацию, которая будет выводиться;
:d1 – количество позиций, заданных под цифры после запятой, может применяться для величины типа real (то есть под мантиссу).
Напомним, что квадратными скобками отмечены те элементы, которые могут отсутствовать.
В отличие от процедуры read в качестве выводимой величины могут быть представлены следующие:
выражение:
write(x+y);
идентификатор:
write( z );
значения типа integer, real, char, boolean:
write(5,2.3e-02,¢ % ¢,false);
запись символов в апострофах:
write(¢ Задайте значения переменной x ¢);
Дополнение ln, как и для процедуры ввода, обеспечивает переход на начало новой строки. Если записано лишь writeln, то выполняется переход на новую строку.
Если не указано количество позиций под величину, которая выводится, вывод выполняется в стандартной форме. За стандартную форму принимается:
real - форма с плавающей запятой;
integer, char, boolean – простая форма отображения величины на количество позиций, которые занимает сама величина.
В этом случае можно сказать, что вывод выполняется бесформатный.
ПРИМЕР.
CONST
x : real=3.4;
i : integer= - 4;
c : char=\'z\';
b : boolean=false;
. . . . . . . . . . . . .
BEGIN
. . . . . . . . . . . . .
writeln(x); writeln(i);
writeln(c); writeln(b);
. . . . . . . . . . . . .
END.
Как результат на экране получим:
3.4000000000E+00
-4
z
false
Если вывод оформить в виде
writeln(x,i,c,b);
то выведенный результат в виде
3.4000000000E+00-4zfalse
будет совсем не понятен.
Вывод, когда указывают количество позиций для выводимой величины, называется форматным.
При выводе величины типа integer, char, boolean с указанием количества отведенных позиций значение переменной выводится в отведенном поле, прижатое к правой границе, например:
CONST
i : integer= - 4;
c : char=\'z\';
b : boolean=false;
. . . . . . . . . . . . .
BEGIN
. . . . . . . . . . . . .
writeln(i:4,c:5,b:6);
END.
Как результат на экране получим:
- 4 z false
Если указано число полей, записанных со знаком минус, то величина будут прижата к левой границе, например:
BEGIN
. . . . . . . . . . . . .
writeln(i: - 4,c: - 5,b: - 6);
END.
Как результат на экране получим:
-4 z false
Если количество записанных позиций недостаточно для выведения значений величин, то возникает автоматическое увеличение поля до необходимого размера, например:
. . . . . . . . . . . . .
writeln(i: 1,c: 5,b: 2);
END.
Как результат на экране получим:
-4 zfalse
Этот же вывод можно оформить, используя дополнительные записи символов в апострофах:
BEGIN
. . . . . . . . . . . . .
writeln(\' i =\', i: 3,\' , c =\' ,c: 5,\' , b =\' , b: 5);
END.
Как результат на экране получим:
i = - 4, c = z, b = false
При выводе величин типа real с указанием количества выведенных позиций через одно число значение переменной выводится в стандартной форме, то есть c плавающей точкой, но так, что оно занимает указанное количество позиций. При этом в любом случае минимальным числом позиций для вывода будет 8 – четыре позиции на мантиссу числа, включая знак и десятичную точку, одна позиция – на символ е, и три позиции – на порядок.
CONST
x : real = 3.4;
y : real = - 1.223e-02;
. . . . . . . . . . . . .
BEGIN
. . . . . . . . . . . . .
writeln(‘x=’, x : 9,’ y=’, y : 6);
END.
Как результат на экране получим
x= 3.40e+00 y=-1.2e-02
При выводе величины типа real, когда указывается два числа, значение переменной выводится в форме с фиксированной точкой, и в этом случае, как мы уже говорили, первое число – это количество позиций под все число, а второе число – это количество позиций, заданных под цифры числа, которые записаны после запятой (мантисса числа):
CONST
x : real = 3.4;
y : real = - 1.223e-02;
. . . . . . . . . . . . .
BEGIN
. . . . . . . . . . . . .
writeln((‘x=’, x : 9: 4 , ’ y=’, y : 9: 4);
END.
Как результат на экране получим
х= 3.4000 у= - 0.0122
Для второго числа одна цифра мантиссы не вошла в отведенное число позиций.
РЕКОМЕНДАЦИЯ. При вводе данных перед процедурой ввода всегда необходимо писать процедуру вывода с подсказкой, что именно необходимо вводить:
writeln(\'Введите действительные числа x, y: \');
readln(x,y);
«4. Процедура ввода данных»
6. Практическое задание