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}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.