#include int encaja( int row, int col, int** matriz, int r, int c, int** submat, int x1, int y1 ) { int i, j; for( i = 0; i < r; i++ ) for( j = 0; j < c; j++ ) if( submat[i][j] != matriz[i+y1][j+x1] ) return 0; return 1; } void leeMatriz( int row, int col, int** mat, FILE *input ) { int i, j; for( i = 0; i < row; i++ ) for( j = 0; j < col; j++ ) fscanf( input, "%d", &mat[i][j] ); } void imprimeMatriz( int row, int col, int** mat, FILE *output ) { int i, j; for( i = 0; i < row; i++ ) { for( j = 0; j < col; j++ ) if( j < col-1 ) fprintf( output, "%d ", mat[i][j] ); else fprintf( output, "%d", mat[i][j] ); if( i < row-1 ) fprintf( output, "\n" ); } } void llenaZeros( int row, int col, int** matriz ) { int i, j; for( i = 0; i < row; i++ ) for( j = 0; j < col; j++ ) matriz[i][j] = 0; } void imprimeUnos( int** matriz, int r, int c, int x1, int y1 ) { int i, j; for( i = y1; i < r + y1; i++ ) for( j = x1; j < x1 + c; j++ ) matriz[i][j] = 1; } int** generaMatriz( int row, int col ) { int i, **mat; mat = new int*[ row ]; for( i = 0; i < row; i++ ) mat[i] = new int[ col ]; return mat; } void borraMatriz( int row, int** mat ) { int i; for( i = 0; i < row; i++ ) delete[] mat[i]; delete[] mat; } int main() { FILE *input, *output; int row, col, **matriz, r, c, **submat, **resultado, i, j; input = fopen( "input.txt", "rt" ); fscanf( input, "%d %d\n", &row, &col ); matriz = generaMatriz( row, col ); leeMatriz( row, col, matriz, input ); resultado = generaMatriz( row, col ); llenaZeros( row, col, resultado ); fscanf( input, "%d %d\n", &r, &c ); submat = generaMatriz( r, c ); leeMatriz( r, c, submat, input ); fclose( input ); for( i = 0; i < row - r; i++ ) for( j = 0; j < col - c; j++ ) if( encaja( row, col, matriz, r, c, submat, j, i ) ) imprimeUnos( resultado, r, c, j, i ); output = fopen( "output.txt", "wt" ); imprimeMatriz( row, col, resultado, output ); fclose( output ); borraMatriz( row, matriz ); borraMatriz( row, resultado ); borraMatriz( r, submat ); return 0; }