Найти все седловые точки матрицы - C (СИ) (69971)

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

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

Для матрицы m на n вывести на экран все седловые точки. Элемент матрицы называется седловой точкой, если он является наименьшим в своей строке и одновременно наибольшим в своем столбце или наоборот.
#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);
        }
 
    }
Как это переделать, чтобы массив создавался через malloc. И как тогда координаты седловых точек определять? Через указатель?
Как обращаться к отдельным элементам массива имея создание массива через указатели?

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

textual
Листинг программы
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. Код выделяет память под матрицу и её элементы, а затем освобождает эту память.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5
Похожие ответы