Найти нулевую подматрицу заданного размера и вывести ее на экран - C (СИ)
Формулировка задачи:
Доброго времени суток, программа должна найти нулевую подматрицу заданного размера и вывести ее на экран. Много всего пробовал, но идеи уже закончились, как и нервы
Помогите пожалуйста с телом поиска.
То, что есть сейчас:
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #define N 4
- #define Q 16
- #define M 4
- void input(int a[N][M]);
- void output(int a[N][M]);
- int main()
- {
- int a[N][M],col=0, i, j, i1, j1, tmp, tmp1,r;
- input(a);
- printf("€б室*л© ¬*ббЁў\n");
- output(a);
- printf("\n");
- for (i=0; i<N; i++)
- {
- for (j=0; j<M; j++)
- {
- if(a[i][j]==0)
- {
- }
- }
- }
- system("pause>>0");
- return 0;
- }
- void input(int a[N][M])
- {
- int i, j;
- for (i = 0; i<N; i++)
- {
- for (j = 0; j<M; j++)
- {
- printf("a[%d][%d]= ",i,j);
- scanf("%d",&a[i][j]);
- }
- }
- }
- void output(int a[N][M])
- {
- int i, j;
- for (i = 0; i<N; i++)
- {
- for (j = 0; j <M; j++)
- printf("%4d", a[i][j]);
- printf("\n");
- }
- }
Решение задачи: «Найти нулевую подматрицу заданного размера и вывести ее на экран»
textual
Листинг программы
- #include <stdio.h>
- #define N 4
- #define M 6
- int find_msub(const int mat[][M], int n, int m, int (*cmp)(int), int* prow){
- int i, j, a, b, rows, cols;
- for(i = 0; (i < N) && ((i + n) <= N); ++i){
- for(j = 0; (j < M) && ((j + m) <= M); ++j){
- rows = i + n;
- cols = j + m;
- for(a = i; a < rows; ++a){
- for(b = j; b < cols; ++b){
- if(! (*cmp)(mat[a][b]))
- goto _break;
- }
- }
- if(a == rows){
- *prow = i;
- return j;
- }
- _break:;
- }
- }
- *prow = -1;
- return -1;
- }
- static int cmp_zero(int n) { return (n == 0); }
- static int cmp_odd(int n) { return ((n % 2) != 0); }
- int main(void){
- int i, j, n, m, x, y;
- int mat[N][M] = {
- { 1, 2, 3, 4, 7, 8 },
- { 1, 7, 5, 1, 2, 3 },
- { 3, 9, 1, 0, 0, 0 },
- { 5, 3, 3, 0, 0, 0 }
- };
- //найти нулевую под матрицу
- n = 2;
- m = 3;
- x = find_msub(mat, n, m, cmp_zero, &y);
- if(x != -1){
- for(i = y; i < (y + n); ++i){
- for(j = x; j < (x + m); ++j)
- printf("%d ", mat[i][j]);
- putchar('\n');
- }
- }
- putchar('\n');
- //ещё пример найти под матрицу из нечётных чисел
- n = m = 3;
- x = find_msub(mat, n, m, cmp_odd, &y);
- if(x != -1){
- for(i = y; i < (y + n); ++i){
- for(j = x; j < (x + m); ++j)
- printf("%d ", mat[i][j]);
- putchar('\n');
- }
- }
- return 0;
- }
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с матрицами и вывода данных на экран
- Объявление функции find_msub, которая ищет подматрицу заданного размера с заданными условиями
- Объявление статических функций cmp_zero и cmp_odd, которые проверяют число на ноль и на чётность соответственно
- В функции main создаётся матрица mat размером N на M (4 на 6)
- Задаются размеры подматрицы n и m (2 и 3 соответственно)
- Вызывается функция find_msub, которая ищет подматрицу заданного размера с заданными условиями и выводит её на экран
- Выводится подматрица из нулей матрицы mat
- Выводится подматрица из нечётных чисел матрицы mat
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д