![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Выделим некоторые подтипы таких задач.
1. Элементы матрицы зависят от своих же индексов, т. е. от номера строки и (или) столбца.
Пример 16 (см. пример 3). Построить матрицу по правилу Aij = (i+1)*(j+1);
2. При построении матрицы используется одно число.
Пример 17. Для заданных значений x и n построить квадратную матрицу размерности n:
1 x x2 x3 … xn-1
x 0 0 0 … xn-2
x2 0 0 0 … xn-3
… … … … … …
xn-1 xn-2 xn-3 x… 1
Предлагается следующий алгоритм. Очередной элемент “периметра” матрицы получаем так: умножаем предыдущий элемент на x и помещаем его в первую и последнюю строки, в первый и последний столбцы. Для этого достаточно одного цикла. const n=5; float A[n][n], x, T=1;
cin>> x; /* Ввели только одно число */
A[0][0]= A[n-1][n-1]=1;
for (int i=1; i<n; i++) { T*=x;
A[0][i]= // элементы 0 –й строки,
A[i][0]= // элементы 0 –го столбца,
A[n-1][n-1-i]= // элементы(n-1) –й строки,
A[n-1-i][n-1]= T; } // элементы (n-1) –го столбца
/* Все “центральные” элементы обнуляем */
for (int i=1; i<n-1; i++)
for (int j=1; j<n-1; j++) A[i][j]=0;
3.Матрицу можно построить, используя один или несколько одномерных массивов.
Пример 18. Дан одномерный массив b[n]. Построить матрицу A[n][m] по следующему правилу:
b0 b0+1 b0+2 … b0 +(m-1)
b1 b1+1 b1+2 … b1 +(m-1)
… … … …
bn-1 bn-1 +1 bn-1 +2 bn-1 +(m-1).
В таких задачах необходимо установить, от чего и как зависят индексы элементов матрицы и, возможно, значения её элементов. Получаем
for (int i=0; i<n; i++)
for (int j=0; j<m; j++) A[i][j]=b[i]+j;
4. Новая матрица строится на основе одной или нескольких определённых к этому времени матриц.
Пример 19. Из вещественной матрицы С[n][m]. получить новую матрицу такой же размерности A[n][m] по правилу: положительные числа исходной матрицы увеличим в 10 раз, а отрицательные уменьшим в 10 раз:
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
{ t= C[i][j]; A[i][j] = t>0? t*10: t/10; }
Заметим, что старая матрица С не изменилась, а построенная разместилась на новом месте.
Следует отличать такую задачу от задачи, в которой исходная матрица преобразуется, а изменённые её значения сохраняются на том же месте. Для решения в такой постановке достаточно с помощью тех же циклов записать
t= C[i][j]; С[i][j] = t>0? t*10: t/10;. В таком варианте матрица С задана, она же в результате преобразований изменяется, то есть новые значения заменяют старые на том же месте оперативной памяти. Новая матрица А в таком случае не нужна.
Этот параграф, безусловно, не претендует на полное исследование всех типов матричных алгоритмов. Приведены основные наиболее простые из них, которые можно использовать при начальном изучении программирования с минимальным знанием математической теории матриц. Более сложные задачи состоят, как правило, из отдельных рассмотренных выше “кирпичиков”.
Дата публикования: 2015-02-18; Прочитано: 206 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!