Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Вывод ровных столбцов матрицыРассмотрим одну тонкость, связанную с выводом матриц, да и всех прочих таблиц. Изменим немного инициализацию матрицы:
const int m = 4, n = 5; int matrix[m][n] = { {1, 20, 50, 40, 3}, {5, 68, 7, 4, 60}, {1, 2, 57, 4, 3}, {9, 8, 7, 6, 0}, };
Затем выведем её на экран при помощи созданного выше кода и увидим, что столбцы матрицы окажутся неровными:
Эта проблема возникает из-за того, что некоторые элементы матрицы занимают одну позицию, а другие – две. Консольные шрифты являются моноширинными (ширина каждого символа одна и та же), поэтому для того, чтобы столбцы выводились ровно, нужно сделать так, чтобы ширина поля как-то дополнялась пробелами, если символ всего один. Для этого существуют так называемые модификаторы вывода. Некоторые модификаторы называются флагами форматирования. В настоящий момент нас интересует модификатор, позволяющий задать ширину поля, которое отводится под выводимое значение. Он задаёт минимальную ширину поля, в которое выводится значение.
for (int i=0; i<m; i++) { for (int j=0; j<n; j++) { cout.width(2); cout << matrix[i][j] << " "; } cout << endl; }
По умолчанию пустые клетки заполняются пробелами, однако с помощью функции fill() можно задать любой другой:
for (int i=0; i<m; i++) { for (int j=0; j<n; j++) { cout.fill('*'); cout.width(2); cout << matrix[i][j] << " "; } cout << endl; }
Наконец, выравнивание ячеек можно задать по левому краю:
for (int i=0; i<m; i++) { for (int j=0; j<n; j++) { cout.setf(ios::left); cout.fill('*'); cout.width(2); cout << matrix[i][j] << " "; } cout << endl; }
|