Флаги и форматирующие методы
ДО ЛАБОРАТОРНИХ ТА ПРАКТИЧНИХ
РОБІТ З ДИСЦИПЛІНИ
"Програмування"
Харків 2007
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ХАРКІВСЬКИЙ НАЦІОНАЛЬНИЙ
УНІВЕРСИТЕТ РАДІОЕЛЕКТРОНІКИ
МЕТОДИЧНІ ВКАЗІВКИ
ДО ЛАБОРАТОРНИХ ТА ПРАКТИЧНИХ
РОБІТ З ДИСЦИПЛІНИ
"програмування"
для студентів денної форми навчання спеціальності
_______________________
Відповідальний за випуск Путятін Є.П.
ЗАТВЕРДЖЕНО
кафедрою інформатики.
Протокол № від
Харків 2007
Методичні вказівки до лабораторних та практичних робіт з дисципліни “Програмування” для cтудентів денної форми навчання спеціальності ___________ /Упоряд.: В.А. Любченко, О.В. Яковлева, Д.О. Руденко - Харкiв: ХНУРЕ, 2007. - ___ с.
Упорядники: В.А. Любченко
О.В. Яковлева
Д.О. Руденко
Рецензент С.С. Танянський, доц. каф. ЕОМ
ЗМІСТ
ВСТУП.. 5
1 Директиви препроцесора. Багатомодульне програмування. 6
2 Потокові класи мови С++. 17
3 Файлові потоки мови С.. 41
4 Перегрузка операцій. 55
5 Основи розробки класів у мові С++. 60
6 Наслідування, поліморфізм, інкапсуляция. 79
РЕКОМЕНДОВАНА ЛІТЕРАТУРА.. 105
ВСТУП
В наш час персональні комп’ютери мають широке застосування в pізноманітних галузях людської діяльності. Все це неможливо без знань мов програмування і тому таку актуальність надбав лозунг “Програмування – друга грамотність”.
Головною метою даних методичних вказівок є допомога студентам в оволодінні практичними навичками у підготовці та розв’язанні задач найбільш розповсюдженою мовою програмування С++, а також придбанні початкових знань в складній сучасній системі програмування VISUAL C ++.
Цикл лабораторних робіт передбачає активну самостійну роботу студентів. Кожна робота виконується студентом особисто, згідно з варіантом завдання, номер якого повиненвідповідати порядковому номеру студента в журналі академгрупи.
Для виконання роботи необхідно: опрацювати теоретичний матеріал, дати відповіді на контрольні запитання, які надаються в цих методичних вказівках, розробити схему алгоритму, скласти програму свого варіанту завдання та розв’язати його на персональному комп’ютері (ПК), оформити звіт і захистити його.
Звіт повинен мати: номер лабораторної роботи, назву та мету роботи, завдання, схему алгоритму (в деяких випадках – короткий опис алгоритму), роздрук-лістинг тексту програми та результати її розв’язання, аналіз одержаних результатів і висновок щодо роботи.
Правила техніки безпеки забороняють студентам вмикати або вимикати ПК, розкривати будь-яке обладнання, знімати захисні щити, а також доторкатись до струмопровідних частин обладнання.
Директиви препроцесора. Багатомодульне програмування
Мета роботи
Отримати практичні навички застосування директив препроцесора, насамперед у створенні макросів, умовної компіляції, створенні багатомодульного проекту.
1.2 Вказівки щодо організації самостійної роботи студентів
Директивы препроцессора начинаются с символа “#” и выполняются во время 1-й фазы компиляции. Результат выполнения затем компилируется, но может быть выведен в stdout или в файл при помощи опций компилятора.
Директива #include
Эта директива предписывает препроцессору поместить на ее место содержимое другого файла. Синтаксис директивы
#include <имя_файла>
или
#include "имя_файла".
Если имя_файла не является полным именем, в первом случае поиск происходит только в пределах специфицированных каталогов включаемых файлов. Во втором случае сначала просматривается текущий каталог.
Директива #define
Директива #define определяет подстановку в тексте программы. Она используется для определения:
- символических констант:
#define имя текст__подстановки
(все вхождения имени заменяются на текст подстановки);
- макросов, которые выглядят как функции, но реализуются подстановкой их текста в текст программы:
#define имя (параметры текст_полстановки;
- символов, управляющих условной компиляцией. Они используются вместе с директивами #i fdef и #i fndef. Формат:
#define имя Примеры:
#define VERSION I
#define VASIA "Василий Иванович"
#define MAX(х,у) ((x)>(y) ? (x) : (y))
Имена рекомендуется записывать прописными буквами, чтобы зрительно отличать их от имен переменных и функций. Параметры макроса используются при макроподстановке, например, если в тексте программы используется вызов макроса y = MAX(suml,. sum2); он будет заменен на
у = ((suml)>(sum2)? (suml):(sum2));
Отсутствие круглых скобок может привести к неправильному порядку вычисления, поскольку препроцессор не оценивает вставляемый текст с точки зрения синтаксиса. Например, если к макросу #deflne sqr(x) (х*х) обратиться как sqr(y+l), в результате подстановки получится выражение (у+1*у+1).
Директивы #undef удаляет объявленную макроподстановку
Условная компиляция
Можно избирательно компилировать части файла. Синтаксис директивы условной компиляции следующий:
#if выражение_1
// эта часть файла компилируется, если выражение_1 истинно
#elif выражение_2
// эта часть файла компилируется, если выражение_1 ложно, а
// выражение_2 истинно
...
#else
// эта часть файла компилируется, когда все выражения ложны
#endif
Директивы #elif и #else могут быть опущены.
Пример. Простое исключение секции кода.
#if 0
// исключенная секция кода
#endif
Значения выражений в директивах #if и #elif должны быть целыми константами. В выражениях нельзя использовать операцию sizeof.
В качестве выражения в директивах #if и #elif можно использовать оператор defined . Он проверяет, был ли определен макрос.
Пример. Выбор между секциями кода.
#if defined(DEBUGGING)
space = 1000;
#else
space = 10;
#endif
Директивы #ifdef и #ifndef являются сокращением для директив
#if defined и #if !defined соответственно.
Пример. Предотвращение многократной трансляции заголовочного файла sample.h.
#ifndef __SAMPLE_H__
#define __SAMPLE_H__
// здесь содержание файла
#endif
Если файл sample.h окажется многократно включенным в исходный код программы, то при таком “обрамлении” его содержимого будет оттранслировано лишь первое вхождение заголовочного файла.
Замечание. В Visual C++ та же цель достигается применением директивы
#pragma once.
Директива #error
Директива #error вызывает во время компиляции сообщение об ошибке.
#error сообщение_об_ошибке
Пример. Обеспечение правильности параметров компиляции.
#if !defined(__cplusplus)
#error Этот файл должен компилироваться в режиме С++
#endif
Сообщение может содержать идентификаторы макросов, которые будут расширены препроцессором. Директива обычно применяется, когда не был определен необходимый макрос.
Директива #line
С помощью директивы #line можно изменить внутренний счетчик строк компилятора и имя компилируемого файла. Она имеет следующий вид
#line номер_строки ["имя_файла"]
Директива #pragma
Директива #pragma позволяет влиять на процесс и результат компиляции. Вот несколько опций для компилятора Visual C++.
§ #pragma hdrstop — предписывает компилятору не включать дальнейшую информацию в прекомпилируемый заголовок;
§ #pragma once — предписывает компилятору лишь однажды включать данный заголовочный файл в программу;
#pragma warning — выборочно разрешает или подавляет предупреждающие сообщения.
Порядок виконання роботи
Вивчити директиви препроцесорної обробки. Ознайомитися з правилами створювання макросами та класичними помилками програмістів-початківців. Перед початком виконання лабораторної роботи розібрати наведений приклад. Особливу увагу приділити механізму підключення модулю до основної програми.
1.4 Контрольні запитання та завдання
Завдання
Ввід-вивід елементів масиву та вирішення завдання оформити у вигляді макросів та розмістити їх в окремому модулі.
1.6 Варіанти завдань
Вариант 1
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) сумму отрицательных элементов массива;
2) произведение элементов массива, расположенных между максимальным и минимальным элементами.
Упорядочить элементы массива по возрастанию.
Вариант 2
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) сумму положительных элементов массива;
2) произведение элементов массива, расположенных между максимальным по модулю и минимальным по модулю элементами.
Упорядочить элементы массива по убыванию.
Вариант 3
В одномерном массиве, состоящем из целых элементов, вычислить:
1) произведение элементов массива с четными номерами;
2) сумму элементов массива, расположенных между первым и последним нулевыми элементами.
Преобразовать массив таким образом, чтобы сначала располагались все положительные элементы, а потом — все отрицательные (элементы, равные 0, считать положительными).
Вариант 4
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) сумму элементов массива с нечетными номерами;
2) сумму элементов массива, расположенных между первым и последним отрицательными элементами.
Сжать массив, удалив из него все элементы, модуль которых не превышает 1. Освободившиеся в конце массива элементы заполнить нулями.
Вариант 5
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) максимальный элемент массива;
2) сумму элементов массива, расположенных до последнего положительного элемента.
Сжать массив, удалив из него все элементы, модуль которых находится в интервале [ , ]. Освободившиеся в конце массива элементы заполнить нулями.
Вариант 6
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) минимальный элемент массива;
2) сумму элементов массива, расположенных между первым и последним положительными элементами.
Преобразовать массив таким образом, чтобы сначала располагались все элементы, равные нулю, а потом — все остальные.
Вариант7
В одномерном массиве, состоящем из целых элементов, вычислить:
1) номер максимального элемента массива;
2) произведение элементов массива, расположенных между первым и вторым нулевыми элементами.
Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в нечетных позициях, а во второй половине — элементы, стоявшие в четных позициях.
Вариант 8
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) номер минимального элемента массива;
2) сумму элементов массива, расположенных между первым и вторым отрицательными элементами.
Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1, а потом — все остальные.
Вариант 9
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) максимальный по модулю элемент массива;
2) сумму элементов массива, расположенных между первым и вторым положительными элементами.
Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных.
Вариант 10
В одномерном массиве, состоящем из целых элементов, вычислить:
1) минимальный по модулю элемент массива;
2) сумму модулей элементов массива, расположенных после первого элемента, равного нулю.
Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в четных позициях, а во второй половине — элементы, стоявшие в нечетных позициях.
Вариант 11
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) номер минимального по модулю элемента массива;
2) сумму модулей элементов массива, расположенных после первого отрицательного элемента.
Сжать массив, удалив из него все элементы, величина которых находится в интервале [ , ]. Освободившиеся в конце массива элементы заполнить нулями.
Вариант 12
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) номер максимального по модулю элемента массива;
2) сумму элементов массива, расположенных после первого положительного элемента.
Преобразовать массив таким образом, чтобы сначала располагались все элементы, целая часть которых лежит в интервале [ , ], а потом — все остальные.
Вариант 13
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) количество элементов массива, лежащих в диапазоне от до ;
2) сумму элементов массива, расположенных после максимального элемента. Упорядочить элементы массива по убыванию модулей элементов.
Вариант 14
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) количество элементов массива, равных 0;
2) сумму элементов массива, расположенных после минимального элемента.
Упорядочить элементы массива по возрастанию модулей элементов.
Вариант 15
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) количество элементов массива, больших С;
2) произведение элементов массива, расположенных после максимального по модулю элемента.
Преобразовать массив таким образом, чтобы сначала располагались все отрицательные элементы, а потом — все положительные (элементы, равные 0, считать положительными).
Вариант 16
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) количество отрицательных элементов массива;
2) сумму модулей элементов массива, расположенных после минимального по модулю элемента.
Заменить все отрицательные элементы массива их квадратами и упорядочить элементы массива по возрастанию.
Вариант 17
В одномерном массиве, состоящем из целых элементов, вычислить:
1) количество положительных элементов массива;
2) сумму элементов массива, расположенных после последнего элемента, равного нулю.
Преобразовать массив таким образом, чтобы сначала располагались все элементы, целая часть которых не превышает 1, а потом — все остальные.
Вариант 18
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) количество элементов массива, меньших ;
2) сумму целых частей элементов массива, расположенных после последнего отрицательного элемента.
Преобразовать массив таким образом, чтобы сначала располагались все элементы, отличающиеся от максимального не более чем на 20%, а потом — все остальные.
Вариант 19
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) произведение отрицательных элементов массива;
2) сумму положительных элементов массива, расположенных до максимального элемента.
Изменить порядок следования элементов в массиве на обратный.
Вариант 20
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) произведение положительных элементов массива;
2) сумму элементов массива, расположенных до минимального элемента.
Упорядочить по возрастанию отдельно элементы, стоящие на четных местах, и элементы, стоящие на нечетных местах.
Вариант 21
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) сумму отрицательных элементов массива;
2) количество элементов массива больше первого элемента;
Изменить порядок следования элементов в массиве на обратный.
Вариант 22
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) обнулить все отрицательные элементы массива расположенные на четных местах;
2) подсчитать количество ненулевых элементов массива;
Отсортировать все ненулевые элементы по возрастанию.
Вариант 23
В одномерном массиве, состоящем из целых элементов, вычислить:
1) максимальный по модулю элемент массива;
2) сумму всех элементов массива, расположенных после максимального по модулю.
Отсортировать элементы массива стоящие после максимального по модулю.
Вариант 24
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) номер максимального элемента массива;
2) произведение элементов массива, расположенных между первым и вторым отрицательными элементами.
Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 5, а потом — все остальные.
Вариант 25
В одномерном массиве, состоящем из целых элементов, вычислить:
1) сумму положительных элементов массива;
2) произведение элементов массива, расположенных между первым четным и последним нечетным элементами.
Упорядочить элементы массива по возрастанию.
Вариант 26
В одномерном массиве, состоящем из целых элементов, вычислить:
1) произведение положительных элементов массива;
2) сумму элементов массива, расположенных между максимальным по модулю и последним четным элементами.
Упорядочить элементы массива по убыванию.
Вариант 27
В одномерном массиве, состоящем из целых элементов, вычислить:
1) произведение элементов массива с четными номерами;
2) сумму элементов массива, расположенных между первым и последним нулевыми элементами.
Преобразовать массив таким образом, чтобы сначала располагались все положительные элементы, а потом — все отрицательные (элементы, равные 0, считать положительными).
Вариант 28
В одномерном массиве, состоящем из целых элементов, вычислить:
1) номер максимального по модулю элемента массива;
2) произведение элементов массива, расположенных между первым и последним нулевыми элементами.
Переставить максимальный по модулю элемент с первым.
Вариант 29
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) минимальный положительный элемент массива;
2) сумму элементов массива, расположенных между первым положительным и последним отрицательным элементами.
Переставить местами минимальный положительный элимент с последним отрицательным.
Вариант 30
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) количество элементов массива, равных 0;
2) количество элементов массива, расположенных после минимального элемента.
Упорядочить элементы массива по убыванию модулей элементов.
Контрольний приклад
В матриці найти суму першого рядка, відсортувати другий рядок за збільшенням, а третій за зменшенням. Оформити кожну підзадачу у вигляді макросу.
Розв’язок
Главный файл (содержащий функцию main)
#include <iostream>
using namespace std;
#include "myHeader.h"
#define N 3
#define M 5
int main()
{
int mas[N][M]={9,3,6,23,21,
4,5,6,4,51,
4,6,24,23,24};
cout<<"Nachalnije dannie\n";
outmatr(mas,N,M);
#define cmp >
# if defined (cmp)
sortmas(mas[1],M);
#else
cout<<"error";
#endif
#define MES "sort \">\" 2-ja stroka"
cout<<endl;
outmas(mas[1],5);
#define cmp <
#define MES "sort \"<\" 3-ja stroka"
# if defined (cmp)
sortmas(mas[2],M);
#else
cout<<"error";
#endif
cout<<endl;
outmas(mas[2],5);
cout<<endl;
int sum;
SUM(mas[0],5,sum);
cout<<"Summa 1-oj stroki = "<<sum<<endl;
cout<<"Rezultat:"<<endl;
outmatr(mas,N,M);
cin.get();
return 0;
}
Файл “myHeader.h”
//---------------------------------------------------------------------------
#ifndef _MY_HEADER_
#define _MY_HEADER_
#define MES "ne sort"
#define cmp ==
#define sortmas(mas,n) { for (int i=0;i<n;i++) \
for (int j=0;j<n-i-1;j++) \
if(mas[j] cmp mas[j+1]) \
{ mas[j]=mas[j]+mas[j+1]; \
mas[j+1]=mas[j]-mas[j+1]; \
mas[j]=mas[j]-mas[j+1];}; \
}
#define outmas(mas,n) { for (int i=0;i<n;i++) cout<<mas[i]<<"\t"; \
cout<<'\t'<<MES<<endl;}
#define outmatr(mas,n,m) { for (int i=0;i<n;cout<<endl,i++)\
for (int j=0;j<m;j++)\
cout<<mas[i][j]<<"\t"; \
}
//---------------------------------------------------------------------------
#define SUM(mas,n,Sum) { Sum =0; \
for (int j=0;j<n;j++)\
Sum+=mas[j]; \
}
#endif
2 Потокові класи мови С++
Мета роботи
2.2 Вказівки щодо організації самостійної роботи студентів
Если формат вывода, используемый по умолчанию, не устраивает программиста, он может скорректировать его с помощью методов классов ввода/вывода, флагов форматирования и так называемых манипуляторов. Об этом рассказывается далее.
Форматирование данных
В потоковых классах форматирование выполняется тремя способами — с помощью флагов, манипуляторов и форматирующих методов.
Флаги и форматирующие методы
Флаги представляют собой отдельные биты, объединенные в поле x_f1ags типа long класса ios. Флаги перечислены в табл. 10.1.
Таблица 10.1.Флаги форматирования
Флаг | Положение | Умолчание | Описание действия при установленном бите |
skipws | 0x0001 | + | При извлечении пробельные символы игнорируются |
left | 0x0002 | Выравнивание по левому краю поля | |
right | 0x0004 | + | Выравнивание по правому краю поля |
internal | 0x0008 | Знак числа выводится по левому краю, число — по правому. Промежуток заполняется символами x_fill по умолчанию пробелами | |
dec | 0x0010 | + | Десятичная система счисления |
oct | 0x0020 | Восьмеричная система счисления | |
hex | 0x0040 | Шестнадцатеричная система счисления | |
showbase | 0x0080 | Выводится основание системы счисления (Ох для шестнадцатеричных чисел и 0 для восьмеричных) | |
showpoint | 0x0100 | При выводе вещественных чисел печатать десятичную точку и дробную часть | |
uppercase | 0x0200 | При выводе использовать символы верхнего регистра | |
showpos | 0x0400 | Печатать знак при выводе положительных чисел | |
scientific | 0x0800 | Печатать вещественные числа в форме мантиссы с порядком | |
fixed | 0x1000 | Печатать вещественные числа в форме с фиксированной точкой (точность определяется полем х precision, см. ниже) | |
unitbuf | 0x2000 | Выгружать буферы всех потоков после каждого вывода | |
stdio | 0x4000 | Выгружать буферы потоков stdout и stderr после каждого вывода |
ПРИМЕЧАНИЕ
Флаги (left, right и internal), (dec, oct и hex), а также (scientific и fixed) взаимно исключают друг друга, то есть в каждый момент может быть установлен только один флаг из каждой группы.
Для управления флагами в классе ios есть методы flags, setf и unsetf:
long ios::f lags(); | — возвращает текущие флаги потока; |
long ios::flags (long); | — присваивает флагам значение параметра; |
long ios::setf (long, long); | — присваивает флагам, биты которых установлены в первом параметре, значение соответствующих битов второго параметра; |
long ios::setf(long); | — устанавливает флаги, биты которых установлены в параметре; |
long ios::unsetf(long); | — сбрасывает флаги, биты которых установлены в параметре. |
Все функции возвращают прежние флаги потока.
Например, если вначале задать выравнивание по правому полю:
cout.setf(ios:: right);
а затем необходимо вывести информацию выровненную по левому полю, то вначале необходимо сбросить флаг выравнивания потока вывода по правому полю:
cout.unsetf(ios::right);
а затем установить флаг выравнивания по левому полю
cout.setf(ios::left);
Кроме флагов, для форматирования используются следующие поля класса ios:
int x_width | — минимальная ширина поля вывода; |
int x_precision | — количество цифр в дробной части при выводе вещественных чисел с фиксированной точкой или общее количество значащих цифр при выводе в форме с мантиссой и порядком; |
int x_fill | — символ заполнения поля вывода. |
Для управления этими полями используются методы width, precision и fill:
int ios::width() | — возвращает значение ширины поля вывода; |
int ios::width (int) | — устанавливает ширину поля вывода в соответствии со значением параметра; |
int ios::precision() | — возвращает значение точности представления при выводе вещественных чисел; |
int ios::precision (int) | — устанавливает значение точности представления при выводе вещественных чисел, возвращает старое значение точности; |
char fill() | — возвращает текущий символ заполнения; |
char fill (char) | — устанавливает значение текущего символа заполнения, возвращает старое значение символа. |
Перед установкой некоторых флагов требуется сбросить флаги, которые не мо гут быть установлены одновременно с ними. Для этого удобно использовать вто рым параметром метода setf перечисленные ниже статические константы класса ios:
adjustfield (left | right | internal)
basefield (dec | oct | hex)
floatfield (scientific | fixed)
Пример форматирования при выводе с помощью флагов и методов:
Пусть в массиве структур храниться информация об успеваемости студентов, которую необходимо вывести на экран в удобном для пользователя виде.
#include <iostream>
using namespace std;
const int n=2;
//Создадим структуру для хранения информации о студентах с
//двумя полями ФИО и средний бал успеваимости
struct Tstudent
{
char FIO[20];
float bal;
}StudetnPotok[n]={"Petrov",3.5,"Sidorov",5.0/3};
int main (int argc, char * const argv[])
{
//Следующий фрагмент кода иллюстрирует форматирование потока вывода
for(int i=0;i<n;i++)
{
//Форматирование с помощью методов потока
cout.unsetf(ios::right);//сбрасывваем флаг потока выравнивание по правому
//полю(это необходимо сделать обязательно если до э
//того флаг был установлен)
cout.setf(ios::left);//установить флаг выравнивания по левому полю
cout.fill('.');// задаем символ - заполнитель
cout.setf(ios::fixed);//установить флаг вывода числа с фиксированной точкой
// следующие две строчки устанавливают формат вывода чисел в виде
// мантиссы с порядком
// cout.setf(ios::scientific);//установить флаг вывода числа в формате
//мантиссы с порядком
// cout.unsetf(ios::fixed);//сбрасывает флаг вывода числа с фиксированной
//точкой (это необходимо сделать обязательно если до этого флаг был
//установлен)
cout.precision(3);//задаем точность (количество чисел после
//запятой или количество значащих чисел)
cout.width(15); //задать поле вывода под поле 20 символов.
//параметр необходимо указывать каждый раз для вывода
cout <<StudetnPotok[i].FIO;//выводим фамилию
cout.setf(ios::right);//задаем вывод по правому полю
cout.width(10);//задаем количество символов под вывод числа
cout.fill('_');//меняем символ заполнитель
cout<<StudetnPotok[i].bal;
cout<<'\n';
}
cin.get();
return 1;
}
//Этот фрагмент выведет на экран следующий результат:
Petrov........._____3.500
Sidorov........_____1.667
Манипуляторы
Манипуляторами называются функции, которые можно включать в цепочку операций помещения и извлечения для форматирования данных. Манипуляторы делятся на простые, не требующие указания аргументов, и параметризованные. Пользоваться манипуляторами более удобно, чем методами установки флагов форматирования.
Простые манипуляторы
Ниже перечислены манипуляторы, не требующие указания аргументов.
dec | — устанавливает при вводе и выводе флаг десятичной системы счисления; |
oct | — устанавливает при вводе и выводе флаг восьмеричной системы счисления; |
hex | — устанавливает при вводе и выводе флаг шестнадцатеричной системы счисления; |
ws | — устанавливает при вводе извлечение пробельных символов; |
endl | — при выводе включает в поток символ новой строки и выгружает буфер; |
ends | — при выводе включает в поток нулевой символ; |
flush | — при выводе выгружает буфер. |
Изменения системы счисления действуют до следующего явного изменения.
Пример:
cout << 13<< hex<< ' '<< 13 << oct<< ' '<< 13 << endl;
Если другие значения флагов установлены по умолчанию, будет выведено:
13 d 15