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

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

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

Ребят помогите плиз программа должна выводить седловые точки матрицы, а точнее их индексы Вроде все верно
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    printf("Matrix:\n");
 
    int **matrix;
    matrix = (int **)malloc(5 * sizeof(int*));
    for (int i = 0;i < 5;i++)
    {
        matrix[i] = (int*)malloc(5 * sizeof(int));
        for (int j = 0;j < 5;j++)
        {
            scanf("%d", &matrix[i][j]);
        }
    }
    printf("\n");
    printf("Seddle points:\n");
    int **min_max;
    int k = 0;
    min_max = (int **)malloc(5 * sizeof(int*));
    for (int i = 0;i < 5;i++)
    {
        min_max[i] = (int*)malloc(100 * sizeof(int));
        min_max[i][2] = 0;
        min_max[i][0] = matrix[i][0];
        for (int j = 0;j < 5;j++)
        {
 
            if (min_max[i][2] < matrix[i][j])//max
            {
                min_max[i][2] = matrix[i][j];//значение
                min_max[i][3] = j;
            }
            if (min_max[i][0] > matrix[i][j])//min
            {
                min_max[i][0] = matrix[i][j];//значение
                min_max[i][1] = j;
            }
 
        }
        if (min_max[i][3] == min_max[i+1][1] && min_max[i][2] <= min_max[1+1][0]) //!!!
            {
                printf("%d %d\n", i, min_max[i][3]);
                k++;
            }
            if (min_max[i][1] == min_max[i+1][3] && min_max[i][0] >= min_max[i+1][2]) //!!!
            {
                printf("%d %d\n", i, min_max[i][1]);
                k++;
            }
    }
    if (k == 0)
        {
            printf("No seddle.\n");
        }
        
}
но ругается на строку выделенную красным, ума не приложу в чем дело только не кидайте ссылок на другие темы

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

textual
Листинг программы
#include <stdio.h>
 
#define ROWS (3)
#define COLUMNS (4)
 
int main(void) {
    int matrix[ROWS][COLUMNS] = {
            { 2, 3, 5, 2 },
            { 2, 4, 6, 2 },
            { -2, 7, 2, 0 },
        }, 
        minRows[ROWS][COLUMNS] = { 0 }, maxRows[ROWS][COLUMNS] = { 0 }, 
        minCols[ROWS][COLUMNS] = { 0 }, maxCols[ROWS][COLUMNS] = { 0 }, 
        i, j, saddlesFound = 0;
    
    printf("Matrix:\n");
    for ( i = 0; i < ROWS; ++i ) {
        for ( j = 0; j < COLUMNS; ++j )
            printf("%3d ", matrix[i][j]);
        printf("\n");
    }
    printf("\n");
    
    for ( i = 0; i < ROWS; ++i ) {
        int minRowVal = matrix[i][0], maxRowVal = matrix[i][0];
        
        for ( j = 1; j < COLUMNS; ++j ) {
            if ( matrix[i][j] < minRowVal )
                minRowVal = matrix[i][j];
            if ( matrix[i][j] > maxRowVal )
                maxRowVal = matrix[i][j];
        }
        
        for ( j = 0; j < COLUMNS; ++j ) {
            if ( matrix[i][j] == minRowVal )
                minRows[i][j] = 1;
            if ( matrix[i][j] == maxRowVal )
                maxRows[i][j] = 1;
        }
    }
    
    for ( j = 0; j < COLUMNS; ++j ) {
        int minColVal = matrix[0][j], maxColVal = matrix[0][j];
        
        for ( i = 1; i < ROWS; ++i ) {
            if ( matrix[i][j] < minColVal )
                minColVal = matrix[i][j];
            if ( matrix[i][j] > maxColVal )
                maxColVal = matrix[i][j];
        }
        
        for ( i = 0; i < ROWS; ++i ) {
            if ( matrix[i][j] == minColVal )
                minCols[i][j] = 1;
            if ( matrix[i][j] == maxColVal )
                maxCols[i][j] = 1;
        }
    }
    
    for ( i = 0; i < ROWS; ++i ) {
        for ( j = 0; j < COLUMNS; ++j ) {
            if ( ( minRows[i][j] & maxCols[i][j] ) || ( maxRows[i][j] & minCols[i][j] ) ) {
                printf("SADDLE[%d][%d] = %d\n", i, j, matrix[i][j]);
                ++saddlesFound;
            }
        }
    }
    
    printf("\n%d saddle point(s) found.\n", saddlesFound);
    
    return 0;
}

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

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

  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
Похожие ответы