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

Нужно в двумерном динамическом массиве удалить элементы , которые ниже побочной диагонали (сдвигом)


Ответы (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);
    . . .
}

Это черновой набросок, я код НЕ тестировал. Так что надо очень внимательно проверить границы выполнения циклов.

Но в целом, я думаю, идея понятна - вместо того, что бы сдвигать сразу всю матрицу, выполняем операцию построчно, причем через сдвиг на один элемент.

→ Ссылка