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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
Туся111
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 43
#1

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

28.04.2013, 10:34. Просмотров 1451. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2013, 10:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос максимальный из элементов встречающийся в матрице более 1 раза (C++):

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

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

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

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

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

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

30
faLek
99 / 100 / 7
Регистрация: 06.03.2012
Сообщений: 478
28.04.2013, 22:09 #2
Вы мне можете сказать,вы хоть смотрели код который сюда подсунули?
У вас программа считает строки которые не содержат нулевые элементы
0
Genn55
370 / 217 / 41
Регистрация: 26.12.2012
Сообщений: 713
29.04.2013, 11:28 #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;
}
1
Туся111
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 43
04.05.2013, 08:39  [ТС] #4
эта полная задача, просто мне нужно было ее доработать именно нахождением максимума

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

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

Определить количество чисел, встревающих в заданной матрице более одного раза - C++
Дана целочисленная прямоугольная матрица. Определить: 1) Количество строк, содержащих хотя бы один нулевой элемент 2) количества...

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

Определить максимальное из значений, встречающихся в заданной матрице более одного раза - C++
Здравствуйте! Пытался решить данную задачу, но по ходу возник вопрос, как подсчитать максимальные значения которые встречаются именно более...

Определить максимальное из чисел, встречающихся в заданной матрице более одного раза - C++
Здравствуйте!Помогите пожалуйста решить задачу. Дана целочисленная матрица. Определить максимальное из чисел, встречающихся в заданной...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru