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

максимальный из элементов встречающийся в матрице более 1 раза

28.04.2013, 10:34. Показов 6263. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
с комментариями пожалуйста))))
вот половина программы доработайте пожалуйста..
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
#include "stdafx.h" // подключение файла перекомпилированного заголовка
#include "iostream" // подключение библиотеки ввод/вывод
#include "math.h" // подключение библиотеки тригонометрических функций
using namespace std;
 
void main(void) // головная программа
{
setlocale (0, "Rus"); // русский язык
int a;
do
{
int count=0; // счетчик
int count1=0; 
int n; // переменая для количества строк
int m; //переменая для количества столбцов
int i; //обьяв. переменую
int j,; //обьяв. переменую
cout<<"введите количество строк"<<endl;
        cin>>n;// вводим кол строк
cout<<"введите количество столбцов"<<endl;
        cin>>m;// водим количество столбцов
        int**mass=new int*[n];                  //      динамическое 
for (i=1; i<=n; i++)                    //      выделение
    mass[i]=new int[m];             //          памяти под массив
cout<<"введите элементы массива"<<endl;
 for (i=1; i<=n; i++)
    {
        for (j=1; j<=m; j++)
          { 
                    cin>>mass[i][j];// водим массив
          }
    } 
  for (i=1; i<=n; i++)
  {    
        for (j=1; j<=m; j++)
        {         
            if (mass[i][j]==0)// если не равно 0 тогда....
             {
                count1++;//нарастили счетчик
             }
        }
      if (!count1)// если коли. нулевых элементов в массиве равно количество строк тогда
        {
          count++;// нарастили счетчик
        }
        count1=0;// обнулили счетчик
   }  
    cout<<"количество строк не содержащие нулевые эжлементы "<<count<<endl;// выводим результат
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.04.2013, 10:34
Ответы с готовыми решениями:

Найти в матрице максимальный элемент, встречающийся более одного раза
Есть матрица, необходимо найти максимальный элемент, встречающийся более одного раза. Максимальный элемент нашел (с помощью встроенной...

Двумерные массивы. Найти максимальный среди элементов, повторившихся более одного раза
Дан массив A. Найти максимальный среди элементов, повторившихся более одного раза.

Найти максимальное число встречающееся в матрице более одного раза
1 пункт выполнен, не могу реализовать 2 и 3 через многофункциональность. Дана целочисленная матрица. Размерность матрицы задается в...

30
101 / 102 / 43
Регистрация: 06.03.2012
Сообщений: 478
28.04.2013, 22:09
Вы мне можете сказать,вы хоть смотрели код который сюда подсунули?
У вас программа считает строки которые не содержат нулевые элементы
0
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
29.04.2013, 11:28
Проще переписать

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <iostream>
#include <ctime>
#include<stdlib.h>
#include<time.h>
#include <windows.h>
 
using namespace std;
 
int main()
{
   SetConsoleCP(1251);
   SetConsoleOutputCP(1251);
 
    srand(time(NULL));
    int n = 0;
    int sum = 0;
    int max =0;
    int sum_max=0;
   cout<<"введите количество строк"<<endl;
    cin >> n; // Считываем с клавиатуры n
    int **a = new int* [n]; // Создаем массив указателей
    for (int i = 0; i < n; i++)
    {
        a[i] = new int [n]; // Создаем элементы
    }
    // А дальше работа как с обычным массивом.
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            a[i][j] = rand() % 10;//заполняем случайными
            cout << a[i][j] << " "; // Вывести элементы
            if (a[i][j]  == 0 )//ищем нулевые элементы
            {
                sum++;        //суммируем
            }
            if (a[i][j] > max) //ищем максимальный элемент
            {
                max = a[i][j];//сохраняем
            }
 
        }
        cout << endl; // Двумерный массив. Строка кончилась, переводим строку
        //и проходим по массиву
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (a[i][j]  == max )//определяем количество максимальных элементов
            {
              sum_max++;      //суммируем
            }
         }
     }
// выводим результат
    cout << "Нулевых элементов =" << sum << endl;
    if (sum_max > 1) //если макс эелементов больше 1 печатаем
    {
 
      cout << "Максимальных элементов =" << sum_max << endl;
       cout << "Максимальный элемент  = " << max << endl;
    }
    else   //если 1 выводим значение
     cout << "Максимальный элемент 1 = " << max << endl;
    // Удаление массива
    for (int i = 0; i < n; i++)
    {
        delete[]a[i]; // Удаляем каждый элемент
    }
    delete [] a; // А потом массив
    return 0;
}
1
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 43
04.05.2013, 08:39  [ТС]
эта полная задача, просто мне нужно было ее доработать именно нахождением максимума

