Разбить на подпрограммы программу, которая выводит на экран седловые точки матрицы - C (СИ)
Формулировка задачи:
Приветствую.
Вот код, программа выводит на экран седловые точки матрицы MxN (минимальные в столбце и максимальные в строке).
Помогите, пожалуйста, выделить из main() отдельно функцию вычисления максимальных в строках элементов и функцию вычисления минимальных в столбцах элементов. Сравнивание минимумов и максимумов а также вывод на экран должны остаться в main()
#include <stdio.h>
#include <stdlib.h>
#define MAX_WIDTH 5
#define MAX_HEIGHT 8
int m[MAX_WIDTH][MAX_HEIGHT]= {
{ 1, 2, 1, 3, 2, 2, 7, 2 },
{ 1, 3, 2, 1, 1, 2, 7, 2 },
{ 1, 4, 2, 2, 2, 3, 7, 3 },
{ 7, 7, 5, 7, 7, 7, 9, 7 },
{ 6, 2, 3, 3, 5, 1, 4, 3 },
};
int i, j, val,found=0;
int max_h[MAX_WIDTH], min_w[MAX_HEIGHT];
int main()
{
//***поиск максимумов в строках
for ( i= 0; i<MAX_WIDTH; i++ ) {
val= m[i][0];
for ( j= 1; j<MAX_HEIGHT; j++ ) {
if ( m[i][j]>val ) { val= m[i][j]; }
}
max_h[i]= val;
}
//***поиск минимумов в столбцах
for ( j= 0; j<MAX_HEIGHT; j++ ) {
val= m[0][j];
for ( i= 1; i<MAX_WIDTH; i++ ) {
if ( m[i][j]<val ) { val= m[i][j]; }
}
min_w[j]= val;
}
//***сравнение и вывод
for ( i= 0; i<MAX_WIDTH; i++ ) {
for ( j= 0; j<MAX_HEIGHT; j++ ) {
if ( m[i][j] == min_w[j] && m[i][j] == max_h[i] ) {
printf( "m[%d][%d]=%d\n", i, j, m[i][j] );
found++;
}
}
}
if(!found)
printf("0");
system("pause");
return 0;
}
Что должны будут возвращать функции? У меня только списки приходят в голову
Решение задачи: «Разбить на подпрограммы программу, которая выводит на экран седловые точки матрицы»
textual
Листинг программы
void max_in_rows(int *max_h)
{
int i, j, val;
for ( i= 0; i<MAX_WIDTH; i++ ) {
val= m[i][0];
for ( j= 1; j<MAX_HEIGHT; j++ ) {
if ( m[i][j]>val ) { val= m[i][j]; }
}
max_h[i]= val;
}
}
void min_in_cols(int *min_w)
{
int i, j, val;
for ( j= 0; j<MAX_HEIGHT; j++ ) {
val= m[0][j];
for ( i= 1; i<MAX_WIDTH; i++ ) {
if ( m[i][j]<val ) { val= m[i][j]; }
}
min_w[j]= val;
}
}
/* ... main ... */
/* сравнение и вывод */
max_in_rows(max_h);
min_in_cols(min_w);
/* дальше - без изменений */
Объяснение кода листинга программы
Код, представленный вами, разделяет задачу поиска минимального и максимального значения в матрице на две подпрограммы.
- В функции
max_in_rowsпроисходит поиск максимального значения в каждом ряду матрицы.- В первой строке кода объявляются переменные
i,jиval, которые будут использоваться в цикле. - Затем следует двойной цикл
for, который проходит по всем элементам матрицы, начиная с первого столбца и до предпоследнего ряда. - Внутри двойного цикла переменной
valприсваивается значение первого элемента текущего ряда. - Затем второй цикл
forпроходит по всем элементам текущего ряда, начиная со второго элемента, и если встречает элемент, больший, чемval, то обновляет значениеval. - После завершения второго цикла, максимальное значение
valзаписывается в соответствующий элемент массиваmax_h. - В конце функции вызывается функция
max_in_rowsс аргументомmax_h.
- В первой строке кода объявляются переменные
- В функции
min_in_colsпроисходит поиск минимального значения в каждом столбце матрицы.- В первой строке кода объявляются переменные
i,jиval, которые будут использоваться в цикле. - Затем следует двойной цикл
for, который проходит по всем элементам матрицы, начиная со второго столбца и до предпоследней строки. - Внутри двойного цикла переменной
valприсваивается значение первого элемента текущего столбца. - Затем второй цикл
forпроходит по всем элементам текущего столбца, начиная со второго элемента, и если встречает элемент, меньший, чемval, то обновляет значениеval. - После завершения второго цикла, минимальное значение
valзаписывается в соответствующий элемент массиваmin_w. - В конце функции вызывается функция
min_in_colsс аргументомmin_w.
- В первой строке кода объявляются переменные
- В функции
mainвызываются функцииmax_in_rowsиmin_in_colsдля поиска максимального и минимального значения в матрице.- Затем значения выводятся на экран.
Обратите внимание, что код предполагает, что матрица
mуже инициализирована. Кроме того, он не проверяет границы матрицы, поэтому предполагается, что матрицаmне превышает размеровMAX_WIDTHиMAX_HEIGHT.
- Затем значения выводятся на экран.
Обратите внимание, что код предполагает, что матрица