Как сдвигом удалять элементы в двумерном массиве, под побочной диагональю?
Нужно в двумерном динамическом массиве удалить элементы , которые ниже побочной диагонали (сдвигом)
Ответы (1 шт):
Автор решения: Sergey
→ Ссылка
Нечто вроде:
// Выполняет сдвиг строки матрицы на одну позицию вправо
void shift_r_1(int mass[], int N) {
// mass - сдвигаемая строка матрицы
// Длина этой строки
int j;
for(j = N-1; j>0; j--) mass[j] = mass[j-1];
mass[0] = 0;
}
// Выполняет сдвиг строки матрицы на M позиций вправо
void shift_r_M(int mass[], int M, int N) {
int j;
for(j=0; j<M; j++) shift_r_1(mass, N);
}
// Обнуление элементов матрицы ниже побочной диагонали
// путём сдвига строки маторицы вправо
void zeroing(int *mass[], int N) {
int j;
for (j=0; j<N; j++) shift_r_M(mass[j], j, N);
}
int main(int argc, char *argv[]) {
int a[20][20];
. . .
zeroing(a, 20);
. . .
}
Это черновой набросок, я код НЕ тестировал. Так что надо очень внимательно проверить границы выполнения циклов.
Но в целом, я думаю, идея понятна - вместо того, что бы сдвигать сразу всю матрицу, выполняем операцию построчно, причем через сдвиг на один элемент.