
- •Структурированный тип данных
- •Массивы
- •Рассмотрим одномерные массивы.
- •Основные действия с массивами
- •I. Инициализация массива.
- •II. Вывод одномерного массива.
- •Матрицы (двухмерные массивы)
- •Основные действия с двухмерными массивами
- •II. Вывод матриц.
- •Типы алгоритмов на обработку матриц (двухмерных массивов)
- •1. Построчная обработка
- •2. Обработка матрицы по столбцам
- •3. Обработка всей матрицы
- •4. Обработка части матрицы
- •5. Преобразование матрицы
- •6. Построение матриц
- •Модульное программирование. Пользовательские функции.
- •Описание пользовательских функций
- •Формальные и фактические параметры
- •Передача параметров
- •Функции с одним результатом. Оператор return.
- •Передача массива в качестве параметра функции
- •Работа с матрицей в методах класса
- •Структуры
- •Работа со структурами
II. Вывод матриц.
а) Простой вывод в виде таблицы можно выполнить, используя два цикла for для вывода элементов первой строки, затем второй и т.д.
Кроме этого можно предложить следующий вариант вывода:
cout<<”\n”;
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); }
void 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();
}
Типы алгоритмов на обработку матриц (двухмерных массивов)
Ввиду многообразия задач по рассматриваемой теме сделана попытка классификации некоторых простых матричных задач.
1. Построчная обработка
К такому типу относятся задачи, в которых для каждой строки матрицы требуется найти её некоторый параметр. Таким параметром может быть, например, сумма, количество всех элементов строки или элементов с некоторым условием, наименьший (наибольший) элемент среди всех или части элементов строки и т. д. К этому классу можно отнести и задачи типа “есть ли нуль в строке матрицы?”. Их особенность в том, что не обязательно надо анализировать все элементы строки.
В таких программах внешний цикл строится по номеру строки, а в одном или нескольких внутренних циклах обрабатывается строка как одномерный массив. При этом полученные характеристики строк можно запоминать в одномерном массиве размерности n или выводить сразу по мере получения.
2. Обработка матрицы по столбцам
Аналогичные вычисления и анализ можно выполнять не для каждой строки, а для столбцов.
Особенность таких задач в том, что внешний цикл строим по номеру столбца. Во внутреннем цикле, изменяя первый “левый” индекс, обрабатываем столбец как одномерный массив. Как и в задачах предыдущего типа, важна правильная расстановка фигурных.
Замечание. Поскольку матрицы располагаются в памяти по строкам, то элементы столбца находятся не рядом, а на определённом удалении друг от друга. Поэтому обработка по столбцам малоэффективна для больших матриц и “слабых” компьютеров с точки зрения времени выполнения программ. Такую обработку желательно избегать, сформировав по–другому матрицу. Например, перед вводом матрицу можно транспонировать.