Рекурсия в матрице с++

Разработать функцию для извлечения из заданной матрицы вещественных чисел всех строк, в которых наименьший элемент не является последним (Изъятие строки заключается в подтягивании всех последующих строк вверх). С клавиатуры ввести матрицу действительных чисел. На основе разработанных функций проверить строки введенной матрицы и изъять те, которые не соответствуют условию минимального последнего элемента. Напечатать сокращенную матрицу.

Обязательное условие: сделать с помощью рекурсии.

Вот эта программа, сделанная без помощи рекурсии (вроде работает), нужно с помощью рекурсии.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define n 7
#define m 5

void delete_row_it(float**, int, int);

int main() {
    system("chcp 1251");
    srand(time(NULL));

    int i, j;
    float matrix[n][m], *M;
    M = matrix;

    puts("\tЗаданная матрица");
    for (i = 0; i < n; i++) {
        for (j = 0; j < m; j++) {
            matrix[i][j] = rand() % 20 - 10;
            printf("%8.2f", *(M + i*m + j));
        }
        puts("");
    }
    puts("");

    /*matrix[0][m - 1] = -30;
    matrix[1][m - 1] = 30;
    matrix[2][m - 1] = -30;
    matrix[3][m - 1] = 30;
    matrix[4][m - 1] = -30;
    matrix[5][m - 1] = 30;
    matrix[6][m - 1] = -30;*/

    delete_row_it(matrix, n, m);

    return 0;
}

void delete_row_it(float** matrix, int r, int c) {

    float* M;
    M = matrix;
    float min, el;
    int i, j, ind_r, ind_c;

    for (i = 0; i < r; i++) {
        min = *(M + i*c);
        ind_r = i;
        ind_c = 0;
        for (j = 0; j < c; j++) {
            el = *(M + i * c + j);
            if (el < min) {
                min = el;
                ind_r = i;
                ind_c = j;
            }
        }//printf("\n ** min = %f, ind_r = %d, ind_c = %d **", min, ind_r, ind_c);

        if (ind_c != c - 1) {
            for (int a = 0; a < r - ind_r - 1; a++) {
                for (int b = 0; b < c; b++) *(M + (ind_r + a) * c + b) = *(M + (ind_r + a + 1) * c + b);
            }r--; i--;
        }
    }
    
    puts("\n\tСформированая матрица");
    for (i = 0; i < r; i++) {
        for (j = 0; j < c; j++) {
            printf("%8.2f", *(M + i * c + j));
        }puts("");
    }puts("");
}

Ответы (0 шт):