Добавлено через 11 минут
не правильно работает ваша прогграмма

Добавлено через 38 секунд
не правильно работает ваша прогграмма
0
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
04.05.2013, 11:06
Что именно не правильно работает?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            a[i][j] = rand() % 10;//заполняем случайными
            cout << a[i][j] << " "; // Вывести элементы
          
            if (a[i][j] > max) //ищем максимальный элемент
            {
                max = a[i][j];//сохраняем
            }
 
        }
находим максимальный элемент,а у вас программа считает строки которые не содержат нулевые элементы
0
26 / 26 / 3
Регистрация: 10.04.2013
Сообщений: 167
04.05.2013, 11:34
Максимуму нужно присвоить изначально нулевой елемент массива. типо a[0][0] чтоль..
0
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
04.05.2013, 12:29
В этом коде обязательно иначе просто не с чем будет сравнивать.
0
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 43
04.05.2013, 17:00  [ТС]
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
void main(void) // головная программа
{
setlocale (0, "Rus"); // русский язык
int a;
do
{
int count=0; // счетчик
int count1=0; 
int n; // переменая для количества строк
int m; //переменая для количества столбцов
int i; //обьяв. переменую
int j; //обьяв. переменую
cout<<"введите количество строк"<<endl;
        cin>>n;// вводим кол строк
cout<<"введите количество столбцов"<<endl;
        cin>>m;// водим количество столбцов
        int**mass=new int*[n];                  //      динамическое 
for (i=1; i<=n; i++)                    //      выделение
    mass[i]=new int[m];             //          памяти под массив
cout<<"введите элементы массива"<<endl;
 for (i=1; i<=n; i++)
    {
        for (j=1; j<=m; j++)
          { 
                    cin>>mass[i][j];// водим массив
          }
    } 
  for (i=1; i<=n; i++)
  {    
        for (j=1; j<=m; j++)
        {         
            if (mass[i][j]==0)// если не равно 0 тогда....
             {
                count1++;//нарастили счетчик
             }
        }
      if (!count1)// если коли. нулевых элементов в массиве равно количество строк тогда
        {
          count++;// нарастили счетчик
        }
        count1=0;// обнулили счетчик
   }  
    cout<<"количество строк не содержащие нулевые эжлементы "<<count<<endl;// выводим результат
    int max =0;
    int sum_max=0;
    if (mass[i][j] > max) //ищем максимальный элемент
            {
                max =mass[i][j];//сохраняем
            }
 
        cout << endl; // Двумерный массив. Строка кончилась, переводим строку
        //и проходим по массиву
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <=m; j++)
        {
            if (mass[i][j]  == max )//определяем количество максимальных элементов
            {
              sum_max++;      //суммируем
            }
         }
     }
    if (sum_max > 1) //если макс эелементов больше 1 печатаем
    {
 
      cout << "Максимальных элементов =" << sum_max << endl;
       cout << "Максимальный элемент  = " << max << endl;
    }
    else   //если 1 выводим значение
     cout << "Максимальный элемент 1 = " << max << endl;
cout << "Повторить нажми 0" << endl; // вывод сообщения на экран
cin>> a;
}
 while(a==0);
}
 
[size="1"][color="grey"][I]Добавлено через 33 секунды[/I][/color][/size]
вот он считает все строки без нулей а дальше ошибку выдает, в чем проблема?
 
[size="1"][color="grey"][I]Добавлено через 7 минут[/I][/color][/size]
void main(void) // головная программа
{
setlocale (0, "Rus"); // русский язык
int a;
do
{
int count=0; // счетчик
int count1=0; 
int n; // переменая для количества строк
int m; //переменая для количества столбцов
int i; //обьяв. переменую
int j; //обьяв. переменую
cout<<"введите количество строк"<<endl;
        cin>>n;// вводим кол строк
cout<<"введите количество столбцов"<<endl;
        cin>>m;// водим количество столбцов
        int**mass=new int*[n];                  //      динамическое 
for (i=1; i<=n; i++)                    //      выделение
    mass[i]=new int[m];             //          памяти под массив
cout<<"введите элементы массива"<<endl;
 for (i=1; i<=n; i++)
    {
        for (j=1; j<=m; j++)
          { 
                    cin>>mass[i][j];// водим массив
          }
    } 
  for (i=1; i<=n; i++)
  {    
        for (j=1; j<=m; j++)
        {         
            if (mass[i][j]==0)// если не равно 0 тогда....
             {
                count1++;//нарастили счетчик
             }
        }
      if (!count1)// если коли. нулевых элементов в массиве равно количество строк тогда
        {
          count++;// нарастили счетчик
        }
        count1=0;// обнулили счетчик
   }  
    cout<<"количество строк не содержащие нулевые эжлементы "<<count<<endl;// выводим результат
    int max =0;
    int sum_max=0;
     for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <=m; j++)
        {
    if (mass[i][j] > max) //ищем максимальный элемент
            {
                max =mass[i][j];//сохраняем
            }
        }
     }
 
        cout << endl; // Двумерный массив. Строка кончилась, переводим строку
        //и проходим по массиву
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <=m; j++)
        {
            if (mass[i][j]  == max )//определяем количество максимальных элементов
            {
              sum_max++;      //суммируем
            }
         }
     }
    if (sum_max > 1) //если макс эелементов больше 1 печатаем
    {
       cout << "Максимальный элемент  = " << max << endl;
    }
    else   //если 1 выводим значение
     cout << "Максимальный элемент 1 = " << max << endl;
cout << "Повторить нажми 0" << endl; // вывод сообщения на экран
cin>> a;
}
 while(a==0);
}
все работает)))) только не правильно я ввожу матрицу
1 2
1 3
Максимум больше 1 раза=1
а у меня выводит 3

Добавлено через 3 минуты
при этом он еще должен при отсутствии повторяющихся элементов вывести сообщение что посторяющихся элементов нет)
0
26 / 26 / 3
Регистрация: 10.04.2013
Сообщений: 167
04.05.2013, 17:18
не понял, количество максимальных елементов? в каждом рядку будет полюбом макс елемент знач сколько рядков сколько и макс елементов, а если смотреть
cout << "Максимальных элементов =" << sum_max << endl; - вот тут как я понял, ты почему то каждый елемент сравниваешь с каждым елементом масива, тоесть ты нашла максимум в рядку 30, и проверяешь весь масив, равен ли елемент а[i][j] 30ти, если равен то подымаем счетчик
0
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
04.05.2013, 17:54
Если я правильно вас понял вы не верно сформулировали свою задачу.С макс элементами все работает правильно.Но вы наверное имели в виду повторяющиеся значения,тогда все будет совершенно по другому.Чтобы определить повторяющиеся значения вам для начала нужно упорядочить свой массив и проверять рядом стоящие значения на равенство.А макс это есть наибольший элемент он в любом случае будет 1.Другое дело,что повторяться он может сколько угодно а программа и определяет его.
C++
1
cout << "Максимальный элемент больше 1= " << max << endl;
C++
1
cout << "Максимальных элементов 1 = " << max << endl;
0
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 43
04.05.2013, 18:26  [ТС]
все правильно сформулированно, максимальный из элементов встречающийся в матрице более 1 раза

Добавлено через 1 минуту
можете помочь пожалуйста, а то у меня не получается даже отсортировать его(

Добавлено через 10 минут
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
void main(void) // головная программа
{
setlocale (0, "Rus"); // русский язык
int a;
do
{
int count=0; // счетчик
int count1=0; 
int n; // переменая для количества строк
int m; //переменая для количества столбцов
int i; //обьяв. переменую
int j; //обьяв. переменую
cout<<"введите количество строк"<<endl;
        cin>>n;// вводим кол строк
cout<<"введите количество столбцов"<<endl;
        cin>>m;// водим количество столбцов
        int**mass=new int*[n];                  //      динамическое 
for (i=1; i<=n; i++)                    //      выделение
    mass[i]=new int[m];             //          памяти под массив
cout<<"введите элементы массива"<<endl;
 for (i=1; i<=n; i++)
    {
        for (j=1; j<=m; j++)
          { 
                    cin>>mass[i][j];// водим массив
          }
    } 
  for (i=1; i<=n; i++)
  {    
        for (j=1; j<=m; j++)
        {         
            if (mass[i][j]==0)// если не равно 0 тогда....
             {
                count1++;//нарастили счетчик
             }
        }
      if (!count1)// если коли. нулевых элементов в массиве равно количество строк тогда
        {
          count++;// нарастили счетчик
        }
        count1=0;// обнулили счетчик
   }  
    cout<<"количество строк не содержащие нулевые эжлементы "<<count<<endl;// выводим результат
for(int k = 1; k <=m * n; k ++)
        for(int i = 1; i <=n; i ++)
            for(int j = 1; j <=m; j ++)
            {
                if((mass[i][j] > mass[i][j + 1]) && j != n - 1)
                {
                    int tmp = mass[i][j];
                    mass[i][j] = mass[i][j + 1];
                    mass[i][j + 1] = tmp;
                }
                if((mass[i + 1][0] < mass[i][j]) && (i != m - 1))
                {
                    int tmp = mass[i + 1][0];
                    mass[i + 1][0] = mass[i][j];
                   mass[i][j] = tmp;
                }
            }
            for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            cout<<mass[i][j]<<"\t";
        }
        cout<<"\n\n\n\n";
            }
cout << "Повторить нажми 0" << endl; // вывод сообщения на экран
cin>> a;
}
 while(a==0);
}
вот отсортировала но почему то выдает ошибку(
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
04.05.2013, 19:16
Вот такой вариант набросал:
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 <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    std::vector<int> v;
 
    std::cout << "Введите последовательность чисел: ";
        std::istream_iterator<int> iit( std::cin );
        std::istream_iterator<int> eos;
        std::copy( iit, eos, std::back_inserter(v) );
 
        std::ostream_iterator<int> oit( std::cout, " " );
 
        // Сортируем
        std::sort( v.begin(), v.end() );
 
        // Удаляем не парные элементы
        int* prev = nullptr;
        auto it = v.begin();
        for( auto& e : v )
        {
                if( prev )
                {
                        if( *prev == e ) *it++ = e;
                }
                prev = &e;
        }
 
        // Удаляем лишние пары
        it = std::unique( v.begin(), it );
        v.resize( std::distance( v.begin(), it ) );
 
    // Находим максимум
        auto maxit = std::max_element( v.begin(), v.end() );
        if( maxit == v.end() )
        {
                std::cout << "Нет одинаковых элементов";
        }
        else
        {
                std::cout << "Максимальный повторяющийся элемент равен " << *maxit;
        }
 
        std::cout << std::endl;
        
    return 0;
}
https://ideone.com/YP4nyT
Вероятно, можно использовать стандартные алгоритмы для удаления неповторяющихся элементов. Мне что-то в голову не пришло.
0
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 43
04.05.2013, 19:23  [ТС]
я в этом коде ничего не понимаю, что это за сортировка такая?что за язык?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
04.05.2013, 19:25
Цитата Сообщение от Туся111 Посмотреть сообщение
что это за сортировка такая?что за язык?
Сортировка стандартная std::sort
Язык C++ 11
0
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 43
04.05.2013, 19:32  [ТС]
я не понимаю так, мне нужно так как я делала, это возможно?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
04.05.2013, 19:53
Цитата Сообщение от Туся111 Посмотреть сообщение
это возможно?
Возможно. Сформулируйте задание ПОЛНОСТЬЮ. Постараюсь Вам помочь.
0
127 / 131 / 11
Регистрация: 25.12.2011
Сообщений: 443
05.05.2013, 00:56
Цитата Сообщение от Туся111 Посмотреть сообщение
максимальный из элементов встречающийся в матрице более 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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
#include <fstream>
#include <iomanip>
#include <algorithm>
#include <vector>
#include <map>
 
using namespace std;
 
typedef vector<int> row_t;
typedef vector<row_t> matrix_t;
 
bool find_max_dup(const matrix_t & matrix, int & max_dup)
{
    // count each value in the matrix
    typedef map<int, int> map_t;
    map_t count;
    for (const auto & row : matrix) {
        for (auto elem : row) {
            count[elem]++;
        }
    }
    // find duplicate with maximum value
    typedef map_t::value_type val_t;
    auto comp = [] (val_t v0, val_t v1) -> bool {
        return (v0.second <= 1) ||
               (v1.second > 1 && v0.first < v1.first);
    };
    map_t::const_iterator iter = max_element(count.begin(),
                                             count.end(),
                                             comp);
    max_dup = iter->first;
    return iter->second > 1;
}
 
