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

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

21.05.2019, 19:00. Показов 7840. Ответов 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
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Old Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 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. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru