Транспонированную матрицу можно получить в исходном массиве А. Для квадратной матрицы размером N*N для этого необходимо поменять местами каждый элемент верхнего треугольника с соответствующим элементом нижнего (диагональные элементы переставлять не нужно). При этом для каждой строки нужно выполнять перестановку для элементов, расположенных правее главной диагонали, с элементами соответствующего столбца, расположенными ниже главной диагонали. При перестановке используем вспомогательную переменную Р, помещая в нее для временного хранения один из переставляемых элементов, чтобы не потерять его значение (см. программу 4.9).
Программа 4.9
…
int P;
for ( i = 0; i<N-1; i++)
for ( j = 0; j<N; j++)
{ P = A[i][j]; A[i][j]=A[j][i] ; A[j][i] =P ;}
…
Замечание. Для прямоугольной матрицы алгоритм усложняется.
Вычисление произведения С матрицы А размером N*M на вектор В размером М (см. программу 4.10).
Программа 4.10
…
int C[N]={0};
for ( i = 0; i<N; i++)
for ( j = 0; j<M; j++)
C[i]=C[i]+A[i][j]*B[j];
…
10. Умножение матрицы на матрицу.
Умножить матрицу А размером N*K на матрицу В размером К*М (см. программу 4.11).
Программа 4.11
…
int C[N][M]={0};
for ( i = 0; i<N; i++)
for ( j = 0; j<M; j++)
for (p=0; p<K; p++)
C[i][j]=C[i][j]+A[i][p]*B[p][j];
…
/ ;
Требуется удалить К-й элемент из массива А размером N. Удалить элемент, расположенный на К-м месте в массиве, можно, сдвинув весь «хвост» массива, начиная с (К+1) - го элемента, на одну позицию влево, т. е. выполняя операции ai=ai+1, i=K, K+1, . . ., N—1 (см. программу 4.12).
Программа 4.12
………
for ( i = K; i<N-1; i++)
a[i]=a[i+1] ;
……….. " ;. ;,. .
Перед включением элемента в К-ю позицию необходимо раздвинуть массив, т. е. передвинуть «хвост» массива вправо на одну позицию, выполняя операцию ai+1=ai, i=N, N—1, . . ., К. Перемещение элементов массива нужно начинать с конца. В противном случае весь «хвост» будет заполнен элементом a [К]. Далее, К-му элементу присваивается заданное значение В.. Размер массива увеличивается на 1 (см. программу 4.13).
Программа 4.13
………
for ( i = N-1; i>=K; i--)
a[i+1]=a[i] ;
a[K]=B;
………..
Примечание. При вставке и удалении необходимо учитывать границы массива. При вставке элементов размер массива должен быть объявлен заведомо большим, чем исходное число элементов (N+P, где Р – число вставляемых элементов).
Сначала необходимо найти элемент, перед которым необходимо включать заданное значение В. Для этого нужно проверять условие В>А[i] для i=0, 1, ... При выполнении условия текущее значение индекса (i) определяет позицию нового элемента. Далее, включение элемента осуществляется в соответствии с алгоритмом, описанным в п. 12 (см. программу 4.13).
Программа 4.14
…
k=0;
while (B>a[k] && k<N) k++; // проверяем также границу массива
for ( i = N-1; i>= k; i--)
a[i+1]=a[i] ;
a[k]=B;
…
14. Удаление строки из матрицы. Требуется удалить строку с заданным номером К. Решение задачи аналогично удалению элемента из одномерного массива. Все строки, начиная с (К+1)-й нужно переместить вверх. Число строк уменьшается на 1 (см. программу 4.15).
Программа 4.15
…
for ( i = k; i<N; i++)
for ( j = 0; j<M; j++)
A[i][j]= A[i+1][j];
L = N-1; // новое число строк
…
П p имечание. Удаление столбца осуществляется аналогично.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.