int main()
{
    // read matrix from file
    ifstream inp("input.txt");
    int n, m;
    inp >> n >> m;
    matrix_t matrix(n, row_t(m));
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            inp >> matrix[i][j];
        }
    }
    // print matrix
    for (const auto & row : matrix) {
        for (auto elem : row) {
            cout << setw(5) << elem;
        }
        cout << endl;
    }
    // find maximum among duplicates
    int max_dup;
    if (!find_max_dup(matrix, max_dup)) {
        cout << "No duplicates!" << endl;
    } else {
        cout << "Maximum duplicate: " << max_dup << endl;
    }
}
Цитата Сообщение от input.txt
5 5
0 1 0 1 0
1 0 2 0 0
0 0 3 0 1
0 1 4 0 3
0 0 5 0 0
Цитата Сообщение от stdout
0 1 0 1 0
1 0 2 0 0
0 0 3 0 1
0 1 4 0 3
0 0 5 0 0
Maximum duplicate: 3
Добавлено через 4 часа 45 минут
Концовку функции find_max_dup можно немного упростить, учитывая что в std::map все хранится в сортированном виде:
C++
1
2
3
4
5
6
7
    // find duplicate with maximum value
    auto iter = find_if(count.rbegin(), count.rend(),
                        [] (map_t::value_type v) { return v.second > 1; });
    if (iter == count.rend())
        return false;
    max_dup = iter->first;
    return true;
0
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 43
05.05.2013, 06:25  [ТС]
Цитата Сообщение от Tulosba Посмотреть сообщение
Возможно. Сформулируйте задание ПОЛНОСТЬЮ. Постараюсь Вам помочь.
Максимальный элемент встречающийся в матрице более 1 раза, т.е дана матрица:
1 2
1 3
максимальным элементом будет 1
1 2
3 4
Одинаковых элементов нет
теперь понятно???

Добавлено через 1 час 3 минуты
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
void main(void) // головная программа
{
setlocale (0, "Rus"); // русский язык
int a;
do
{
int count=0; // счетчик
int count1=0; 
int n; // переменая для количества строк
int m; //переменая для количества столбцов
int i, x; //обьяв. переменую
int j, z; //обьяв. переменую
cout<<"введите количество строк"<<endl;
        cin>>n;// вводим кол строк
cout<<"введите количество столбцов"<<endl;
        cin>>m;// водим количество столбцов
        int**mass=new int*[n];                  //      динамическое 
for (i=1; i<=n; i++)                    //      выделение
    mass[i]=new int[m];             //          памяти под массив
cout<<"введите элементы массива"<<endl;
 for (i=1; i<=n; i++)
    {
        for (j=1; j<=m; j++)
          { 
                    cin>>mass[i][j];// водим массив
          }
    } 
  for (i=1; i<=n; i++)
  {    
        for (j=1; j<=m; j++)
        {         
            if (mass[i][j]==0)// если не равно 0 тогда....
             {
                count1++;//нарастили счетчик
             }
        }
      if (!count1)// если коли. нулевых элементов в массиве равно количество строк тогда
        {
          count++;// нарастили счетчик
        }
        count1=0;// обнулили счетчик
   }  
    cout<<"количество строк не содержащие нулевые эжлементы "<<count<<endl;// выводим результат
for(int c=1;c<=(n*m);c++)//колличество проходов
    {
        //в строках упорядочиваем
        //____________________________________________
       for(i=1;i<=n;i++)
         {
           for(j=1;j<=m-1;j++)
            {
              if(mass[i][j]>mass[i][j+1])
               {
                 int temp=mass[i][j];
                 mass[i][j]=mass[i][j+1];
                 mass[i][j+1]=temp;
               }
            }
         }
       //в столбах упорядочиваем
       //_____________________________________________
       for( x=1;x<=m;x++)
         {
           for( z=1;z<=n-1;z++)
            {
              if(mass[z][x]>mass[z][x+1])
               {
                 int temp=mass[z][x];
                 mass[z][x]=mass[z][x+1];
                 mass[z][x+1]=temp;
               }
           }
        }
     }
    //вывод на экран после сортировки
    //__________________________________________________________
    
    cout<<"После сортировки по возрастанию""\n\n\n\n";
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            cout<<mass[i][j]<<"\t";
        }
        cout<<"\n\n\n\n";
    }
