Найти все седловые точки матрицы - C (СИ) (69971)
Формулировка задачи:
#include "stdafx.h"
#include "locale.h"
#include "math.h"
#include "stdio.h"
#include "conio.h"
#include "time.h"
#include "stdlib.h"
int main(void)
{
setlocale(LC_ALL, "rus");
int i, p, j, L, L2, pch, t = 0, min, min2, max, max2, k, k2;
double srar = 0, sum = 0;
int mas[3][3] = { { 5, 6, 4 }, { 3, 1, 2 }, { 3, 3, 3 } };
printf("Исходный массив:\n");
for (int i = 0; i < 3; ++i)// Вывод массива
{
for (int j = 0; j < 3; ++j)
{
printf(" %d", mas[i][j]);
}
printf("\n\n");
}
printf("\n");
for (i = 0; i<3; i++)//Вычисление седловых точек
{
min = mas[i][0];//минимум в строке
max2 = mas[i][0];//максимум в строке
k = 0;//записываем значения для сравнения с минимумом
k2 = 0;//записываем значения для сравнения с максимумом
for (j = 1; j<3; j++)
{
if (mas[i][j] < min)
{
min = mas[i][j];
k = j;
}
if (mas[i][j] > max2)
{
max2 = mas[i][j];
k2 = j;
}
}
max = mas[i][k];
L = 0;//записываем значения для сравнения с максимумом
min2 = mas[i][k2];
L2 = 0;//записываем значения для сравнения с минимумом
for (j = 1; j<3; j++){
if (mas[j][k] > max)
{
max = mas[j][k]; L = j;
}
if (mas[j][k] < min2)
{
min2 = mas[j][k2]; L2 = j;
}
}
if ((mas[L][k] == min && mas[L][k] == max))
{
printf("Седловая точка в строке %d = %d\n", i, max);
}
if (mas[L2][k2] == min2 && mas[L2][k2] == max2)
{
printf("Седловая точка в строке %d = %d\n", i, max2);
}
}Решение задачи: «Найти все седловые точки матрицы»
int** Create(int n,int m)
{
int i;
int** M=(int**)malloc(n*sizeof(int*));
for(i=0;i<n;i++)
{
M[i]=(int*)malloc(m*sizeof(int));
}
return M;
}
//----------------------------
void Free(int** M,int n)
{
int i;
for(i=0;i<n;i++)
free(M[i]);
free(M);
}
Объяснение кода листинга программы
В данном коде определены две функции: Create и Free. Функция Create принимает два аргумента типа int: n и m. Первый аргумент n определяет количество строк в создаваемой матрице, второй аргумент m определяет количество столбцов в создаваемой матрице. Функция выделяет память под массив указателей на int (int** M) с помощью оператора malloc, а затем в цикле выделяет память под каждый элемент матрицы с помощью оператора malloc. В конце функция возвращает массив указателей на int. Функция Free принимает два аргумента типа int: M и n. Первый аргумент M — это массив указателей на int, который необходимо освободить. Второй аргумент n определяет количество элементов в матрице. В цикле функция освобождает память под каждым элементом матрицы с помощью оператора free, а затем освобождает память под массивом указателей на int с помощью оператора free. Код выделяет память под матрицу и её элементы, а затем освобождает эту память.