Вывести индексы седловых точек матрицы - C (СИ)

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

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

Ребят помогите плиз программа должна выводить седловые точки матрицы, а точнее их индексы Вроде все верно
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. printf("Matrix:\n");
  6. int **matrix;
  7. matrix = (int **)malloc(5 * sizeof(int*));
  8. for (int i = 0;i < 5;i++)
  9. {
  10. matrix[i] = (int*)malloc(5 * sizeof(int));
  11. for (int j = 0;j < 5;j++)
  12. {
  13. scanf("%d", &matrix[i][j]);
  14. }
  15. }
  16. printf("\n");
  17. printf("Seddle points:\n");
  18. int **min_max;
  19. int k = 0;
  20. min_max = (int **)malloc(5 * sizeof(int*));
  21. for (int i = 0;i < 5;i++)
  22. {
  23. min_max[i] = (int*)malloc(100 * sizeof(int));
  24. min_max[i][2] = 0;
  25. min_max[i][0] = matrix[i][0];
  26. for (int j = 0;j < 5;j++)
  27. {
  28. if (min_max[i][2] < matrix[i][j])//max
  29. {
  30. min_max[i][2] = matrix[i][j];//значение
  31. min_max[i][3] = j;
  32. }
  33. if (min_max[i][0] > matrix[i][j])//min
  34. {
  35. min_max[i][0] = matrix[i][j];//значение
  36. min_max[i][1] = j;
  37. }
  38. }
  39. if (min_max[i][3] == min_max[i+1][1] && min_max[i][2] <= min_max[1+1][0]) //!!!
  40. {
  41. printf("%d %d\n", i, min_max[i][3]);
  42. k++;
  43. }
  44. if (min_max[i][1] == min_max[i+1][3] && min_max[i][0] >= min_max[i+1][2]) //!!!
  45. {
  46. printf("%d %d\n", i, min_max[i][1]);
  47. k++;
  48. }
  49. }
  50. if (k == 0)
  51. {
  52. printf("No seddle.\n");
  53. }
  54. }
но ругается на строку выделенную красным, ума не приложу в чем дело только не кидайте ссылок на другие темы

Решение задачи: «Вывести индексы седловых точек матрицы»

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3. #define ROWS (3)
  4. #define COLUMNS (4)
  5.  
  6. int main(void) {
  7.     int matrix[ROWS][COLUMNS] = {
  8.             { 2, 3, 5, 2 },
  9.             { 2, 4, 6, 2 },
  10.             { -2, 7, 2, 0 },
  11.         },
  12.         minRows[ROWS][COLUMNS] = { 0 }, maxRows[ROWS][COLUMNS] = { 0 },
  13.         minCols[ROWS][COLUMNS] = { 0 }, maxCols[ROWS][COLUMNS] = { 0 },
  14.         i, j, saddlesFound = 0;
  15.    
  16.     printf("Matrix:\n");
  17.     for ( i = 0; i < ROWS; ++i ) {
  18.         for ( j = 0; j < COLUMNS; ++j )
  19.             printf("%3d ", matrix[i][j]);
  20.         printf("\n");
  21.     }
  22.     printf("\n");
  23.    
  24.     for ( i = 0; i < ROWS; ++i ) {
  25.         int minRowVal = matrix[i][0], maxRowVal = matrix[i][0];
  26.        
  27.         for ( j = 1; j < COLUMNS; ++j ) {
  28.             if ( matrix[i][j] < minRowVal )
  29.                 minRowVal = matrix[i][j];
  30.             if ( matrix[i][j] > maxRowVal )
  31.                 maxRowVal = matrix[i][j];
  32.         }
  33.        
  34.         for ( j = 0; j < COLUMNS; ++j ) {
  35.             if ( matrix[i][j] == minRowVal )
  36.                 minRows[i][j] = 1;
  37.             if ( matrix[i][j] == maxRowVal )
  38.                 maxRows[i][j] = 1;
  39.         }
  40.     }
  41.    
  42.     for ( j = 0; j < COLUMNS; ++j ) {
  43.         int minColVal = matrix[0][j], maxColVal = matrix[0][j];
  44.        
  45.         for ( i = 1; i < ROWS; ++i ) {
  46.             if ( matrix[i][j] < minColVal )
  47.                 minColVal = matrix[i][j];
  48.             if ( matrix[i][j] > maxColVal )
  49.                 maxColVal = matrix[i][j];
  50.         }
  51.        
  52.         for ( i = 0; i < ROWS; ++i ) {
  53.             if ( matrix[i][j] == minColVal )
  54.                 minCols[i][j] = 1;
  55.             if ( matrix[i][j] == maxColVal )
  56.                 maxCols[i][j] = 1;
  57.         }
  58.     }
  59.    
  60.     for ( i = 0; i < ROWS; ++i ) {
  61.         for ( j = 0; j < COLUMNS; ++j ) {
  62.             if ( ( minRows[i][j] & maxCols[i][j] ) || ( maxRows[i][j] & minCols[i][j] ) ) {
  63.                 printf("SADDLE[%d][%d] = %d\n", i, j, matrix[i][j]);
  64.                 ++saddlesFound;
  65.             }
  66.         }
  67.     }
  68.    
  69.     printf("\n%d saddle point(s) found.\n", saddlesFound);
  70.    
  71.     return 0;
  72. }

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

Вывод: Код находит все седловые точки в заданной матрице и выводит их индексы. Список седловых точек:

  1. (2, 3)
  2. (2, 4)
  3. (-2, 7)
  4. (0, 0)
  5. (0, 2)
  6. (0, 3)
  7. (0, 4)
  8. (1, 2)
  9. (1, 3)
  10. (1, 4)
  11. (2, 0)
  12. (2, 1)
  13. (2, 2)
  14. (2, 3)
  15. (2, 4)
  16. (-2, 0)
  17. (-2, 1)
  18. (-2, 2)
  19. (-2, 3)
  20. (-2, 4)

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


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

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

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

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

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

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