Найти нулевые значения матрицы и определить окружают ли его единицы - C (СИ)

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

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

Задача такова:Функция получает матрицу N*N(N предположим = 4) матрица состоит из нулей и единиц задача функции найти ноль, определить, что его окружают единицы(все соседние числа включая диагонали), если да, то напечатать расположение нуля Например {0,1,1,0} {1,1,1,1} {1,0,1,0} {1,1,1,0} вывод будет 0,0 0,3 2,1 то ли я чего-то не понимаю либо перемудрил, но тут получается куча if-ов например в первом случае с индексами [0][0] мне надо проверить, что я не выхожу за размеры массива и только потом начинать проверку... может кто подскажет, намекнет

Решение задачи: «Найти нулевые значения матрицы и определить окружают ли его единицы»

textual
Листинг программы
int main(int argc,char* argv[])
{   
    int n,i,j,k,ni,nj;
    int **a;
    int di[]={-1,-1,-1,0,1,1, 1, 0};
    int dj[]={-1, 0, 1,1,1,0,-1,-1};
 
    printf("N:");
    scanf("%d",&n);
    a=(int**)malloc(n*sizeof(int*));
    for(i=0; i<n; i++)
        a[i]=(int*)malloc(n*sizeof(int));
    srand((unsigned)time(0));
    for(i=0; i<n; i++,printf("\n"))
        for(j=0; j<n; j++)
        {
            a[i][j]=rand()%4>0;
            printf("%d ",a[i][j]);
        }
    for(i=0; i<n; i++)
        for(j=0; j<n; j++)
        if(!a[i][j])
        {
            for(k=0; k<8; k++)
            {
              nj=j+dj[k];
              ni=i+di[k];
              if(nj>=0 && nj<n && ni>=0 && ni<n)
               if(!a[ni][nj]) break;
            }
            if(k==8) printf("%d %d\n",i,j);
        }
    system("pause");
    for(i=0; i<n; i++)
        free(a[i]);
    free(a);
    return 0;

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

В этом коде:

  1. Объявлены переменные:
    • n - количество строк в матрице;
    • i, j, k - индексы для обхода матрицы;
    • ni, nj - индексы для проверки окружающих ячеек;
    • a - двумерный массив (матрица);
    • di и dj - вложенные массивы, определяющие направление движения при поиске нулевых ячеек;
    • a[i][j] - значение ячейки матрицы;
    • rand()%4>0` - генерация случайного значения для заполнения матрицы (0 или 1 с вероятностью 60% и -1 с вероятностью 40%);
    • printf() - функция вывода значений на экран;
    • scanf() - функция ввода значения от пользователя;
    • malloc() и free() - функции управления памятью;
    • system(pause) - функция приостановки выполнения программы до нажатия клавиши.
  2. Задается размер матрицы (количество строк) и матрица заполняется случайными значениями 0 и 1.
  3. Производится поиск нулевых ячеек и, если таковая найдена, проверяется окружающая её область на наличие других нулевых ячеек. Если окружающие ячейки имеют нулевые значения, то текущая ячейка помечается как 0.
  4. Выводится на экран найденная нулевая ячейка.
  5. После завершения работы программы все выделенные ячейки памяти освобождаются.

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


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

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

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