Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Аленский. лекции по проге.doc
Скачиваний:
19
Добавлен:
11.11.2018
Размер:
1.35 Mб
Скачать

§ 2. Вывод матриц

Простой вывод можно выполнить, используя управление курсором. Для этого в программе ввода (§ 1) достаточно заменить cin на cout.

Кроме этого можно предложить следующий вариант вывода:

cout<<endl;

for ( i=0; i<n; i++)

{ printf("\n"); // Переход на новую строку экрана.

for ( j=0; j<m; j++)

printf ("%5d", A[i][j]);

}

При таком выводе числа столбцов будут выровнены благодаря наличию формата %5d, т. е. независимо от размерности чисел они будут выводиться друг под другом. Напомним, что для вещественных чисел необходимо указать, например, формат %7.2f. В этом фрагменте важно место оператора printf("\n"). Если символ “\n” записать во внутреннем цикле (printf ("\n%5d", A[i][j])), то в каждой строке экрана будет выводиться по одному числу. Необходимо также обратить внимание на расстановку фигурных скобок.

Иногда для наглядности целесообразно элементы матрицы в зависимости от условия выводить разным цветом. Например, положительные числа вывести цветом C1 на фоне C2, а отрицательные и нулевые — наоборот, цветом С2 на фоне С1, где С1 и С2 — целые числа, определяющие цвет. Это реализуется, например, следующим образом:

void MyColors (int C1, int C2)

{ textcolor(C1);

textbackground(C2); }

int main()

{ textbackground(3); clrscr(); // Очищает и закрашивает экран

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++)

{ cout<<endl; // Переход на новую строку экрана.

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;

}

Замечания.

Напомним, что стандартные функции textcolor и textbackground устанавливают только цвет выводимых символов и цвет фона в текстовом режиме, но ничего не выводят. Для “цветного” вывода вместо printf или cout необходимо использовать функцию cprintf.

Предполагается, что размерности матрицы такие, что её строка размещается в одной строке экрана. Кроме того, вся матрица размещается на экране. В противном случае надо усложнить предложенный фрагмент программы.

Для удобства анализа результатов часто требуется одновременно выводить несколько матриц, матрицу и вектор и т. п. При этом они должны располагаться в определённом порядке и в заданном месте экрана.

Например, слева выведем матрицу A[n][m] цветом С1, далее, правее — одномерный массив B[n] в столбец по одному элементу цветом С2 и, наконец, ещё правее — матрицу D[n][k] цветом C3 в обратном порядке, т. е. сначала (n–1)–ю строку, затем (n–2)–ю и так далее, 0–ю строку.

void MyC(int C)

{textcolor(C); }

int main()

{ textbackground(1); clrscr();

const n=4, m=6, k=5; int D[n][k], A[n][m];

float b[n]; randomize();

for ( int i=0; i<n; i++)

{ b[i]=(float)random(m+k)/10;

// или b[i]=random(m+k)/10.;

// можно по-другому правилу b[i]=(float)i / 10;

for ( int j=0; j<m; j++)

{ A[i][j]= random(50)-100; // Все элементы отрицательные

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;

MyC(10);

for ( int j=0; j<m; j++) // Вывод i–й строки матрицы A

cprintf ("%4d", A[i][j]);

MyC(11);

// Вывод одного i–го элемента вектора b

cprintf (" %6.1f ", b[i]);

MyC(15); // Вывод i–й строки матрицы D в обратном порядке

for ( int j=0; j<k; j++)

cprintf ("%5d", D[n-1-i][j]);

}

getch(); return 0;

}

Замечание. Предполагается, что размерности матриц и вектора такие, что в одной строке экрана размещаются две строки из A и D и один элемент b. Кроме того, все три массива могут поместиться на экране. В противном случае требуется усложнение вывода.

Упражнение. Написать второй вариант этой же программы, в которой используется функция gotoxy. Сначала выводим всю матрицу A, затем возвращаемся на первую строку и выводим в столбец вектор b и, наконец, в обратном порядке выводим матрицу D.