Программы линейной структуры. Простейшие программы циклической структуры. Разветвления, циклы и разветвления. Простейшие алгоритмы обработки массивов, страница 19

Транспонированную матрицу можно получить в исходном мас­сиве А. Для квадратной матрицы размером 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 ;}

Замечание. Для прямоугольной матрицы алгоритм ус­ложняется.

  1. Умножение матрицы на вектор.

Вычисление произведе­ния С матрицы А размером 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];

                                                                                        /    ;

  1. Удаление элемента из массива.

Требуется удалить К-й эле­мент из массива А размером 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] ;

………..                                                         " ;.  ;,. .

  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, где Р – число вставляемых элементов).

  1. Включение элемента в массив, упорядоченный по возраста­нию, с сохранением упорядоченности.

Сначала необходимо найти элемент, перед которым необходимо включать заданное значение В. Для этого нужно проверять условие В>А[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 имечание. Удаление столбца осуществляется аналогично.