Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

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



Пример 13. Перестановка двух строк, номера n1 и n2 которых извстны, выполняется следующим образом. Составим функцию для перестановки двух целых чисел: void RR(int &x, int &y) { int t=x; x=y; y=t; }

В другой функции или в main выполняем поэлементную перестановку каждой пары элементов: for (int j=0; j<m; j++) RR(A[n1][ j], A[n2][j]);

В качестве упражнения с помощью той же функции выполните перестановку m1–го и m2–го столбцов, если m1 и m2 заданы.

Пример 14. Удаление k й строки, где k известно.

for (int i=k; i<n-1; i++)

for (int j=0; j<m; j++) A[i][j]=A[i+1][j];

Здесь на место k –й строки помещаем каждый элемент (k+1) –й строки, на место (k+1) –й — (к+2) –ю строку и так далее. Наконец, на место (n-2)–й копируем (n-1)–ю строку. Таким образом, все строки, начиная с (к+1)–й, “поднимаем на одну вверх”. Но объём зарезервированной памяти для матрицы не изменяется, то есть физически ни одну строку из памяти мы не удаляли. Но после “удаления” одной строки количество обрабатываемых строк надо на одну уменьшить. Последняя строка в обработке уже не должна участвовать. Например, выводить надо (n-1) строку.

Пример 15. Для вставки одной строки после к -й на первом этапе необходимо все строки с n –й до (к+1)-й в обратном порядке “опустить вниз”:

for (int i=n; i>=k+1; i--)

for (int j=0; j<m; j++) A[i+1][j]=A[i][j];

Затем на место освободившейся (k+1)–й строки надо поместить вставляемую строку, например, одномерный введённый массив B такой же размерности m, что и строка матрицы:

for (int j=0; j<m; j++) A[k+1][j]=B[j];

При объявлении матрицы необходимо учесть, что после вставки количество строк увеличится. Поэтому если по условию вставляется одна строка, то объявляем её так: int A[n+1][m]. Если после каждой строки с некоторым условием, например, после строк, у которых больше половины нулей, надо вставить новую строку, то матрицу объявляем так: int A[2*n][m];. Реально такой вариант будет маловероятным и память будет использоваться неэффективно.

Похожая проблема с памятью имеет место и при удалении строк. Более того, если перестановку, удаление или вставку строк надо выполнять несколько раз, то для больших матриц может возникнуть проблема и со временем выполнения программы. Поэтому на практике такое преобразование эффективнее выполнять с помощью динамических матриц или списков, которые будут изучены позже.





Дата публикования: 2015-02-18; Прочитано: 200 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...