§ 3.1. Линейные алгоритмы

3.1.2. Форматированный вывод

 

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

        При использовании форматов для вывода значений в текстовые файлы или на экран около имени, выводимого данного явно указывается размер поля для размещения его значения (после знака :), в виде переменная:ширина поля.

 

Форматы для данных различных типов

1. Для целых данных (integer и др.) - формат задается одним числом, определяющим число позиций, отводимых на это число. Например:

Writeln(i:5);

выведет на экран значение переменной i, используя для этого 5 позиций (даже если число занимает меньше 5 позиций, свободные позиции все равно будут отображаться).

         Если переменная i:=34, то на экран будут выведены 3 пустых позиции (они для наглядности показаны знаком подчеркивания) и число 34, т.о. всего 5 позиций.

_ _ _ 34

         Если переменная i:=2345666, то данный формат (i:5) не может быть использован (выводимое число занимает больше позиций) и будет просто игнорироваться и все значение переменной отобразиться на экране.

2345666

 

2. Для вещественных данных (real и др.) - формат задается либо одним числом, определяющим число позиций, отводимых на это число в экспоненциальной форме; либо двумя числами, первое из которых обозначает общий размер поля, отведенного под это число, второе - число знаков после запятой, т.е. точность. Например:

Writeln(p:12);    или     Writeln(p:6:2);

         Если переменная p:=1234.,6789, то в первом случае на экране появится

_1.2346E+004

а во втором

1234.68

Еще один пример. Пусть значение переменной X равно 123.45678, тогда оператор

         Write(X);         выведет         "_1.23456780000000000E+02"

         Write(X:8:2);    выведет        "_ _123.46"

         Write(X:10:5);  выведет        "_123.45678"

         Write(X:10);     выведет        "_1.23E+002"

         Write(X:8);       выведет        "_1.2E+002"

         Write(X:1);       выведет        "_1.2E+002"

 

Пример программы, демонстрирующей возможности форматированного вывода числовых данных (3_1_7.exe).

3. Для строковых и символьных данных (string, char) - формат задается одним числом, определяющим число позиций, отводимых на значение этих данных (т.е. на символ или набор символов). Например, для строковой переменной ss:=’СТРОКА’ и для символьной переменной c:=’C’, операторы

         Writeln(ss:8); Writeln(c:4);

выведут на экран

_ _ СТРОКА

_ _ _ С

         Т.е. в первой строчке две первые позиции из восьми отводимых будут пустыми, а остальные занимаются словом СТРОКА. Во второй строке из 4 позиций отводимых под переменную, первые три будут свободными, а последняя занята символом С.

Может оказаться полезным, что оператор Write(' ':n) выведет на экран n пробелов. При n=6 будет

_ _ _ _ _ _

 

Если в разобранной выше задаче переписать оператор writeln, который выводит на экран значение времени и скорости троллейбуса, таким образом:

writeln(‘ За ’,t:6:2,’ сек. скорость троллейбуса v=’,v:5:1,’ м/с,’);

 

то на экране появится (знак подчеркивания показан для демонстрации пустых позиций форматированного вывода):

За _ _1.00 сек. скорость троллейбуса v= _ _1.5 м/c,

 

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

 

program Format_Vyvod;

var

   a,b : real;

   i,j : integer;

   s : string;

begin

   a:=2e5;                                                            {вещественная переменная}

   b:=3.1415926;                                       {вещественная переменная}

   s:=’privet’;                                                      {строковая переменная}

   i:=2; j:=3;                                                        {целая переменная}

   writeln(a:10:1 , s:15);

   writeln(a:8, b:8:3);

   writeln(‘i=’, i:1, ‘        j=’,j:5);

end.