lab6 (1080919), страница 2

Файл №1080919 lab6 (Готовые ЛР и ДЗ (ИУ5)) 2 страницаlab6 (1080919) страница 22018-01-11СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

int precision();

возвращает текущее значение точности представления при выводе вещественных чисел (типа float и double);

int precision(int n);

устанавливает по значению параметра n точность представле­ния вещественных чисел, возвращает предыдущее значение точности;

long setf(long);

устанавливает флаги в соответствии с тем, как они помечены в фактическом параметре. Возвращает предыдущую установку флагов;

long setf(long _setbits, long _field);

устанавливает флаги в соответствии со значениями пара­метров. Биты, помеченные в параметре _field, сбрасываются (очищаются), а затем устанавливаются те биты, которые от­мечены в параметре _setbits;

long unsetf(long);

сбрасываются (очищаются) все биты флагов, которые помече­ны в параметре. Функция возвращает предыдущее значение флагов;

int width();

возвращает установленное значение ширины поля;

int width(int);

устанавливает значение ширины поля в соответствии со зна­чением параметра;

Объяснять тонкости применения перечисленных компонентов класса ios нужно на примерах, причем понимание смысла и значи­мости отдельных компонент приходит только с учетом их взаимосвя­зей.

В следующей программе демонстрируются основные принципы форматирования с помощью компонентных функций класса ios. Отметим, что определение класса ios включается в программу автома­тически, так как файл iostream содержит описания классов, производных от класса ios.

//Р11-02.СРР - форматирование выводимой информации

#include <iostream>

using namespace std;

void main ()

{ char name[] = "Строка длиной 52 символа в поле шириной 58 позиций.";

cout << "\n\n";

cout.width(58); // Ширина поля вывода для потока cout

// Символ заполнения пустых позиций поля:

cout.fill('$' ) ;

// Первый вывод строки в поток cout:

cout << name << endl;

cout.width(58); // Убрать нельзя

// Заполнитель между знаком и значением:

cout.setf(ios::internal);

double dd = -33.4455;

cout <<dd << endl; // Вывод вещественного значения

cout.width(58); // Убрать нельзя

// Смена выравнивания:

cout.setf(ios::left,ios::adjustfield);

// Символ заполнения пустых позиций поля:

cout.fill('#') ;

// Второй вывод строки в поток cout:

cout << name << endl;

long nn = 90000; // Шестнадцатеричное значение 0x15f9C

// Смена основания счисления:

cout.setf(ios::hex,ios::basefield);

// Выводить признак основания счисления:

cout.setf(ios::showbase);

// Переход на верхний регистр:

cout.setf(ios::uppercase);

cout.width(58); // Убрать нельзя

cout << nn << endl; // Вывод целого значения типа long

cout.width (58); // Убрать нельзя

// Смена выравнивания:

cout.setf(ios::internal,ios::adjustfield);

// Символ заполнения пустых позиций поля:

cout.fill('$') ;

cout.unsetf(0x0200); //' Переход на нижний регистр

cout <<nn << endl; // Вывод целого значения типа long

}

Результат выполнения программы:

$$$$$$ Строка длиной 52 символа в поле шириной 58 позиций.

-$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$33.4455

Строка длиной 52 символа в поле шириной 58 позиций.######

0X15F90################################################# 0x$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$15f90

Прокомментируем программу и результаты. По умолчанию ши­рина поля вывода устанавливается равной длине принятого представ­ления выводимого значения. Поэтому действие функции width () однократное, и ее нужно при каждом выводе значения явно использо­вать, если умалчиваемое значение ширины поля вывода не устраивает программиста. Функция fill () устанавливает символ заполнения пустых позиций поля. При первом выводе строки name [ ] по умолча­нию установлено выравнивание по правому краю поля, и символы ' $' помещены слева от содержимого строки. Перед выводом значения вещественной переменной dd функцией setf() установлен флаг internal. Под его влиянием символ заполнения разместился между знаком ' - ' и числовым значением 33.4455. Ширина поля явно указа­на в 58 позиций.

Перед вторым выводом строки name[ ] "под влиянием" второго параметра (adjustfield) функции setf () сброшены флаги right и internal и явно установлен флаг left выравнивания по левому краю. Изменен символ заполнения пустых позиций ‘ # ‘. Перед выво­дом длинного целого числа nn установлено основание системы счис­ления (basefieid - сбрасывает флаги оснований счисления; hex -явно устанавливает шестнадцатеричное основание). Установлены флаги showbase и uppercase и ширина поля вывода.

Число 90000 выведено в шестнадцатеричном виде, признаком обозначено основание системы счисления, для изображения шестнадцатеричных цифр и признака основания используются прописные буквы. Так как при переходе к выравниванию по левому краю флаг internal оказался сброшенным, то символ заполнения ' # ' размещен не после признака основания счисления , а заполняет правую пустую часть поля. Заключительный вывод значения nn, равного 90000, выполнен с флагами internal и left. Для перехода на нижний регистр использована функция unsetf () с явным значением флага uppercase.

Манипуляторы. Несмотря на гибкость и большие возможности управления форматами с помощью компонентных функций класса ios, их применение достаточно громоздко. Более простой способ из­менения параметров и флагов форматирования обеспечивают мани­пуляторы, к возможностям которых мы перейдем.

Манипуляторами называют специальные функции, позволяющие программисту изменять состояния и флаги потока. Особенность ма­нипуляторов и их отличие от обычных функций состоит в том, что их имена (без параметров) и вызовы (с параметрами) можно использо­вать в качестве правого операнда для операции обмена (<< или >>). В качестве левого операнда в этом выражении, как обычно, используется поток (ссылка на поток), и именно на этот поток оказывает влияние манипулятор.

Например, манипулятор hex позволяет устанавливать шестнадцатеричное основание счисления выводимых в поток cout числовых значений. Выполнив последовательность операторов:

cout << "\пДесятичное число: "<< 15 << hex;

cout << "\пШестнадцатеричное представление: "<< 15;

получим на экране:

Десятичное число: 15

Шестнадцатеричное представление: 0xF

Как наглядно показывает результат, применение манипулятора hex изменило одно из свойств потока cout. Десятичная целая кон­станта 15 воспринимается и выводится на экран в шестнадцатеричном виде.

В качестве примера каждый манипулятор автоматически (без явного участия программиста) получает ссылку на тот поток, с которым он используется в выражении. После выполнения манипулятора он возвращает ссылку на тот же поток. Поэтому манипуляторы можно использовать в цепочке включений в поток или извлечений из потока. При выполнении манипулятора никаких обменов данными с потоком не происходит, но манипулятор изменяет состояние потока. Например, выполнив оператор с манипуляторами hex, oct, dec:

cout << 15 << hex << 15 << oct << 15 << dec<< 15;

в качестве результата получим:

150xF01715

Манипуляторы библиотеки классов ввода-вывода языка Си++ де­лятся на две группы: манипуляторы с параметрами и манипуляторы без параметров.

Манипуляторы без параметров:

dec - при вводе и выводе устанавливает флаг десятичной системы счисления;

hex - при вводе и выводе устанавливает флаг шестнадцатеричной системы счисления;

oct - при вводе и выводе устанавливает флаг восьмеричной си­стемы счисления;

ws - действует только при вводе и предусматривает извлечение из входного потока пробельных символов (пробел, знаки табуляции '\t и ' \v, символ перевода строки '\n', сим­вол возврата каретки '\r', символ перевода страни­цы \f);

endl - действует только при выводе, обеспечивает включение в выходной поток символа новой строки и сбрасывает буфер (выгружает содержимое) этого потока;

ends - действует только при выводе и обеспечивает включение в поток нулевого признака конца строки;

flush - действует только при выводе и очищает выходной поток, т.е. сбрасывает его буфер (выгружает содержимое буфера).

left - вывод значения с левым выравниванием (прижать к левому краю поля);

right - вывод значения с правым выравниванием (это значение устанавливается по умолчанию);

fixed - для вещественных чисел (типов float, double) использовать представление в формате с фиксированной точкой, причем количество цифр дробной части определяется заданной точностью.

Обратите внимание, что не все перечисленные манипуляторы дей­ствуют как на входные, так и на выходные потоки, ws действует толь­ко при вводе; endl, ends, flush - только при выводе.

Манипуляторы dec, hex, oct, задающие основание системы счис­ления, изменяют состояние потока, и это изменение остается в силе до следующего явного изменения.

Манипулятор endl рекомендуется использовать при каждом вы­воде, который должен быть незамедлительно воспринят пользовате­лем. Например, его использование просто необходимо в таком операторе:

cout << "Ждите! Идет набор статистики." << endl ;

При отсутствии endl здесь нельзя гарантировать, что сообщение пользователю не останется в буфере потока cout до окончания набо­ра статистики.

Рекомендуется с помощью манипулятора flush сбрасывать буфер выходного потока при выводе на экран подсказки до последующего ввода информации:

cout << "Введите название файла:" << flush;

cin >> fileName; // Здесь fileName - символьный массив



Манипуляторы с параметрами определены в файле iomanip:

setbase(int n);

устанавливает основание (n) системы счисления. Значениями параметра n могут быть: 8, 10 или 16.

resetiosflags(long L)

сбрасывает (очищает) отдельные флаги состояния потоков ввода и вывода на основе битового представления значения параметра L (сбрасывает флаги в соответствии с единичными битами);

setiosflags(long L)

устанавливает отдельные флаги состояния (форматные биты) потоков ввода-вывода на основе битового представления зна­чения параметрах (устанавливаются флаги в соответствии с единичными битами параметра);

setfill(int n)

значение параметра n в дальнейшем используется в качестве кода символа-заполнителя, который помещается в незанятых позициях поля при вводе значения. (См. компонент x_fill класса ios.);

setprecision(int n)

определяет с помощью значения параметра n точность пред­ставления вещественных чисел, т.е. максимальное количество цифр дробной части числа при вводе и выводе. (См. компо­нент x_precision класса ios.);

setw(int n)

значение параметра n задает минимальную ширину поля вы­вода. (См. компонент x_width класса ios.)

С помощью манипуляторов можно управлять представлением ин­формации в выходном потоке. Например, манипулятор setw(int n) позволит выделить для числового значения поле фиксированной ши­рины, что удобно при печати таблиц.

Характеристики

Тип файла
Документ
Размер
128,5 Kb
Тип материала
Высшее учебное заведение

Список файлов лабораторной работы

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6529
Авторов
на СтудИзбе
301
Средний доход
с одного платного файла
Обучение Подробнее