Форум программистов, компьютерный форум CyberForum.ru

Необходимо каждый элемент массива сравнить с его 8 соседями и если он больше, чем любой из элементов с которыми сравнивается, его распечатать. - C++

Восстановить пароль Регистрация
 
Koss
1 / 1 / 0
Регистрация: 28.03.2010
Сообщений: 80
19.04.2012, 23:10     Необходимо каждый элемент массива сравнить с его 8 соседями и если он больше, чем любой из элементов с которыми сравнивается, его распечатать. #1
Всем привет, помогите решить следующую задачу, есть массив:
[3 4 5 6 7 8 9 4 2 10 44 2
2 3 4 5 6 1 2 9 2 2 42 0
1 4 5 8 7 2 9 1 2 4 4 10
5 6 9 2 4 9 5 8 2 3 10 4
4 10 2 4 5 5 10 2 0 10 11 2
1 4 5 8 7 2 9 1 2 4 4 10
2 3 4 5 6 1 2 9 2 2 42 0
3 4 5 6 7 8 9 4 2 10 44 2]
Необходимо каждый элемент массива сравнить с его 8 соседями и если он больше, чем любой из элементов с которыми сравнивается, его распечатать. Элементы расположенные на краях, у которых соответственно нет нескольких соседей в сравнении не участвуют. Да и массив может быть из произвольного количества элементов. Красным цветом помечены соседи, а зеленым элемент который сравнивается. За ранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2012, 23:10     Необходимо каждый элемент массива сравнить с его 8 соседями и если он больше, чем любой из элементов с которыми сравнивается, его распечатать.
Посмотрите здесь:

Заменить каждый элемент массива на среднее арифметическое его и его соседей слева и справа C++
C++ каждый элемент массива на среднее арифметическое этого элемента и его соседей.
Определить количество особых элементов матрицы, считая элементы особым, если он больше суммы остальных элементов его столбца C++
C++ сформируйте и выведите на экран массив из n элементов, где каждый элемент массива равен произведению двух предыдущих и его порядкового номера
C++ Получите новый массив, каждый элемент которого равен удвоенному числу соответствующего элемента исходного массива, если он больше числа A...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Heretiqu3
10 / 10 / 2
Регистрация: 19.04.2012
Сообщений: 20
20.04.2012, 00:26     Необходимо каждый элемент массива сравнить с его 8 соседями и если он больше, чем любой из элементов с которыми сравнивается, его распечатать. #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
53
#include <iostream>
#include <ctime>
using namespace std;
 
int main()
{
    srand(static_cast<unsigned int>(time(0)));
    rand();
    const int X = 10;
    const int Y = 15;
    int ar[10][15];
    for (int i = 0; i < X; ++i)
    {
        for (int j = 0; j < Y; ++j)
        {
            ar[i][j] = (1 + rand() % 9);
            cout << ar[i][j];
        }
        cout << endl;
    }
    cout << endl;
    for (int i = 0; i < X; ++i)
    {
        for (int j = 0; j < Y; ++j)
        {
            int k = (i - 1);
            int t = (j - 1);
            bool count = true;
            for (; k < i+2; ++k)
            {
                t -= 3;
                for (; t < j+2; ++t)
                {
                    if (((k >= 0) && (k < X)) && ((t >= 0) && (t < Y)) && ( (k != i) || (t != j)))
                    {
                        if (ar[i][j] < ar[k][t])
                        {
                            count = false;
                            break;
                        }
                    }
                }
            }
            if (count)
            {
                cout << ar[i][j] << " ";
            }
 
        }
    }
 
    return 0;
}
Koss
1 / 1 / 0
Регистрация: 28.03.2010
Сообщений: 80
20.04.2012, 10:41  [ТС]     Необходимо каждый элемент массива сравнить с его 8 соседями и если он больше, чем любой из элементов с которыми сравнивается, его распечатать. #3
Спасибо большое, но не могли бы вы немного пояснить некоторые строчки кода:
Цитата Сообщение от Heretiqu3 Посмотреть сообщение
C++
1
ar[i][j] = (1 + rand() % 9);
Цитата Сообщение от Heretiqu3 Посмотреть сообщение
C++
1
int k = (i - 1); int t = (j - 1); bool count = true; for (; k < i+2; ++k) { t -= 3; for (; t < j+2; ++t) { if (((k >= 0) && (k < X)) && ((t >= 0) && (t < Y)) && ( (k != i) || (t != j))) { if (ar[i][j] < ar[k][t]) { count = false; break; } } } } if (count) { cout << ar[i][j] << " "; } } }
Добавлено через 2 часа 11 минут
с первой строчкой разобрался, с утра чтот не то подумал конкретно процесс сравнения поясните, если незатруднит.
Heretiqu3
10 / 10 / 2
Регистрация: 19.04.2012
Сообщений: 20
20.04.2012, 12:00     Необходимо каждый элемент массива сравнить с его 8 соседями и если он больше, чем любой из элементов с которыми сравнивается, его распечатать. #4
Цитата Сообщение от Koss Посмотреть сообщение
Спасибо большое, но не могли бы вы немного пояснить некоторые строчки кода:



Добавлено через 2 часа 11 минут
с первой строчкой разобрался, с утра чтот не то подумал конкретно процесс сравнения поясните, если незатруднит.
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
53
54
55
56
#include <iostream>
#include <ctime>
using namespace std;
 
int main()
{
    srand(static_cast<unsigned int>(time(0)));
    rand();
    const int X = 10;
    const int Y = 15;
    int ar[10][15];
    for (int i = 0; i < X; ++i)
    {
        for (int j = 0; j < Y; ++j)
        {
            ar[i][j] = (1 + rand() % 9);
            cout << ar[i][j];
        }
        cout << endl;
    }
    cout << endl;
    for (int i = 0; i < X; ++i)
    {
        for (int j = 0; j < Y; ++j)
        {
            int k = (i - 1); //
            int t = (j - 1); // устанавливаем на верхнего левого соседа
            bool count = true;
            for (; k < i+2; ++k) // бежим по соседям i-1, i, i+1
            {
                for (; t < j+2; ++t) // бежим по соседям j-1, j, j+1
                {
                    if (((k >= 0) && (k < X)) && ((t >= 0) && (t < Y))) // если не вышли за границу массива
                    {
                        if (( (k != i) || (t != j))) // если сравниваемый элемент не он же
                        {
                            if (ar[i][j] <= ar[k][t]) // пока проверяющееся значение больше или равно соседнему, проверяем дальше, если нет - выходим из цикла
                            {
                                count = false;
                                break;
                            }
                        }
                    }
                }
                t -= 3; // сдвиг, ничего оригинальнее не придумал
            }
            if (count) // если все соседи меньше, выводим
            {
                cout << i << " " << j << " " << ar[i][j] <<  endl;
            }
 
        }
    }
 
    return 0;
}
вчера криво написал, сейчас работает как надо
Koss
1 / 1 / 0
Регистрация: 28.03.2010
Сообщений: 80
21.04.2012, 22:19  [ТС]     Необходимо каждый элемент массива сравнить с его 8 соседями и если он больше, чем любой из элементов с которыми сравнивается, его распечатать. #5
Подскажите еще такой момент, а как все найденные элементы поместить в новый массив? а то насколько я понял он принтует исходный массив только отсортированный, а мне нужно чтобы программа найденные элементы поместила в новый массив. Несовсем пойму как это сделать
helga185
0 / 0 / 0
Регистрация: 26.03.2013
Сообщений: 7
12.04.2013, 15:17     Необходимо каждый элемент массива сравнить с его 8 соседями и если он больше, чем любой из элементов с которыми сравнивается, его распечатать. #6
А вы не могли бы сделать реализацию программы в маткаде? Буду очень признательна!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2013, 15:24     Необходимо каждый элемент массива сравнить с его 8 соседями и если он больше, чем любой из элементов с которыми сравнивается, его распечатать.
Еще ссылки по теме:

C++ Из массива (15 элементов) получите новый массив, каждый элемент которого равен сумме соответствующего исходного элемента и его квадрата
C++ Дан массив вещественных чисел.Каждый элемент больше 10 заменить на его квадратный корень.
C++ Каждый равный нулю элемент массива заменить полусуммой его соседних элементов

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

Или воспользуйтесь поиском по форуму:
Volodya 1
0 / 0 / 0
Регистрация: 17.09.2013
Сообщений: 4
17.09.2013, 15:24     Необходимо каждый элемент массива сравнить с его 8 соседями и если он больше, чем любой из элементов с которыми сравнивается, его распечатать. #7
Koss, здраствуйте!не могли бы вы решить следующую задачу:
4. Задана матрица размером . Получить массив B, присвоив его k-му элементу значение равное сумме элементов k-го столбца.
Yandex
Объявления
17.09.2013, 15:24     Необходимо каждый элемент массива сравнить с его 8 соседями и если он больше, чем любой из элементов с которыми сравнивается, его распечатать.
Ответ Создать тему
Опции темы

Текущее время: 06:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru