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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
Туся111
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 43
28.04.2013, 10:34     максимальный из элементов встречающийся в матрице более 1 раза #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
#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;// выводим результат
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2013, 10:34     максимальный из элементов встречающийся в матрице более 1 раза
Посмотрите здесь:

C++ Максимальное из чисел встречающих в заданной матрице более одного раза
Найти максимально из чисел, встречающегося в матрице более одного раза C++
C++ Максимальное из чисел, встречающихся в заданной матрице более одного раза
Определить максимальное из значений, встречающихся в заданной матрице более одного раза C++
C++ Двумерные массивы. Найти максимальный среди элементов, повторившихся более одного раза
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
faLek
99 / 100 / 7
Регистрация: 06.03.2012
Сообщений: 478
28.04.2013, 22:09     максимальный из элементов встречающийся в матрице более 1 раза #2
Вы мне можете сказать,вы хоть смотрели код который сюда подсунули?
У вас программа считает строки которые не содержат нулевые элементы
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
29.04.2013, 11:28     максимальный из элементов встречающийся в матрице более 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
#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;
}
Туся111
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 43
04.05.2013, 08:39  [ТС]     максимальный из элементов встречающийся в матрице более 1 раза #4
эта полная задача, просто мне нужно было ее доработать именно нахождением максимума

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

Добавлено через 38 секунд
не правильно работает ваша прогграмма
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
04.05.2013, 11:06     максимальный из элементов встречающийся в матрице более 1 раза #5
Что именно не правильно работает?
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];//сохраняем
            }
 
        }
находим максимальный элемент,а у вас программа считает строки которые не содержат нулевые элементы
BabyGluk
26 / 26 / 4
Регистрация: 10.04.2013
Сообщений: 167
04.05.2013, 11:34     максимальный из элементов встречающийся в матрице более 1 раза #6
Максимуму нужно присвоить изначально нулевой елемент массива. типо a[0][0] чтоль..
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
04.05.2013, 12:29     максимальный из элементов встречающийся в матрице более 1 раза #7
В этом коде обязательно иначе просто не с чем будет сравнивать.
Туся111
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 43
04.05.2013, 17:00  [ТС]     максимальный из элементов встречающийся в матрице более 1 раза #8
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 минуты
при этом он еще должен при отсутствии повторяющихся элементов вывести сообщение что посторяющихся элементов нет)
BabyGluk
26 / 26 / 4
Регистрация: 10.04.2013
Сообщений: 167
04.05.2013, 17:18     максимальный из элементов встречающийся в матрице более 1 раза #9
не понял, количество максимальных елементов? в каждом рядку будет полюбом макс елемент знач сколько рядков сколько и макс елементов, а если смотреть
cout << "Максимальных элементов =" << sum_max << endl; - вот тут как я понял, ты почему то каждый елемент сравниваешь с каждым елементом масива, тоесть ты нашла максимум в рядку 30, и проверяешь весь масив, равен ли елемент а[i][j] 30ти, если равен то подымаем счетчик
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
04.05.2013, 17:54     максимальный из элементов встречающийся в матрице более 1 раза #10
Если я правильно вас понял вы не верно сформулировали свою задачу.С макс элементами все работает правильно.Но вы наверное имели в виду повторяющиеся значения,тогда все будет совершенно по другому.Чтобы определить повторяющиеся значения вам для начала нужно упорядочить свой массив и проверять рядом стоящие значения на равенство.А макс это есть наибольший элемент он в любом случае будет 1.Другое дело,что повторяться он может сколько угодно а программа и определяет его.
C++
1
cout << "Максимальный элемент больше 1= " << max << endl;
C++
1
cout << "Максимальных элементов 1 = " << max << endl;
Туся111
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 43
04.05.2013, 18:26  [ТС]     максимальный из элементов встречающийся в матрице более 1 раза #11
все правильно сформулированно, максимальный из элементов встречающийся в матрице более 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);
}
вот отсортировала но почему то выдает ошибку(
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
04.05.2013, 19:16     максимальный из элементов встречающийся в матрице более 1 раза #12
Вот такой вариант набросал:
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
Вероятно, можно использовать стандартные алгоритмы для удаления неповторяющихся элементов. Мне что-то в голову не пришло.
Туся111
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 43
04.05.2013, 19:23  [ТС]     максимальный из элементов встречающийся в матрице более 1 раза #13
я в этом коде ничего не понимаю, что это за сортировка такая?что за язык?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
04.05.2013, 19:25     максимальный из элементов встречающийся в матрице более 1 раза #14
Цитата Сообщение от Туся111 Посмотреть сообщение
что это за сортировка такая?что за язык?
Сортировка стандартная std::sort
Язык C++ 11
Туся111
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 43
04.05.2013, 19:32  [ТС]     максимальный из элементов встречающийся в матрице более 1 раза #15
я не понимаю так, мне нужно так как я делала, это возможно?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
04.05.2013, 19:53     максимальный из элементов встречающийся в матрице более 1 раза #16
Цитата Сообщение от Туся111 Посмотреть сообщение
это возможно?
Возможно. Сформулируйте задание ПОЛНОСТЬЮ. Постараюсь Вам помочь.
kamre
126 / 130 / 4
Регистрация: 25.12.2011
Сообщений: 438
05.05.2013, 00:56     максимальный из элементов встречающийся в матрице более 1 раза #17
Цитата Сообщение от Туся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;
Туся111
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 43
05.05.2013, 06:25  [ТС]     максимальный из элементов встречающийся в матрице более 1 раза #18
Цитата Сообщение от 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?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
05.05.2013, 11:17     максимальный из элементов встречающийся в матрице более 1 раза #19
Туся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. Не забывайте использовать для оформления кода соответствующие теги.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2013, 12:19     максимальный из элементов встречающийся в матрице более 1 раза
Еще ссылки по теме:

Найти максимальное число из, встречающихся в матрице более одного раза C++
Максимальное из чисел встречающихся в заданной матрице более одного раза C++
C++ Определить максимальное из чисел, встречающихся в заданной матрице более одного раза

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

Или воспользуйтесь поиском по форуму:
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
05.05.2013, 12:19     максимальный из элементов встречающийся в матрице более 1 раза #20
Немного не доделанный, но вот вам вариант решения согласно вашему условию
максимальный из элементов встречающийся в матрице более 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();
 
 
 
}
Yandex
Объявления
05.05.2013, 12:19     максимальный из элементов встречающийся в матрице более 1 раза
Ответ Создать тему
Опции темы

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