Найти нулевые значения матрицы и определить окружают ли его единицы - 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;
Объяснение кода листинга программы
В этом коде:
- Объявлены переменные:
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)
- функция приостановки выполнения программы до нажатия клавиши.
- Задается размер матрицы (количество строк) и матрица заполняется случайными значениями 0 и 1.
- Производится поиск нулевых ячеек и, если таковая найдена, проверяется окружающая её область на наличие других нулевых ячеек. Если окружающие ячейки имеют нулевые значения, то текущая ячейка помечается как 0.
- Выводится на экран найденная нулевая ячейка.
- После завершения работы программы все выделенные ячейки памяти освобождаются.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д