Электронная версия курса лекций по дисциплине "Информатика", страница 7

Output data 6(1): r(Om)=10.9877                                                

r(Om)=1234567890                                                                

Output data 1: r(Om)=1.23457e+09                                               

Output data 2: r(Om)=1.2346e+09                                                

Output data 3: r(Om)=1.2e+09                                                    

Output data 4: r(Om)=1234567890.00                                             

Output data 5: r(Om)=1234567890.00                                             

Output data 6(1): r(Om)=1.23457e+09                                             

В строке 2 программы для возможности работы с манипуляторами setw и setprecision в тест программы включается файл iomanip.h, в котором они описываются. Манипуляторами называются функции, имена которых можно включать в конструкции вывода и ввода на базе объектов cin и cout, для целей изменения формы или способа вывода данных.

В начале работы программы используются параметры вывода по умолчанию. Выводится максимально 6 значащих цифр (точность (precision) вывода равна 6) , минимальная ширина поля вывода составляет 0 позиций. Эти параметры были использованы в строке 7.

В строке 8 задается точность вывода равная пяти. Для этого вызывается метод precision объекта cout. Функция получает в качестве фактического параметра значение 5. Метод precision описан в том же файле (iostream.h), как и сам объект cout. Эта точность будет использоваться при выводе до тех пор пока не встретится оператор, который ее изменит.

В строке 10 устанавливается уже с помощью манипулятора setprecision точность вывода равная двум. Минимальная ширина поля вывода увеличивается до 7 позиций. Поэтому, если значение занимает количество позиций менее семи (первый случай), то остальные позиции заполняются слева пробелами. Имеется особенность в работе манипулятора setw по сравнению с setprecision, которая заключается в том, что его действие не будет распространяться на следующий оператор.

Поэтому для сохранения поля вывода (7сим) в строке 11 повторно вызван манипулятор setw с тем же самым фактическим параметром. Вызов манипулятора fixed будет обеспечивать дальнейший вывод значений в виде с фиксированной точкой с количеством символов после десятичной точки равной заданной точности вывода. Отметим, что она была установлена в строке 9 с помощью манипулятора setprecision равной двум, что после вызова манипулятора fixed будет обеспечивать вывод после десятиной точки двух цифр (слева в незаполненных позициях размещаются пробелы).

В строке 12 манипулятор setw(7) не вызывается, поэтому ширина поля вывода опять становится равной по умолчанию, т.е. нулю. В результате заполнения незанятых позиций пробелами уже не будет. Сохранение формата вывода с фиксированной точкой с заданным количеством цифр после запятой сохраняется,  несмотря на то, что манипулятор fixed не вызывается.

В строках 13 и 14 осуществляется восстановление параметров вывода по умолчанию. В строке 14 вызывается метод unsetf объектаcout. В качестве фактического параметра этого метода указывается флаг fixed класса ios, который описан в файле iostream.h . Таким образом в 15 строке вывод осуществляется с параметрами по умолчанию, так же как это осуществлялось в строке 7.

Вопрос 5

Универсальный вывод при программировании в среде Borland Pascal с использованием подпрограмм

Рассмотрим решение вышеприведенной задачи на языке программирования Паскаль с использованием подпрограммы, начиная с пункта 3.4.

3.4 Составление схемы алгоритма

3.5 Запись алгоритма на языке программирования Borland Pascal.

       Текст основной программы:

{Иванов Иван Иванович АТС-141 а:\lab4.pas 14.09.98}  {1}

program lab4;                                                                      {2}

uses Crt;                                                                              {3}

const ind=1; {1-вывод в файл с именем filename;

        2- на принтер;       3- на экран}                    {4}

filename='а:\out.pas';                                                          {5}

var u,i,r:real;                                                                        {6}

f:text; ch:char;                                                                     {7}

{$I а:\outpr.pas}                                                                  {8}

begin                                                                                   {9}

outpr(f,ind,filename);                                                         {10}

write('напряжение u(B)='); readln(u);                               {11}

write('ток i(A)=');                 readln(i);                               {12}

r:=u/i;                                                                                 {13}

writeln(f, 'Исходныеданные: u=', u:3:1, ',В i=', i:3:1',А')  {14}

writeln(f, 'Результаты: r=', r:3:1, ',Ом');                         {15}

close(f);                                                                             {16}

writeln('...');                                                                        {17}

writeln('Пpогpамма завершена. Нажмите любую клавишу'){18}

ch:=readkey;                                                                     {19}

end.                                                                                   {20}

      Текст подпрограммы вызываемой в основной программе:

{текст программы находится в файле a:\outpr.pas 14.09.2000}{21}

procedure outpr(var f:text;ind:integer;filename:string);      {22}

begin                                                                                  {23}

clrscr;                                                                                 {24}

             if ind=1 then assign(f,filename)                                       {25}

              else if ind=2 then assign(f,'prn')                           {26}

           else assigncrt(f);                                {27}

rewrite(f);                                                                            {28}