помогите решить задачу через функции на си

В матрице A (m,n), состоящей из нулей и единиц, найти квадрат заданного размера (квадратную подматрицу), состоящий целиком из нулей. Набросок:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>


void scan ( int x,int y,int A[x][y] ) {
    int i;
    for ( i = 0 ; i < x ; i++ ) {
        for(int j = 0; j < y; j++)
            scanf ("%d", &A[i][j]);
        printf("\n");
    }

}
void print( int x, int y,int A[x][y]) {
    for(int i = 0; i < x; i++) {
        for(int j = 0; j < y; j++)
            printf("%5d",A[i][j]);
        printf ("\n");
    }
}

int search(int *o,int *u,int *i,int *j,int *plus,int r, int x, int y,int A[x][y]) {

    for(; *i < x-r; *i++) {
        for(; *j < y-r; *j++) {
            for(; *o < r; *o++) {
                for(; *u < r; *u++) {
                    if (A[*i+*o][*j+*u]==0) {
                        *plus+=1;
                    }

                }
            }
            if (*plus==(r*r)) {
            printf("квадратная подматрица существует");
            }
            *o=0;
            *u=0;
            *plus=0;
        }

    }
    return 0;
}


int main() {
    setlocale(LC_ALL,"Rus");
    int n,m,q,i=0,j=0,o=0,u=0,pmat;
    int plus=0;
    printf ("Введите размер матрицы  ");
    scanf("%d%d",&n,&m);
    printf ("\nВведите размер подматрицы  ");
    scanf("%d",&pmat);
    int A[n][m];
    if (n>1 && m>1) {
        scan(n,m,A);
        print(n,m,A);
        search(&o,&u,&i,&j,&plus,pmat,n,m,A);
    } else printf ("Квадратной подматрицы не существует");

    return 0;
}

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

Автор решения: Zhihar

а не проще ли вот этот ужас

int search(int *o,int *u,int *i,int *j,int *plus,int r, int x, int y,int A[x][y]) {

    for(; *i < x-r; *i++) {
        for(; *j < y-r; *j++) {
            for(; *o < r; *o++) {
                for(; *u < r; *u++) {
                    if (A[*i+*o][*j+*u]==0) {
                        *plus+=1;
                    }

                }
            }
            if (*plus==(r*r)) {
            printf("квадратная подматрица существует");
            }
            *o=0;
            *u=0;
            *plus=0;
        }

    }
    return 0;
}

заменить на

bool chech(const int left, const int top, const int size, int** matrix) {
    int i, j; // вроде на C нельзя внутри for задавать переменные

    for (i = left; i < left + size; i ++)
        for (j = top; j < top + size; j ++)
            if (matrix[i][j] != 0)
                return false;

    return true;
}

void search(const int width, const int height, const int size, int** matrix) {
    int i, j;

    for (i = 0; i < width - size; i ++)
        for (j = 0; j < height - size; j ++)
            if (check(i, j, size, matrix) == true) {
                printf("существует по координатам [%d][%d]", i, j);
                return;
            }

    printf("не существует");

}

→ Ссылка