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

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

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

Для матрицы m на n вывести на экран все седловые точки. Элемент матрицы называется седловой точкой, если он является наименьшим в своей строке и одновременно наибольшим в своем столбце или наоборот.
Листинг программы
  1. #include "stdafx.h"
  2. #include "locale.h"
  3. #include "math.h"
  4. #include "stdio.h"
  5. #include "conio.h"
  6. #include "time.h"
  7. #include "stdlib.h"
  8.  
  9. int main(void)
  10. {
  11. setlocale(LC_ALL, "rus");
  12. int i, p, j, L, L2, pch, t = 0, min, min2, max, max2, k, k2;
  13. double srar = 0, sum = 0;
  14. int mas[3][3] = { { 5, 6, 4 }, { 3, 1, 2 }, { 3, 3, 3 } };
  15. printf("Исходный массив:\n");
  16. for (int i = 0; i < 3; ++i)// Вывод массива
  17. {
  18. for (int j = 0; j < 3; ++j)
  19. {
  20. printf(" %d", mas[i][j]);
  21. }
  22. printf("\n\n");
  23. }
  24. printf("\n");
  25. for (i = 0; i<3; i++)//Вычисление седловых точек
  26. {
  27. min = mas[i][0];//минимум в строке
  28. max2 = mas[i][0];//максимум в строке
  29. k = 0;//записываем значения для сравнения с минимумом
  30. k2 = 0;//записываем значения для сравнения с максимумом
  31.  
  32. for (j = 1; j<3; j++)
  33. {
  34. if (mas[i][j] < min)
  35. {
  36. min = mas[i][j];
  37. k = j;
  38. }
  39. if (mas[i][j] > max2)
  40. {
  41. max2 = mas[i][j];
  42. k2 = j;
  43. }
  44. }
  45. max = mas[i][k];
  46. L = 0;//записываем значения для сравнения с максимумом
  47. min2 = mas[i][k2];
  48. L2 = 0;//записываем значения для сравнения с минимумом
  49. for (j = 1; j<3; j++){
  50. if (mas[j][k] > max)
  51. {
  52. max = mas[j][k]; L = j;
  53. }
  54. if (mas[j][k] < min2)
  55. {
  56. min2 = mas[j][k2]; L2 = j;
  57. }
  58. }
  59. if ((mas[L][k] == min && mas[L][k] == max))
  60. {
  61. printf("Седловая точка в строке %d = %d\n", i, max);
  62. }
  63. if (mas[L2][k2] == min2 && mas[L2][k2] == max2)
  64. {
  65. printf("Седловая точка в строке %d = %d\n", i, max2);
  66. }
  67. }
Как это переделать, чтобы массив создавался через malloc. И как тогда координаты седловых точек определять? Через указатель?
Как обращаться к отдельным элементам массива имея создание массива через указатели?

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

textual
Листинг программы
  1. int** Create(int n,int m)
  2. {
  3.     int i;
  4.     int** M=(int**)malloc(n*sizeof(int*));
  5.     for(i=0;i<n;i++)
  6.     {
  7.         M[i]=(int*)malloc(m*sizeof(int));
  8.     }
  9.     return M;
  10. }
  11. //----------------------------
  12. void Free(int** M,int n)
  13. {
  14.     int i;
  15.     for(i=0;i<n;i++)
  16.         free(M[i]);
  17.     free(M);
  18. }

Объяснение кода листинга программы

В данном коде определены две функции: 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы