1 / 1 / 1
Регистрация: 01.05.2011
Сообщений: 9
1

Подсчитать количество локальных минимумов матрицы

02.05.2011, 00:38. Показов 2359. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан двумерный массив NxN.
1. Элемент матрицы называется локальным минимумом, если он строго меньше
всех имеющихся у него соседей.
Подсчитать количество локальных минимумов
заданной матрицы размером 10 на 10 ( оформить в виде процедуры ).

2. Найти сумму модулей эл-тов, расположенных выше главной диагонали
(оформить в виде функции).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.05.2011, 00:38
Ответы с готовыми решениями:

Подсчитать количество локальных минимумов матрицы
Подсчитать количество локальных минимумов матрицы размерности 4х4. Локальный минимум - элемент,...

Подсчитать количество локальных минимумов матрицы
Элементы матрицы могут быть любого типа с плавающей точкой.Размещение матрицы в динамической...

Подсчитать количество локальных минимумов матрицы
Дали три задачи на зачетную. С массивами у меня более менее нормально, но вот сами задания, что от...

Подсчитать количество локальных минимумов матрицы
Дано матрицу . Разделить выходную матрицу на значения y=2/x, где x=1,5. Подсчитать кол-во локальных...

5
4635 / 2462 / 874
Регистрация: 29.11.2010
Сообщений: 5,416
02.05.2011, 02:39 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

#1
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int IsLocalMinimum(int **matrix, int matrix_size, size_t i, size_t j) {
  size_t k, l;
  size_t k_from = ((i == 0) ? i : i - 1);
  size_t l_from = ((j == 0) ? j : j - 1);
  size_t k_to   = ((i < (matrix_size - 1)) ? i + 1 : i);
  size_t l_to   = ((j < (matrix_size - 1)) ? j + 1 : j);
  for (k = k_from; k <= k_to; ++k)
    for (l = l_from; l <= l_to; ++l) 
      if (matrix[k][l] <= matrix[i][j] && (i != k || j != l))
        return 0;
  return 1;
}
 
int main(int argc, char *argv[]) {
  srand(time(NULL));
 
  size_t matrix_size = 10 + rand() % 5;
  int **matrix = (int**)malloc(sizeof(int*) * matrix_size); 
 
  size_t i, j;
  for (i = 0; i < matrix_size; ++i) {
    matrix[i] = (int*)malloc(sizeof(int) * matrix_size);
    for (j = 0; j < matrix_size; ++j)
      printf("%5d", matrix[i][j] = rand() % 101 - 50);
    printf("\n");
  }
 
  for (i = 0; i < matrix_size; ++i)
    for (j = 0; j < matrix_size; ++j)
      if (IsLocalMinimum(matrix, matrix_size, i, j) == 1)
        printf("Local minimum at (%d, %d) = %d.\n", i, j, matrix[i][j]);
 
  for (i = 0; i < matrix_size; ++i)
    free(matrix[i]);
  free(matrix);
  return 0;
}
2
1 / 1 / 1
Регистрация: 01.05.2011
Сообщений: 9
02.05.2011, 11:58  [ТС] 3
благодарю)
0
4635 / 2462 / 874
Регистрация: 29.11.2010
Сообщений: 5,416
03.05.2011, 00:11 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

№1 + №2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int IsLocalMinimum(int **matrix, int matrix_size, size_t i, size_t j) {
  size_t k, l;
  size_t k_from = ((i == 0) ? i : i - 1);
  size_t l_from = ((j == 0) ? j : j - 1);
  size_t k_to   = ((i < (matrix_size - 1)) ? i + 1 : i);
  size_t l_to   = ((j < (matrix_size - 1)) ? j + 1 : j);
  for (k = k_from; k <= k_to; ++k)
    for (l = l_from; l <= l_to; ++l) 
      if (matrix[k][l] <= matrix[i][j] && (i != k || j != l))
        return 0;
  return 1;
}
 
int SuperdiagonalSum(int **matrix, int matrix_size) {
  int result = 0;
  size_t i, j;
  for (i = 0; i < matrix_size - 1; ++i)
    for (j = i + 1; j < matrix_size; ++j)
      result += matrix[i][j];
  return result;
}
 
int main(int argc, char *argv[]) {
  srand(time(NULL));
 
  size_t matrix_size = 10 + rand() % 5;
  int **matrix = (int**)malloc(sizeof(int*) * matrix_size); 
 
  size_t i, j;
  for (i = 0; i < matrix_size; ++i) {
    matrix[i] = (int*)malloc(sizeof(int) * matrix_size);
    for (j = 0; j < matrix_size; ++j)
      printf("%5d", matrix[i][j] = rand() % 101 - 50);
    printf("\n");
  }
 
  for (i = 0; i < matrix_size; ++i)
    for (j = 0; j < matrix_size; ++j)
      if (IsLocalMinimum(matrix, matrix_size, i, j) == 1)
        printf("Local minimum at (%d, %d) = %d.\n", i, j, matrix[i][j]);
 
  printf("Superdiagonal sum = %d.\n", SuperdiagonalSum(matrix, matrix_size));
 
  for (i = 0; i < matrix_size; ++i)
    free(matrix[i]);
  free(matrix);
  return 0;
}
2
0 / 0 / 0
Регистрация: 14.10.2016
Сообщений: 5
20.02.2018, 12:00 5
lemegeton, а можно ли как-то сделать функцию нахождения локальных минимумов только по границам матрицы (то есть кроме внутренних элементов матрицы)
0
0 / 0 / 0
Регистрация: 14.10.2016
Сообщений: 5
27.02.2018, 11:57 6
mol`, у тебя работает программа , которую скинули ?
0
27.02.2018, 11:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.02.2018, 11:57
Помогаю со студенческими работами здесь

Подсчитать количество локальных минимумов заданной матрицы
Ребят помогите решить задачу. Элемент матрицы называется локальным минимумом, если он строго...

Подсчитать количество локальных минимумов заданной матрицы
Помогите пожалуйста решить задачку =) Элемент матрицы называется локальным минимумом, если он...

Подсчитать количество локальных минимумов заданной матрицы
Здравствуйте. У меня вопрос слегка необычный, а точнее просьба, у меня есть программа, которая...

Подсчитать количество локальных минимумов заданной матрицы
Элемент матрицы называется локальным минимумом, если он строго меньше всех имеющихся у него...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru