bsuir.info
БГУИР: Дистанционное и заочное обучение
(файловый архив)
Вход (быстрый)
Регистрация
Категории каталога
Другое [197]
Бухучет [16]
ВМиМОвЭ [4]
ОДМиТА [13]
ОЛОБД [17]
ООПиП [67]
ОС [19]
ПСОД [47]
Форма входа
Поиск
Статистика

Онлайн всего: 10
Гостей: 10
Пользователей: 0
Файловый архив
Файлы » ИСиТвЭ » ООПиП

ИСиТвЭ (д.), ООПиП, Практическая работа №1, вар.3, 2018
Подробности о скачивании 12.04.2018, 00:01
Министерство образования Республики Беларусь
Учреждение образования
БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ

Лабораторная работа №1
по предмету
объектно-ориентированное программирование

Выполнил:
студент гр. 672302
Климович К.А.
Проверил:
Салапура М.Н.

Минск 2018
Вариант №3

Проверить какие флаги потока вывода установлены и заменить попарно на левое выравнивание на правое выравнивание (и наоборот) убрать + перед числом, если установлен и установить, если сброшен.

Теория:
Простейший ввод и вывод

В С++ ввод и вывод данных производится потоками байт. Поток (последовательность байт) − это логическое устройство, которое выдает и принимает информацию от пользователя и связано с физическими устройствами ввода-вывода. При операциях ввода байты направляются от устройства в основную память. В операциях вывода – наоборот.

Имеется четыре потока (связанных с ними объекта), обеспечивающих ввод и вывод информации и определенных в заголовочном файле iostream.h:

cin − поток стандартного ввода;
cout − поток стандартного вывода;
cerr − поток стандартной ошибки;
clog − буферизируемый поток стандартных ошибок.

Объект cin

Для ввода информации с клавиатуры используется объект cin. Формат записи cin имеет следующий вид:

cin [>>имя_переменной];

Объект cin имеет некоторые недостатки. Необходимо, чтобы данные вводились в соответствии с форматом переменных, что не всегда может быть гарантировано.

Объект cout

Объект cout позволяет выводить информацию на стандартное устройство вывода – экран. Формат записи cout имеет следующий вид:

сout << data [ << data];

data − это переменные, константы, выражения или комбинации всех трех типов.

Простейший пример применения cout − это вывод, например, символьной строки:

cout << ”объектно-ориентированное программирование ”;
cout << ”программирование на С++”.

Надо помнить, что cout не выполняет автоматический переход на новую строку после вывода информации. Для перевода курсора на новую строку надо вставлять символ ’\n’ или манипулятор endl.

cout << ”объектно-ориентированное программирование \n”;
cout << ”программирование на С++”<<endl;

Для управления выводом информации используются манипуляторы.

Манипуляторы

Для форматирования выводимой информации используются манипуляторы. Описания для стандартных манипуляторов включены в файл iomanip.h

Манипуляторы dec, hex и oct используются для вывода числовой информации в десятичном, шестнадцатеричном или восьмеричном представлении. Применение их можно видеть на примере следующей программы:

#include <iostream>
using namespace std;
int main()
{ int a=0x11, b=4, // целые числа: шестнадцатеричное и десятичное
c=051, d=8, // восьмеричное и десятичное
i,j;
i=a+b;
j=c+d;
cout << i <<' ' <<hex << i <<' '<<oct << i <<' ' <<dec << i <<endl;
cout <<hex << j <<' ' << j <<' '<<dec << j <<' ' << oct << j <<endl;
return 0;
}

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

21 15 25 21

31 31 49 61

Манипуляторы изменяют значение некоторых переменных в объекте cout. Эти переменные называются флагами состояния. Когда объект cout посылает данные на экран, он проверяет эти флаги.

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

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{ int a=0x11;
double d=12.362;
cout << setw(4) << a << endl;
cout << setw(10) << setfill('*') << a << endl;
cout << setw(10 ) << setfill(' ') << setprecision(3) << d << endl;
return 0;
}

Результат работы программы:

17

********17

В приведенной программе использованы манипуляторы setw(), setfill(' ') и setprecision(). Синтаксис их показывает, что это функции. На самом деле это компоненты-функции (рассмотрим позже), позволяющие изменять флаги состояния объекта cout. Для их использования необходим заголовочный файл iomanip.h. Функция setw(4) обеспечивает вывод значения переменной a в четыре позиции (по умолчанию выравнивание вправо). Функция setfil(’символ’) заполняет пустые позиции символом. Функция setprecision(n) обеспечивает вывод числа с плавающей запятой с точностью до n знаков после запятой (при необходимости производится округление дробной части). Если при этом не установлен формат вывода с плавающей запятой, то точность указывает общее количество значащих цифр. Заданная по умолчанию точность − шесть цифр. Таким образом, функции имеют следующий формат:

setw(количество_позиций_для_вывода_числа)
setfil(символ_для_заполнения_пустых_позиций)
setprecision (точность_при_выводе_дробного_числа)

Наряду с перечисленными выше манипуляторами в С++ используются также манипуляторы setiosflags() и resetiosflags() для установки определенных глобальных флагов, используемых при вводе и выводе информации. На эти флаги ссылаются как на переменные состояния. Функция setiosflags() устанавливает указанные в ней флаги, а resetiosflags() сбрасывает (очищает) их. В приведенной ниже таблице показаны аргументы для этих функций.

Таблица 1
Значение Результат, если значение установлено
ios::skipws Игнорирование пустого пространство при вводе
ios::left Вывод с выравниванием слева
ios::right Вывод с выравниванием справа
ios::internal Заполнение пространства после знака или основания
системы счисления
ios::dec Вывод в десятичном формате
ios::oct Вывод в восьмеричном формате
ios::hex Вывод в шестнадцатеричном формате
ios::boolalpha Вывод булевых значений в виде TRUE и FALSE
ios::showbase Вывод основания системы счисления
ios::showpoint Вывод десятичной точки
ios::uppercase Вывод шестнадцатеричных чисел заглавными буквами
ios::showpos Вывод знака + перед положительными целыми числами
ios::scientific Использование формы вывода с плавающей запятой
ios::fixed Использование формы вывода с фиксированной запятой
ios::unitbuf Сброс после каждой операции вывода
ios::sktdio Сброс после каждого символа

Как видно из таблицы, флаги формата объявлены в классе ios.

Пример программы, в которой использованы манипуляторы:

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{ char s[]="БГУИР факультет КСиС";
cout << setw(30) << setiosflags(ios::right) << s << endl;
cout << setw(30) << setiosflags(ios::left) << s << endl;
}

Результат работы программы:
БГУИР факультет КСиС
БГУИР факультет КСиС
Наряду с манипуляторами setiosflags() и resetiosflags(), для того чтобы установить или сбросить некоторый флаг, могут быть использованы функции класса ios setf() или unsetf(). Например:

#include <iostream>
using namespace std;
#include <string.h>
int main()
{ char *s="Я изучаю С++";
cout.setf(ios::uppercase | ios::showbase | ios::hex);
cout << 88 << endl;
cout.unsetf(ios::uppercase);
cout << 88 << endl;
cout.unsetf(ios::uppercase | ios::showbase | ios::hex);
cout.setf(ios::dec);
int len = 10 + strlen(s);
cout.width(len);
cout << s << endl;
cout << 88 << " hello C++ " << 345.67 << endl;
return 0;
}

Результат работы программы:

0X58
0x58
Я изучаю С++
88 hello C++
Код:

#include <iostream>
#include <iomanip>
using namespace std;

void main()
{
int a;
cout << "Input number: ";
cin >> a; //вводим число
cout.setf(ios::showpos); //устанавливаем флаг вывода со знаком +
cout << a << endl;
cout.unsetf(ios::showpos); //убираем флаг вывода со знаком +
cout << a << endl;
cout.setf(ios::right); //устанавливаем флаг вывода с выравниванием справа
cout << a << endl;
cout.setf(ios::left); //устанавливаем флаг вывода с выравниванием слева
cout << a << endl;
system("pause");
Категория: ООПиП | Добавил: krlklim
Просмотров: 879 | Загрузок: 5
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]