С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/40: Рейтинг темы: голосов - 40, средняя оценка - 4.70
0 / 0 / 0
Регистрация: 27.12.2018
Сообщений: 6

Массив: Определить количество "особых" элементов матрицы.

21.05.2019, 19:00. Показов 7835. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дана матрица A[N,M]. Определить количество "особых" элементов матрицы, считая элемент "особым", если в его строке слева от него находятся элементы меньшие его, а справа большие.
Под массив нужно выделить динамическую память.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.05.2019, 19:00
Ответы с готовыми решениями:

Определить количество «особых» элементов матрицы
Всем привет. Тут вот задачка на динамический двумерный массив : Задана матрица размером NxM. Определить количество «особых»...

Определить количество «особых» элементов матрицы
Добрый день! Помогите написать программу: Задана матрица размером NxM. Определить количество «особых» элементов матрицы, считая элемент...

Определить количество «особых» элементов матрицы
Задана матрица размером NxM. Определить количество «особых» элементов матрицы, считая элемент «особым», если в строке слева от него...

14
35 / 32 / 20
Регистрация: 26.02.2013
Сообщений: 184
21.05.2019, 19:31
Цитата Сообщение от Leemn Посмотреть сообщение
если в его строке слева от него находятся элементы меньшие его, а справа большие.
а как быть с крайними элементами в строках?
0
0 / 0 / 0
Регистрация: 27.12.2018
Сообщений: 6
21.05.2019, 19:35  [ТС]
Я думаю крайние не учитываютя они получается "особыми" уже никак не будут условие ведь выполняться не будет
0
35 / 32 / 20
Регистрация: 26.02.2013
Сообщений: 184
21.05.2019, 20:21
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
#include <iostream>
#include <ctime>
 
using namespace std;
 
void main()
{
    srand(time(0));
    int** matr, n, m, current = 0, total=0;
    cout << "Enter n: ";
    cin >> n;
    cout << "Enter m: ";
    cin >> m;
    matr = new int* [n];
    for (int i = 0; i < n; i++)
    {
        matr[i] = new int[m];
        for (int j = 0; j < m; j++)
        {
            //matr[i][j] = rand() % 100;//если нужны случайные числа
            matr[i][j] = i*j;
            cout << matr[i][j] << " ";
        }
        cout << endl;
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 1; j < m - 1; j++)
            if (matr[i][j] > matr[i][j - 1] && matr[i][j] < matr[i][j + 1]) 
                current++;
            else 
                current = 0;
        total += current;
        current = 0;
    }
    cout << "\n 'Special': " << total << endl;
    system("pause");
    delete[] matr;
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
21.05.2019, 20:51
VADIM290692, отталкиваясь от Вашего вполне рабочего кода, внёс небольшие корректировки (тип поменял на double, убрал лишнюю переменную total, освободил память и т.д.)
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
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int main()
{
    srand((int)time(0));
    int N, M, count=0;
    cout << "N="; cin >> N;
    cout << "M="; cin >> M;
    
    double **A = new double*[N]; 
    for (int i = 0; i < N; i++)
       A[i]=new double[M];
    
    for (int i = 0; i < N; i++)
    {        
        for (int j = 0; j < M; j++)
        {
        A[i][j]=rand()%9+1;        
        cout << A[i][j] << " ";
        }
        cout << "\n";
    }
    
    for (int i = 0; i < N; i++)            
        for (int j = 1; j < M-1; j++)
        if (A[i][j-1]<A[i][j] && A[i][j]<A[i][j+1]) count++; 
 
    cout << "count=" << count << endl;
    
    for (int i = 0; i < N; i++)
    delete[]A[i];
    delete[]A;
 
system("pause");
return 0;
}
0
35 / 32 / 20
Регистрация: 26.02.2013
Сообщений: 184
22.05.2019, 04:50
Ваша программа работает не совсем согласно заданию, она проверяет лишь два соседних элемента в строке и, например, для такой матрицы будет неправильный ответ
1 2 4 1
0 0 0 0
0 0 0 0
0 0 0 0
Ваша программа найдет "особый" элемент 2, что не соответствует заданию
1
168 / 146 / 32
Регистрация: 03.09.2018
Сообщений: 499
22.05.2019, 06:13
Цитата Сообщение от Leemn Посмотреть сообщение
слева от него находятся элементы меньшие его, а справа большие.
---

Цитата Сообщение от VADIM290692 Посмотреть сообщение
что не соответствует заданию
Чивооо???? Чего там не соответствует заданию - то?
0
35 / 32 / 20
Регистрация: 26.02.2013
Сообщений: 184
22.05.2019, 09:08
Цитата Сообщение от Leemn Посмотреть сообщение
если в его строке слева от него находятся элементЫ меньшие его, а справа большие.
я же привел пример некорректной работы
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
22.05.2019, 11:22
Цитата Сообщение от VADIM290692 Посмотреть сообщение
Ваша программа работает не совсем согласно заданию
VADIM290692, спасибо. действительно невнимательно прочитал - нужны не только соседние элементы, а все элементы слева и все элементы справа от особого.

но в таком случае и Ваш вариант тоже неправильно считает, например в строке 1 2 3 4 1 2 3 4 найдёт 2 элемента, а реально их нет. или это не так ?
1
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
22.05.2019, 11:31
C++
1
2
3
4
5
6
7
8
9
10
11
12
for( int i=1;i<n-1;i++)
{
 bool flag=true;
 int j;
  for(j=0;j<i;j++)
    flag&=arr[j]<arr[i];
   for(j=i+1;j<n;j++)
     flag&=arr[j]>arr[i];
 if(flag)
  cout<<arr[i];
 
}
1
35 / 32 / 20
Регистрация: 26.02.2013
Сообщений: 184
22.05.2019, 13:02
Цитата Сообщение от Yetty Посмотреть сообщение
но в таком случае и Ваш вариант тоже неправильно считает, например в строке 1 2 3 4 1 2 3 4 найдёт 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
#include <iostream>
#include <ctime>
 
using namespace std;
 
void main()
{
    srand(time(0));
    int** matr, n, m, current = 0, total = 0;
    cout << "Enter n: ";
    cin >> n;
    cout << "Enter m: ";
    cin >> m;
    matr = new int* [n];
    for (int i = 0; i < n; i++)
    {
        matr[i] = new int[m];
        for (int j = 0; j < m; j++)
        {
            //matr[i][j] = rand() % 100;//если нужны случайные числа
            matr[i][j] = i * j;
            //cin >> matr[i][j];//если нужно вводить с клавиатуры
            cout << matr[i][j] << " ";
        }
        cout << endl;
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 1; j < m - 1; j++)
            if (matr[i][j] > matr[i][j - 1] && matr[i][j] < matr[i][j + 1])
                current++;
            else
            {
                current = 0; break;
            }
        total += current;
        current = 0;
    }
    cout << "\n 'Special': " << total << endl;
    system("pause");
    delete[] matr;
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
22.05.2019, 13:29
Цитата Сообщение от VADIM290692 Посмотреть сообщение
мой исправленный вариант
разве он лучше ? подсчитает ли в этом случае число 19 в такой последовательности: 1 2 3 8 4 5 19 30 ? или такой пример: 1 2 3 8 4. сам алгоритм ошибочен.

правильный вариант - это алгоритм в сообщении №10 от ValeryS
1
35 / 32 / 20
Регистрация: 26.02.2013
Сообщений: 184
24.05.2019, 10:08
да, мой вариант снова не верен
Цитата Сообщение от Yetty Посмотреть сообщение
правильный вариант - это алгоритм в сообщении №10 от ValeryS
а Вы уверены в этом? и что же выведен вариант от ValeryS в вашем примере
Цитата Сообщение от Yetty Посмотреть сообщение
подсчитает ли в этом случае число 19 в такой последовательности: 1 2 3 8 4 5 19 30 ?
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
24.05.2019, 10:15
Цитата Сообщение от VADIM290692 Посмотреть сообщение
и что же выведен вариант от ValeryS в вашем примере
вариант ValeryS не решает данную задачу "в лоб" он не подсчитывает количество элементов, а выводит сами элементы
Цитата Сообщение от Yetty Посмотреть сообщение
1 2 3 8 4 5 19 30
должен вывести
2 3 и 19
1
35 / 32 / 20
Регистрация: 26.02.2013
Сообщений: 184
24.05.2019, 11:53
Leemn, доработал верный алгоритм ValeryS, для вашего случая
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
#include <iostream>
#include <ctime>
 
using namespace std;
 
void main()
{
    srand(time(0));
    int** A, n, m, count = 0;
    cout << "Enter n: ";
    cin >> n;
    cout << "Enter m: ";
    cin >> m;
    A = new int* [n];
    for (int i = 0; i < n; i++)
    {
        A[i] = new int[m];
        for (int j = 0; j < m; j++)
        {
            //A[i][j] = rand() % 100;//если нужны случайные числа
            A[i][j] = i * j;
            //cin >> A[i][j];//если нужно вводить с клавиатуры
            cout << A[i][j] << " ";
        }
        cout << endl;
    }
    for (int k = 0; k < n; k++)
    for (int i = 1; i < m - 1; i++)
    {
        bool flag = true;
        int j;
        for (j = 0; j < i; j++)
            flag &= A[k][j] < A[k][i];
        for (j = i + 1; j < m; j++)
            flag &= A[k][j] > A[k][i];
        if (flag)
            //cout << A[k][i] << endl;//если нужно выводить "особые" элементы
            count++;
    }
    for (int i = 0; i < n; i++)
        delete[] A[i];
        delete[] A;
    cout << "\n 'Special': " << count << endl;
    system("pause");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.05.2019, 11:53
Помогаю со студенческими работами здесь

Определить количество особых элементов матрицы
Задание: Задана матрица размером n*m. Определить кол-во особых элементов матрицы,считая за особые те элементы,которые меньше суммы...

Двумерный массив. Определить количество «особых» элементов массива.
Задан вещественный массив размером m×n. Определить количество «особых» элементов массива и вывести их на экран с указанием местоположения....

Определить количество особых элементов матрицы, считая элементы особым, если он больше суммы остальных элементов его столбца
Помогите решить. Дана матрица A размером nxm. Определить k - количество особых элементов массива A, считая его элементым особым, если он...

Дан двумерный массив. Определить количество особых элементов в массиве. Элемент считается особым, если в его строке с
Дан двумерный массив. Определить количество особых элементов в массиве. Элемент считается особым, если в его строке слева от него находятся...

Задана матрица размером NxM. Определить количество "особых" элементов матрицы
Помогите написать программу. Задана матрица размером NxM. Определить количество &quot;особых&quot; элементов матрицы, считая элемент...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru