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

15. Включение строки в матрицу. Включаемая строка задана как вектор (С). Включение строки в матрицу аналогично включению элемента в одномерный массив (см. п. 12).

Программа 4.16

for ( i = N-1; i>=k; i--)

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

          A[i+1][j]= A[i][j];

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

     A[k][j]=C[j];

Пояснение к   программе.   Прежде всего, пе­ремещают строки, начиная с К-й, вниз (в обратном порядке). Пере­мещение одной строки связано с пересылкой всех элементов этой строки, что требует организации цикла по номеру столбца. Далее включают строку С в качестве К-й.


     Примечание. Включение столбца осуществляется ана­логично.

16. Перестановка элементов в векторе.

Перестановка i-го и j-ro элементов осуществляется с использованием вспомогательной пере­менной (Р), в которую временно помещается один из элементов массива:

P=A[i]; A[i] = A[j] ; A[j]=P;

17. Перестановка строк матрицы.

С использованием вспомогательной переменной Р пере­становка осуществляется во всех столбцах двух строк (см. програм­му 4.17).

Программа 4.17

// перестановка i-ой и j-ой строк матрицы

for ( k = 0; k<M; k++)                       

   {P=A[i][k]; A[i] [k]= A[j][k] ; A[j][k]=P;}

18. Преобразования матрицы.

1) Умножение (деление) строки на число. Требуется умножить (разделить) все элементы строки (в программе — i-й) на одно и то же число (В), в частности, на какой-либо элемент этой же строки (см. программу 4.18).

Программа 4.18

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

   A[i][j]= A[i] [j]*B;


Примечание. Умножение (деление) столбца на число осуществляется аналогично.

2) Сложение строк. Требуется к элементам К-й строки приба­вить элементы L-й строки, умноженные на число (В) (см. програм­му 4.19).

Программа 4.19

// сложение k-ой и s-ой строк матрицы

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

   A[k][j]= A[k] [j]+ A[s][j] ;

19. Поиск минимального (максимального) элемента в массиве.

Требуется найти минимальный элемент в массиве и его значение поместить в переменную Р, а индекс — в  переменную К.

Для одномерного массива поиск минимального элемента осу­ществляется аналогично определению минимального элемента в потоке чисел, с той разницей, что в рассматриваемом случае все числа находятся в памяти (в программе — массив А), и, чтобы перейти к следующему элементу, достаточно изменить индекс на 1 (см. программу 4.20)

Программа  4.20

………

K=0;

 for ( i = 1; i<N-1; i++)

    if (a[K]>a[i]) K= i ;

………..

Если в массиве несколько элементов имеют минимальное зна­чение, то в К будет запоминаться индекс первого из них. Если проверять условие a[K]>=a[i], то будет запоминаться индекс последнего элемента.

Для поиска максимального элемента нужно прове­рить условие a[K]<a[i].

Для двумерного массива алгоритм аналогичный, но нужно для каждой строки просматривать элементы всех столбцов (что требует организации двойного цикла) и запоминать два индекса: номер строки (К) и номер столбца (L)


20. Преобразование матрацы в одномерный массив.

Обработка одномерных массивов осуществляется быстрее, чем двумерных того же размера, что часто требует выполнения указанного преоб­разования.

Требуется переслать элементы матрицы размером N*M в од­номерный массив того же размера по строкам с сохранением поряд­ка следования элементов. Для этого нужно соответствующим обра­зом согласовать индексы исходного массива А и формируемого X (см. программу 4.21).

Программа 4.21

     

int X[N*M];                     // объявление нового  одномерного массива

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

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

          X[i*M + j]=A[i][j];

Задание I уровня. Это задание требует использова­ния одного из приведенных во введении алгоритмов для конкретного размера массива, указанного в задаче.