Вывести индексы седловых точек матрицы - 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)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д