cout << "Повторить нажми 0" << endl; // вывод сообщения на экран
cin>> a;
}
 while(a==0);
}
найдите ошибку в сортировке я ввожу
1 2
3 5
он выводит
0 1
3 5
откуда взялся 0??? и где 2?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
05.05.2013, 11:17
Туся111, вот вариант в Вашем стиле:
Кликните здесь для просмотра всего текста
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <iostream>
 
using namespace std;
 
int main() // головная программа
{
    setlocale (0, "Rus"); // русский язык
    int a;
    do
    {
        int count=0; // счетчик
        int count1=0;
        int n; // переменая для количества строк
        int m; //переменая для количества столбцов
        cout<<"введите количество строк"<<endl;
        cin>>n;// вводим кол строк
        cout<<"введите количество столбцов"<<endl;
        cin>>m;// водим количество столбцов
        int**mass=new int*[n]; // динамическое
        for (int i=0; i<n; i++) // выделение
        mass[i]=new int[m]; // памяти под массив
        cout<<"введите элементы массива"<<endl;
        for (int i=0; i<n; i++)
        {
            for (int j=0; j<m; j++)
            {
                cin>>mass[i][j];// водим массив
            }
        }
        for (int i=0; i<n; i++)
        {
            for (int j=0; j<m; j++)
            {
                if (mass[i][j]==0)// если не равно 0 тогда....
                {
                    count1++;//нарастили счетчик
                }
            }
            if (!count1)// если коли. нулевых элементов в массиве равно количество строк тогда
            {
            count++;// нарастили счетчик
            }
            count1=0;// обнулили счетчик
        }
        cout<<"количество строк не содержащие нулевые эжлементы "<<count<<endl;// выводим результат
        for(int c=1;c<=(n*m);c++)//колличество проходов
        {
        //в строках упорядочиваем
        //____________________________________________
            for(int i=0;i<n;i++)
            {
                for(int j=0;j<m-1;j++)
                {
                    if(mass[i][j]>mass[i][j+1])
                    {
                        int temp=mass[i][j];
                        mass[i][j]=mass[i][j+1];
                        mass[i][j+1]=temp;
                    }
                }
            }
        
        //в столбах упорядочиваем
        //_____________________________________________
            for( int i=0;i<n-1;i++)
            {
                for( int j=0;j<n;j++)
                {
                    if(mass[i][j]>mass[i+1][j])
                    {
                        int temp=mass[i][j];
                        mass[i][j]=mass[i+1][j];
                        mass[i+1][j]=temp;
                    }
                }
            }
        }
        //вывод на экран после сортировки
        //__________________________________________________________
 
        cout<<"После сортировки по возрастанию""\n\n\n\n";
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                cout<<mass[i][j]<<"\t";
            }
            cout<<"\n\n\n\n";
        }
        cout << "Повторить нажми 0" << endl; // вывод сообщения на экран
        cin>> a;
    }
    while(a==0);
}

Главная ошибка у Вас была в том, что индексация массивов в С++ идет с нуля, а не с единицы.
Однако, ни о каком поиске максимальных повторяющихся значений тут речи пока не идет.
Если исправленный вариант кода устроит, можно уже прикручивать поиск максимумов. Если нет, то я бы не стал мешать несколько задач в кучу. Сначала надо разобраться с чем-то одним.
P.S. Не забывайте использовать для оформления кода соответствующие теги.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
05.05.2013, 12:19
Немного не доделанный, но вот вам вариант решения согласно вашему условию
максимальный из элементов встречающийся в матрице более 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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <iostream>
#include <ctime>
using namespace std;
 
/*ФУНКЦИЯ ВЫДЕЛЯЕТ ПАМЯТЬ ДЛЯ ДВУМЕРНОГО МАССИВА*/
void initmas(int **(&mas),int N,int M)
{
    mas=new int*[N];
    for (int i=0;i<M;i++)
    {
        mas[i]=new int[M];
    }
}
 
/*ФУНКЦИЯ ОЧИЩАЕТ ПАМЯТЬ ОТ ВЫДЕЛЕННОЙ ПАМЯТИ ПО ДВУМЕНРНЫЙ МАССИВ*/
void destroymas(int **(&mas), const int N,const int M)
{
  for (int i = 0; i < M; i++)
  {
     delete [] mas[i];
  }
  
}
 
