
- •Часть 2
- •18 Сентября 2012 г., протокол № 1
- •Предисловие
- •Глава 6 простые типы данных § 1. Целый тип
- •1.1. Битовые операции
- •Использование битовых операций
- •1.3. Упаковка и распаковка информации
- •§ 2. Логический тип
- •§ 3. Символьный тип
- •§ 4. Вещественный тип
- •§ 5. Преобразование типов
- •Преобразование типов в выражениях
- •Преобразование типов при присваивании
- •Г л а в а 7 введение в указатели
- •§ 1. Понятие указателя. Операции разыменования и разадресации
- •§ 2. Инициализация и присваивание указателей
- •§ 3. Распределение динамической памяти
- •Операция new
- •Операция delete
- •§ 4. Параметры-указатели. Функция ввода scanf
- •Упражнения, тесты
- •Г л а в а 8 одномерные массивы, указатели и функции
- •§ 1. Связь указателей и одномерных массивов. Передача массива в качестве параметра функции
- •§ 2. Сортировка одномерных массивов
- •§ 3. Сортировка массива по параметру числа
- •§ 4. Сортировка массива выбором.
- •§ 5. Сортировка массива вставками
- •§ 6. Динамические одномерные массивы
- •6.1. Порядок работы с динамическим массивом
- •6.2. Работа с динамическим массивом в классе. Деструктор
- •§ 7. Введение в строки
- •Глава 9 мАтрицы
- •§ 1. Объявление, способы определения матриц
- •§ 2. Вывод матриц
- •§ 3. Типы алгоритмов
- •3.1. Построчная обработка
- •Обработка матрицы по столбцам
- •3.3. Обработка всей матрицы
- •3.4. Обработка части матрицы
- •Преобразование матрицы
- •Построение матриц
- •§ 4. Матрицы, указатели и функции
- •Упражнения и тесты
- •Обработка матрицы по столбцам.
- •Список реКоМендуемой литературы
- •Сборники задач по программированию
- •Оглавление
- •Методы программирования:
- •Лекции, примеры, тесты
- •Пособие для студентов механико-математического факультета
- •В двух частях
- •Часть 2
§ 2. Вывод матриц
Пример 4a. Вывод матрицы можно выполнить, используя управление курсором. Для этого в примере 1b достаточно заменить cin на cout.
Пример 4b. Кроме этого можно предложить следующий вариант вывода:
for (int i=0; i<n; i++)
{ printf("\n"); /* Перешли на новую строку экрана */
for (int j=0; j<m; j++) printf ("%5d", A[i][j]); }
При таком выводе числа столбцов будут выровнены благодаря наличию формата %5d, т. е. независимо от количества цифр в числах матрицы они будут выводиться друг под другом. В этом фрагменте важно место оператора printf("\n"). Если символ “\n” записать во внутреннем цикле printf ("\n%5d", A[i][j]); то в каждой строке экрана будет выводиться по одному числу. Необходимо также обратить внимание на расстановку фигурных скобок. Во внешнем цикле for в его теле два оператора: переход на новую строку и внутренний цикл for. Поэтому соответствующая пара скобок обязательна. Во внутреннем цикле один оператор вывода printf, поэтому фигурные скобки для него отсутствуют.
Иногда для наглядности целесообразно элементы матрицы в зависимости от условия выводить разным цветом.
Пример 5. Положительные числа вывести цветом C1 на фоне C2, а отрицательные и нулевые — наоборот, цветом С2 на фоне С1, где С1 и С2 — целые числа, определяющие цвет.
void MyColors (int C1, int C2)
{ textcolor(C1); textbackground(C2); }
int main()
{ const n=4,m=6; float A[n][m]; randomize();
for ( int i=0; i<n; i++)
for ( int j=0; j<m; j++)
A[i][j]=(random(50)-40)/100. + random(5);
for ( int i=0; i<n; i++)
{ cprintf(“\n\r”);
for ( int j=0; j<m; j++)
{ // Установка цветов
if (A[i][j]>0) MyColors(2,15); else MyColors(15,2);
cprintf ("%7.2f", A[i][j]); }
} getch(); return 0; }
Заметим, что при “цветном” выводе с помощью cprintf для перехода в начало следующей строки недостаточно одного символа ‘\n’, а надо использовать и управляющий символ ‘\r’. Стандартные функции textcolor и textbackground устанавливают цвет выводимых символов и цвет фона в текстовом режиме. Для “цветного” вывода вместо printf или cout необходимо использовать функцию cprintf.
Для удобства анализа результатов часто требуется одновременно выводить несколько матриц, матрицу и вектор и т. п. При этом они должны располагаться в определённом порядке и в указанном месте.
Пример 6. Пусть заданы константы n, m и k, матрицы A[n][m] и D[n][k] и одномерный массив (вектор) b[n]. Слева выведем матрицу A цветом С1, далее, правее — одномерный массив b в столбец по одному элементу цветом С2 и, наконец, ещё правее — матрицу D цветом C3 в обратном порядке, т. е. сначала (n–1)–ю строку, затем (n–2)–ю и так далее, 0–ю строку.
void MyC(int C) { textcolor(C); }
int main() { textbackground(1); clrscr();
const n=4, m=6, k=5; float b[n]; int D[n][k], A[n][m]; randomize();
for ( int i=0; i<n; i++) { b[i]=random(m+k)/10.;
/* Можно по–другому: b[i]=(float)i / 10; */
for ( int j=0; j<m; j++) A[i][j]= random(50)-100;
// Все элементы отрицательные
for ( int j=0; j<k; j++) D[i][j]= random(500)+200;
// Все элементы положительные
}
MyC(10); cprintf(" Matrix A ");
MyC(11); cprintf(" Vector b");
MyC(15); cprintf(" Matrix D\n");
for ( int i=0; i<n; i++) { cout<<endl;
/* Вывод i–й строки матрицы A */
MyC(10); for ( int j=0; j<m; j++) cprintf ("%4d", A[i][j]);
MyC(11); /* Вывод одного i–го элемента вектора b */
cprintf (" %6.1f ", b[i]);
/* Вывод строк матрицы D в обратном порядке */
MyC(15); for ( int j=0; j<k; j++)
cprintf ("%5d", D[n-1-i][j]); }
getch(); return 0;
}
Упражнение. Написать второй вариант этой же программы, в которой используется функция gotoxy. Сначала выводим всю матрицу A, затем возвращаемся на первую строку и выводим в столбец вектор b и, наконец, в обратном порядке выводим матрицу D.