0 / 0 / 0
Регистрация: 21.12.2017
Сообщений: 8
1

Локальные максимумы в двумерном массиве

21.12.2017, 04:52. Показов 3504. Ответов 4
Метки нет (Все метки)

Здравствуйте, нуждаюсь в помощи

Необходимо найти в двумерном массиве(любого размера) все локальные максимумы(точки, все соседи которых имеют значения меньше), затем заменить локальные максимумы на звездочки, а остальные значения на точки.

Как заменить я знаю, это можно не писать, вся проблема в алгоритме "вычисления" этих локальных максимумов. Учитывая что двумерный массив не статичный, а может быть любого размера, то тупо "подогнать" условия для каждой ячейки будет не очень правильно, поэтому я слегка запутался и прошу помощи в составлении алгоритма.

Я перепробовал много всего и не буду скидывать свои неуспешные попытки сделать данное задание, а скинуть лишь код с базой,
который я составил(создание двумерного массива на основе рандомных чисел и банальное вычисление максимального значение в массиве)
Кликните здесь для просмотра всего текста
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
#include "stdafx.h" 
#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h> 
#include <time.h> 
 
int main()
{
    int i, j, n, m; 
    int max = 0;
 
    printf("Input size N: ");
    scanf_s("%d", &n);
    printf("Input size M: ");
    scanf_s("%d", &m);
 
    int **a = new int*[n];
    for (i = 0; i < n; i++)
        a[i] = new int[n];
 
    srand(time(NULL));
 
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++) {
            a[i][j] = rand() % 11;
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }
 
    printf("\nafter\n");
 
    max = a[0][0];
 
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (a[i][j] >= max)
            {
                max = a[i][j];              
            }
        }
    }
    printf("max=%d\n", max);
 
    _getch();
    return 0;
}


Спасибо, надеюсь на вашу помощь
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.12.2017, 04:52
Ответы с готовыми решениями:

Найти все локальные минимумы и максимумы в заданном массиве
В университете задали написать программу, уже не первую неделю над ней бьюсь. Тема: одномерные...

Найти локальные максимумы с++
Даны три массива A, B, C. Найти общее количество локальных максимумов в этих массивах. С...

Как найти локальные максимумы?
Подскажите пожалуйста как найти локальные максимумы??

Заменить все локальные максимумы на 0
Заполнить массив n целых чисел числами из потока ввода. Дополнительного массива не использовать....

4
7423 / 5018 / 2890
Регистрация: 18.12.2017
Сообщений: 15,694
21.12.2017, 06:17 2
так что не получается? примерно так должно определять

C++
1
2
3
4
5
6
for (i = 0; i < a; i++)
{
for (j = 0; j < b; j++)
if ((c[i][j] >c[i][j+1]) && (c[i][j]>c[i][j-1]) && (c[i][j]>c[i+1][j]) && (c[i][j]>c[i-1][j]))
cout <<" local_max c["<<i<<"]["<<j<<"]="<<c[i][j]<<" ";
}
Добавлено через 12 минут
скобки лишние возле неравенств автоматом втулил
0
0 / 0 / 0
Регистрация: 21.12.2017
Сообщений: 8
21.12.2017, 08:02  [ТС] 3
Если сделать так, то вылезает ошибка "Нарушение прав при чтении"
Я полагаю что значения убегают за пределы массива, поэтому, думаю сейчас как убрать
0
7423 / 5018 / 2890
Регистрация: 18.12.2017
Сообщений: 15,694
21.12.2017, 18:04 4
Лучший ответ Сообщение было отмечено Multiple как решение

Решение

кстати определись с понятием "соседи"
соседи - это соседи по строке и столбцу или по диагонали тоже? - потому что я приводил фрагмент кода только для соседей по строке и столбцу - если ещё и по диагонали - будет на четыре неравенства больше.

Цитата Сообщение от Multiple Посмотреть сообщение
Если сделать так, то вылезает ошибка "Нарушение прав при чтении"
Я полагаю что значения убегают за пределы массива, поэтому, думаю сейчас как убрать
Мой компилятор к этому относится нормально. Если твой даёт ошибку сделай несколько if чтобы определить
элементы, которые находятся на первой и последней строке, левом или правом столбце - для них сделай
условие с меньшим количеством неравенств (а для угловых с ещё меньшим).

Добавлено через 53 минуты
примерно так

для угловых c учётом диагональных соседей

if (c[0][0]>c[0][1] && c[0][0]>c[1][1] && c[0][0]>c[1][0]) cout ...
if (c[0][b-1]>c[0][b-2] && c[0][b-1]>c[1][b-2] && c[0][b-1]>c[1][b-1]) cout ...
if (c[a-1][b-1]>c[a-1][b-2] && c[a-1][b-1]>c[a-2][b-2] && c[a-1][b-1]]>c[a-2][b-1]) cout ...
if (c[a-1][0]>c[a-2][0] && c[a-1][1]>c[a-2][1] && c[a-1][0]>c[a-1][1]) cout ...

для внешних неугловых

for (j=1; j<b-1; j++) if (c[0][j]> ... дальше сам
for (i=1; i<a-1; i++) if (c[i][b-1]> ...дальше сам
for (j=1; j<b-1; j++) if (c[a-1][j]> ...дальше сам
for (i=1; i<a-1; i++) if (c[i][0]> ...дальше сам

для внутренних уменьшить на единицу с каждой стороны циклы в for

for (i = 1; i < a-1; i++)

for (j = 1; j < b-1; j++)
1
0 / 0 / 0
Регистрация: 21.12.2017
Сообщений: 8
22.12.2017, 02:08  [ТС] 5
Спасибо большое! Все гениальное просто
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.12.2017, 02:08
Помогаю со студенческими работами здесь

Вывести все локальные максимумы массива
Доброго времени суток ! Ребят, помогите набросать код Вот задача: ввести длину массива и массив...

Дан список, переместить локальные максимумы
Дан список из n целых чисел {a}_{1},{a}_{2},..{a}_{n}. Переместить в начало списка все элементы,...

Найти локальные максимумы вектора (STL)
Задания к выполнению. 1. Создать вектор (пусть это будет целочисленный вектор). ...

Заменить все локальные минимумы и максимумы данной матрицы на 0
Дана матрица размера M x N. Элемент называется локальным минимумом (максимумом), если он меньше...


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

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

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