/*ФУНКЦИЯ ЗАПОЛНЯЕТ ДВУМЕРНЫЙ МАССИВ ДАННЫМИ*/
void fillmas(int **(&mas),int N,int M)
{
   srand(time(NULL)); //Использован генератор случайных значений для экономии времени
   for (int i=0;i<N;i++)
   {
       for (int j=0;j<M;j++)
       {
           mas[i][j]=rand()%50+1;
       }
   }
}
 
/*ФУНКЦИЯ ПОКАЗЫВАЕТ ДВУМЕРНЫЙ МАССИВ НА ЭКРАНЕ*/
void showmas(int **(&mas),int N,int M)
{
    for (int i=0;i<N;i++)
    {
        for (int j=0;j<M;j++)
        {
            cout<<mas[i][j]<<"\t";
        }
        cout<<"\n";
    }
}
 
 
/*ФУНКЦИЯ ДЛЯ ПОЛУЧЕНИЯ ЭЛЕМЕНТОВ ДВУМЕРНОГО МАССИВА В ПОРЯДКЕ ВОЗРАСТАНИЯ
Т.Е. нужна для определения каждого из последующих вероятных максимумов*/
void createsortmas(int **mas,int N,int M)
{
   int *temp=new int[N*M]; //Один из самых простых вариантов рассматривать двумерный массив как одномерный
   int count=0; //индексы одномерного массива
 
   /*Копируем данные двумерного массива в одномерный*/
   for (int i=0;i<N;i++)
   {
       for (int j=0;j<M;j++)
       {
          temp[count]=mas[i][j];
          count++;
       }       
   }
 
   /*НЕ эффективная, но максимально простая пузырьковая сортировка одномерного массива*/
    for (int i=1;i<N*M;i++) 
    {
        for (int j=0;j<N*M-1;j++)
        {
                  if (temp[j]<temp[j+1]) swap(temp[j],temp[j+1]); //Если текущий элемент больше следующего, меняем их местами
        }
    }
 
   /*АНАЛИЗ ОДНОМЕРНОГО МАССИВА НА ДВА ИДУЩИХ ПОДРЯД ОДИНАКОВЫХ ЭЛЕМЕНТОВ (в нашем случае это и есть максимум, встречающийся два раза)*/
   for (int i=0;i<N*M;i++)
   {
       if (temp[i]==temp[i+1])
       {
           cout<<"Максимальный элемент, встречающийся более одного раза = ";
           cout<<temp[i];
           break;
       }
   }
   //Остается дописать несложное условие на случай если таких элементов в массиве не будет
   
   delete []temp; //Не забываем чистить память
  
}
 
int main()
{
 
    
    int N=3,M=4,**Arr=NULL,**temp=NULL; //N строки,M столбцы, Arr массив
 
    
    initmas(Arr,N,M); //Выделение памяти
    fillmas(Arr,N,M); //Заполнение массива
    showmas(Arr,N,M); //Показываем что получилось
    createsortmas(Arr,N,M); //Функция создает одномерный массив на основе двумерного и анализирует максимумы
    destroymas(Arr,N,M); //Очистка памяти
 
 
 
 cin.get();
 cin.get();
 
 
 
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.05.2013, 12:19
Помогаю со студенческими работами здесь

Найти максимально из чисел, встречающегося в матрице более одного раза
Привет! Выполните задание,оформив каждый пункт с помощью функций,все необходимые данные должны передаваться в ф-ю в...

Максимальное из чисел встречающих в заданной матрице более одного раза
Ребята, помогите решить, очень буду благодарен. Дана целочисленная прямоугольная матрица. Определить: Максимальное из чисел...

Максимальное из чисел встречающихся в заданной матрице более одного раза
Есть программа, она работает, но мне не понятен принцип, мог бы кто нибудь помочь? #include &quot;stdafx.h&quot; #include...

Максимальное из чисел, встречающихся в заданной матрице более одного раза
//Дана целочисленная прямоугольная матрица. Определить: //1) количество строк, не содержащих ни одного нулевого элемента; ...

Найти максимальное число из, встречающихся в матрице более одного раза
Хей. Есть рабочая программа, но для её полной правильности в ней нужно использовать Функцию или процедуру. Задание: Найти максимальное...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru