Вывести индексы седловых точек матрицы - 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;
- }
Объяснение кода листинга программы
Вывод: Код находит все седловые точки в заданной матрице и выводит их индексы. Список седловых точек:
- (2, 3)
- (2, 4)
- (-2, 7)
- (0, 0)
- (0, 2)
- (0, 3)
- (0, 4)
- (1, 2)
- (1, 3)
- (1, 4)
- (2, 0)
- (2, 1)
- (2, 2)
- (2, 3)
- (2, 4)
- (-2, 0)
- (-2, 1)
- (-2, 2)
- (-2, 3)
- (-2, 4)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д