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

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

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

Доброго времени суток, программа должна найти нулевую подматрицу заданного размера и вывести ее на экран. Много всего пробовал, но идеи уже закончились, как и нервы Помогите пожалуйста с телом поиска. То, что есть сейчас:
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N 4
  4. #define Q 16
  5. #define M 4
  6. void input(int a[N][M]);
  7. void output(int a[N][M]);
  8. int main()
  9. {
  10. int a[N][M],col=0, i, j, i1, j1, tmp, tmp1,r;
  11. input(a);
  12. printf("€б室*л© ¬*ббЁў\n");
  13. output(a);
  14. printf("\n");
  15. for (i=0; i<N; i++)
  16. {
  17. for (j=0; j<M; j++)
  18. {
  19. if(a[i][j]==0)
  20. {
  21. }
  22. }
  23. }
  24. system("pause>>0");
  25. return 0;
  26. }
  27. void input(int a[N][M])
  28. {
  29. int i, j;
  30. for (i = 0; i<N; i++)
  31. {
  32. for (j = 0; j<M; j++)
  33. {
  34. printf("a[%d][%d]= ",i,j);
  35. scanf("%d",&a[i][j]);
  36. }
  37. }
  38. }
  39. void output(int a[N][M])
  40. {
  41. int i, j;
  42. for (i = 0; i<N; i++)
  43. {
  44. for (j = 0; j <M; j++)
  45. printf("%4d", a[i][j]);
  46. printf("\n");
  47. }
  48. }

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

textual
Листинг программы
  1. #include <stdio.h>
  2. #define N 4
  3. #define M 6
  4.  
  5. int find_msub(const int mat[][M], int n, int m, int (*cmp)(int), int* prow){
  6.     int i, j, a, b, rows, cols;
  7.     for(i = 0; (i < N) && ((i + n) <= N); ++i){
  8.         for(j = 0; (j < M) && ((j + m) <= M); ++j){
  9.             rows  = i + n;
  10.             cols  = j + m;
  11.             for(a = i; a < rows; ++a){
  12.                 for(b = j; b < cols; ++b){
  13.                     if(! (*cmp)(mat[a][b]))
  14.                         goto _break;
  15.                 }
  16.             }
  17.             if(a == rows){
  18.                 *prow = i;
  19.                 return j;
  20.             }
  21. _break:;
  22.         }
  23.     }
  24.     *prow = -1;
  25.     return -1;
  26. }
  27.  
  28. static int cmp_zero(int n) { return (n == 0); }
  29. static int cmp_odd(int n)  { return ((n % 2) != 0); }
  30.  
  31. int main(void){
  32.     int i, j, n, m, x, y;
  33.    
  34.     int mat[N][M] = {
  35.         { 1, 2, 3, 4, 7, 8 },
  36.         { 1, 7, 5, 1, 2, 3 },
  37.         { 3, 9, 1, 0, 0, 0 },
  38.         { 5, 3, 3, 0, 0, 0 }
  39.     };
  40.    
  41.     //найти нулевую под матрицу
  42.     n = 2;
  43.     m = 3;
  44.     x = find_msub(mat, n, m, cmp_zero, &y);
  45.     if(x != -1){
  46.         for(i = y; i < (y + n); ++i){
  47.             for(j = x; j < (x + m); ++j)
  48.                 printf("%d ", mat[i][j]);
  49.             putchar('\n');
  50.         }
  51.     }
  52.     putchar('\n');
  53.  
  54.     //ещё пример найти под матрицу из нечётных чисел
  55.     n = m = 3;
  56.     x = find_msub(mat, n, m, cmp_odd, &y);
  57.     if(x != -1){
  58.         for(i = y; i < (y + n); ++i){
  59.             for(j = x; j < (x + m); ++j)
  60.                 printf("%d ", mat[i][j]);
  61.             putchar('\n');
  62.         }
  63.     }
  64.     return 0;
  65. }

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

  1. Подключение необходимых библиотек для работы с матрицами и вывода данных на экран
  2. Объявление функции find_msub, которая ищет подматрицу заданного размера с заданными условиями
  3. Объявление статических функций cmp_zero и cmp_odd, которые проверяют число на ноль и на чётность соответственно
  4. В функции main создаётся матрица mat размером N на M (4 на 6)
  5. Задаются размеры подматрицы n и m (2 и 3 соответственно)
  6. Вызывается функция find_msub, которая ищет подматрицу заданного размера с заданными условиями и выводит её на экран
  7. Выводится подматрица из нулей матрицы mat
  8. Выводится подматрица из нечётных чисел матрицы mat

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


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

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

5   голосов , оценка 3.6 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы