Удаление всех строк, содержащих минимальный элемент матрицы - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Написал программу на Си удаления всех строк, содержащих минимальный элемент матрицы, но она падает, если в массиве встречается 0. Не могу понять в чём дело. Помогите, пожалуйста найти ошибку
#include <stdio.h>
#define N 7
 
int main()
{
    int a[N][N], n, i, j, k, m, min, removed;
    while (1)
    {
        printf("Введите n (1 - %d. Завершить - 0): ", N);
        scanf_s("%d", &n);
        if (n == 0) break;
        if (n < 1 || n > N)
        {
            printf("Недопустимое значение n\n");
            continue;
        }
        for (i = 0; i < n; i++)
        for (j = 0; j < n; j++)
            scanf_s("%d", &a[i][j]);
        printf("Исходная матрица:\n");
        for (i = 0; i < n; i++)
        {
            for (j = 0; j < n; j++) printf("%d ", a[i][j]);
            printf("\n");
        }
        min = a[0][0];
        for (i = 0; i < n; i++)
        for (j = 0; j < n; j++)
        if (a[i][j] < min) min = a[i][j];
        removed = 0;
        for (i = 0; i < n; i++)
        {
            for (j = 0; j < n; j++)
            {
                if (a[i][j] == min)
                {
                    for (m = i; m < n - removed; m++)
                    for (k = 0; k < n; k++) a[m][k] = (m < n - removed - 1 ? a[m + 1][k] : 0);
                    removed++;
                    i--;
                    break;
                }
            }
        }
        printf("Результат:\n");
        if (n - removed == 0) printf("Все строки были удалены, так как они содержали минимальный элемент\n");
        else
        for (i = 0; i < n - removed; i++)
        {
            for (j = 0; j < n; j++) printf("%d ", a[i][j]);
            printf("\n");
        }
    }
    return 0;
}

Решение задачи: «Удаление всех строк, содержащих минимальный элемент матрицы»

textual
Листинг программы
for (k = 0; k < n; k++) a[m][k] = (m < n - removed - 1 ? a[m + 1][k] : 0);

Объяснение кода листинга программы

В данном коде выполняется итерация по всем элементам матрицы a. Значение каждой ячейки a[m][k] присваивается значению следующей ячейки a[m + 1][k], если она существует, иначе 0. В данном коде отсутствует проверка выхода за границы матрицы, что может привести к ошибкам при выполнении кода.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5
Похожие ответы