Форум программистов, компьютерный форум 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++ Двумерные массивы. Найти максимальный среди элементов, повторившихся более одного раза
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kamre
06.05.2013, 10:14     максимальный из элементов встречающийся в матрице более 1 раза
  #21

Не по теме:


Цитата Сообщение от daslex Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
/*ФУНКЦИЯ ВЫДЕЛЯЕТ ПАМЯТЬ ДЛЯ ДВУМЕРНОГО МАССИВА*/
void initmas(int **(&mas),int N,int M)
{
   mas=new int*[N];
  for (int i=0;i<M;i++)
   {
     mas[i]=new int[M];
   }
}
Почему все так любят вручную с памятью возиться? Чем это лучше простого:
C++
1
vector<vector<int> > mas(n, vector<int>(m));
?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
06.05.2013, 10:45
  #22

Не по теме:

Цитата Сообщение от kamre Посмотреть сообщение
Почему все так любят вручную с памятью возиться?
Потому что раздел для начинающих. Изучают основы.

kamre
06.05.2013, 12:21
  #23

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Потому что раздел для начинающих. Изучают основы.
Так это же раздел по C++, а не по чистому C. Разве основы C++ не включают STL?

Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
06.05.2013, 12:36     максимальный из элементов встречающийся в матрице более 1 раза #24
kamre, а в чистом Си new нет, там *alloc'и всевозможные Когда ТС не знает базовых вещей, типа ввода/вывода, циклов, массивов грузить его неокрепший мозг STL'ями преждевременно. Ручным выделением памяти, в принципе тоже. Но по мере обучения, всё равно сначала надо научиться выделять память руками, а потом, осознав, что это не очень удобно и чревато нехорошими последствиями при недостаточной внимательности, научиться пользоваться стандартной библиотекой. Как говорится, от простого к сложному.
Туся111
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 43
07.05.2013, 11:02  [ТС]     максимальный из элементов встречающийся в матрице более 1 раза #25
Цитата Сообщение от daslex Посмотреть сообщение
Немного не доделанный, но вот вам вариант решения согласно вашему условию
максимальный из элементов встречающийся в матрице более 1 раза
спасибо огромное очень помогли))))))))))))))))

Добавлено через 1 час 54 минуты
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
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 k;
    k=n*m;  
int* temp = new int[k]; //Один из самых простых вариантов рассматривать двумерный массив как одномерный
   int wr=0; //индексы одномерного массива
 
   //Копируем данные двумерного массива в одномерный
   for (int i=1;i<=n;i++)
   {
       for (int j=1;j<=m;j++)
       {
          wr++;
           temp[wr]=mass[i][j];
          cout << temp[wr]<<endl;
       }       
   }
 
   //сортировка одномерного массива
    for (int i=1;i<=n*m;i++) 
    {
        for (int j=1;j<=n*m-1;j++)
        {
                  if (temp[j]<temp[j+1]) swap(temp[j],temp[j+1]); //Если текущий элемент больше следующего, меняем их местами
        }
    }
 int nm=0;
     //АНАЛИЗ ОДНОМЕРНОГО МАССИВА НА ДВА ИДУЩИХ ПОДРЯД ОДИНАКОВЫХ ЭЛЕМЕНТОВ (это и есть максимум, встречающийся два раза)
   for (int i=1;i<=n*m;i++)
   {
       if (temp[i]==temp[i+1])
       {
           int nm=i;
        
       }            
   }
 if (nm==0)
     {cout << "Одинаковых элементов нет" << endl; } 
 else
    {cout<<"Максимальный элемент, встречающийся более одного раза = ";
 cout<<temp[nm];}
cout << "Повторить нажми 0" << endl; // вывод сообщения на экран
cin>> a;
}
 while(a==0);
}
у меня выводит неправильно, в чем проблема? напишите нормальный вывод?)) если я вывод запихаю в цикл он несколько раз ту же строку выводить будет, отдельное условие не получается сделать(заранее спасибо)
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
07.05.2013, 11:50     максимальный из элементов встречающийся в матрице более 1 раза #26
Цитата Сообщение от Туся111 Посмотреть сообщение
у меня выводит неправильно, в чем проблема?
Я же Вам говорил (максимальный из элементов встречающийся в матрице более 1 раза) про индексацию с 0. Совсем не слушаете советы.
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
07.05.2013, 12:18     максимальный из элементов встречающийся в матрице более 1 раза #27
Туся111, вот лень делать пока что.
У меня в том коде много ошибок. И никто говорить о них вам не хочет.

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

может так будет проще.
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
09.05.2013, 00:55     максимальный из элементов встречающийся в матрице более 1 раза #28
Туся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
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
#include<iostream>
#include<stdlib.h>
#include<time.h>
#include<Windows.h>
 
using namespace std;//пространство имен
 
int main()//главная функция
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);//русский
 
    srand(time(NULL));//для правильной работы рандомизатора
 
         int n=0,m=0,label,flag=1;//необходимые переменные
for (;;)
{
    cout <<"Введите количество строк"<<"\n";
    cin >> n;
    cout<<"Введите количество столбцов"<< "\n";
    cin >> m;
    // динамическое создание двумерного массива
    int **A = new int* [n]; // строк в массиве
    for (int i = 0; i < n; i++)
        A[i] = new int [m]; // столбцов
    // заполнение массива и вывод на экран
    /////////////////////////////////////////////////////////////////
//каким образом будем заполнять массив
cout << "  Заполнение массива : случайно - 0, вручную - 1 "<<"\n";
cin >> label;
cout << "\n";
//если будем заполнять вручную, вводим с клавиатуры
 if(label==1)
 {
    cout<<"введите элементы массива";
    cout << "\n";
   for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
         {
           cin >> A[i][j];
         }
     }
 
 }
 //чтобы не умереть за клавиатурой при вводе больших массивов
// заполняем рандомно
    else
     for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
         {
            A[i][j]=rand()%100-50;//заполняем в интервале -50 +50
            cout<<A[i][j]<<"\t";// выводим сформированный массив
         }
        cout<<"\n";
    }
 
///////////////////////////////////////////////////
//ищем не нулевые строки
 int mark=0,count=0;
    for(int i=0; i<n; i++)// перебираем отдельные строки
    {
        mark = 0;//обнуляем при каждом входе в цикл
        for(int j=0; j<m; j++)//
        {
            if(A[i][j]==0)// считаем элементы, которые равны 0
            mark++;
        }
        if(mark==0)// считаем строки, в которых нет нулевых элементов
            count++;
    }
    cout<<"\n\n";
    cout<<"Количество строк, не содержащих ни одного нулевого элемента: "<<count<<"\n\n";
    ///////////////////////////////////////////////////////////////////////
   int *B=new int[n*m]; //одномерный массив
   int namber=0; //индексы одномерного массива
 
  //Копируем данные двумерного массива в одномерный
   for (int i=0;i<n;i++)
   {
       for (int j=0;j<m;j++)
       {
          B[namber]=A[i][j];
          namber++;
       }
   }
 /////////////////////////////////////////////////////////////
 //контрольный вывод для работы не нужен только для теста
 for (int i=0;i<n*m;i++)
 cout<<B[i]<<",";
 cout<<"\n\n";
 /////////////////////////////////////////////////////////////////////////
  // Удаление массива
    for (int i = 0; i < n; i++)
    {
        delete[]A[i]; // Удаляем каждый элемент
    }
    delete [] A; // А потом массив
    ///////////////////////////////////////////////////////////////////////
     //сортируем пузырьком
 for (int i = 1; i < n*m; i++)//внешний цикл
 for (int j = 0; j < n*m - 1; j++)//внутренний цикл
    if (B[j] > B[j + 1])
      {
        int temp = B[j];
            B[j] = B[j + 1];//заменяем элементы
            B[j + 1] = temp;
      }
 ////////////////////////////////////////
  //контрольный вывод для работы не нужен только для теста
//выводим на экран отсортированный массив
for (int k = 0; k < n*m; k++)
cout << B[k] << ",";
cout<<"\n\n";
 
/////////////////////////////////////////////////////////////////////////////////
//ищем максимальный элемент, встречающийся более одного раза
 bool var = 0;
   for (int i=n*m;i>=0;i--)//проходим массив с конца все макс в конце
   {
       if (B[i]==B[i-1])
       {
           cout <<"Максимальный элемент, встречающийся более одного раза =  "<< B[i]<<"\n\n";
          var = 1;//если есть меняем флаг
           break;
       }
    }
   if (var == 0)
 cout <<"В массиве нет элементов, встречающийся более одного раза  "<<"\n\n";
 var = 0;//меняем при выходе из цикла
    // Удаление массива
   delete [] B;
 cout << "Повторить? да нажми 1 нет нажми 0 " << endl; // вывод сообщения на экран
cin>> flag;//если 1 возвращаемся в начало
if (flag ==0)//завершение программы
break;
}
    /////////////////////////////////////////////////////////////////////////
return 0;
}
Я вам ее разбил на отдельные блоки.Контрольные выводы хотите удаляйте,хотите нет на работе это не скажется никак.
P.S Не забывайте про кнопочку люди старались для вас.
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
09.05.2013, 01:45     максимальный из элементов встречающийся в матрице более 1 раза #29
Туся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
95
96
97
98
99
100
101
#include <iostream>
#include <ctime>
 
using namespace std;
 
/*ЗАПОЛНЕНИЕ ДВУМЕРНОГО ДИНАМИЧЕСКОГО МАССИВА*/
void fillmas(int *mas[],const int N,const int M)
{
    srand(time(NULL)); //Генератор псевдослучайных значений включаем
    for (int i=0;i<N;i++)
    {
        for (int j=0;j<M;j++)
        {
            mas[i][j]=rand()%20+1; //Генерируем элементы
        }
    }
}
 
/*ПОКАЗЫВАЕМ ИСХОДНЫЙ МАССИВ НА ЭКРАНЕ*/
void showmas(int *mas[],const int N,const int M)
{
    for (int i=0;i<N;i++)
    {
        for (int j=0;j<M;j++)
        {
            cout<<mas[i][j]<<"\t";
        }
        cout<<"\n";
    }
}
 
/*ВОТ ВАША ЗАДАЧА */
void search_double_max(int *mas[],const int N,const int M)
{
    int *temp=new int[N*M]; //Создаем одномерный массив для копирования в него элементов двумерного
    int count=0; //Будущий индекс одномерного массива 
    bool flag=false; //Признак того, что в массиве есть дважды встречающийся элемент
 
    /*КОПИРУЕМ ДАННЫЕ ИЗ ДВУМЕРНОГО МАССИВА В ОЛНОМЕРНЫЙ*/
    for (int i=0;i<N;i++)
    {
        for (int j=0;j<M;j++)
        {
            temp[count]=mas[i][j];
            count++;
        }
    }
 
    /*АНАЛИЗ ДУБЛИКАТОВ И ОПРЕДЕЛЕНИЕ МАКСИМУМА*/
    int max=0; //в эту переменную запишем максимальный элемент, встречающийся более 1 раза
 
    /*БРУТФОРС МАССИВА, СРАВНИВАЕМ ЭЛЕМЕНТЫ*/
    for (int i=0;i<N*M-1;i++)
    {
        for (int j=i+1;j<N*M;j++)
        {
            if (temp[i]==temp[j]) //Если найден дубликат, то 
            {
                if (false==flag) //Сначала определяем был ли дубликат найден ранее, если нет
                {
                    flag=true; //Обозначаем, что дубликат уже один раз был найден
                    max=temp[i]; //Записываем значение как максимум. В дальнейшем его сравниваем и при необходимости перезаписываем
                }
                else //если дубликат ранее уже определялся, то
                {
                    if (max<temp[i]) max=temp[i]; //Сравниваем текущий максимум с элементом из массива и определяем, что из них больше. При необходимости обновляем максимум.
                }
            }
        }
    }
 
    cout<<"\n";
 
    
    delete []temp; //Очищаем память от динамически созданного одномерного массива
 
    if (flag) cout<<"МАКСИМУМ = "<<max<<"\n"; //Если признак дубликатов был изменен, выводим максимум
    else cout<<"В массиве не было найдено подходящих значений\n"; //Иначе выводим сообщение о неуспешном поиске
}
 
void main()
{
    system("CHCP 1251"); //Это для кодировки (при шрифте lusidia console)
    int **mas=NULL; //Анализируемый двумерный массив
    int N=3,M=3; //Число колонок и строк массива
 
    /*ВЫДЕЛЕНИЕ ПАМЯТИ ПОД ДВУМЕРНЫЙ МАССИВ*/
    mas=new int*[N]; 
    for (int i=0;i<N;i++) mas[i]=new int[M];
 
 
       fillmas(mas,N,M); //Заполнение массива
       showmas(mas,N,M); //Показываем массив
       search_double_max(mas,N,M); //Ищем максимум, встречаемый более чем 1 раз
 
    /*ОЧИСТКА ПАМЯТИ ОД ДВУМЕРНОГО МАССИВА*/
    for (int i=0;i<N;i++) delete []mas[i];
    delete []mas;
 
    cin.get();
}
Туся111
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 43
10.05.2013, 07:20  [ТС]     максимальный из элементов встречающийся в матрице более 1 раза #30
Tulosba, я все программы пишу с 1, так что это тоже правильно)

Добавлено через 32 секунды
всем большое спасибо, у меня все работает
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2013, 09:14     максимальный из элементов встречающийся в матрице более 1 раза
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.05.2013, 09:14     максимальный из элементов встречающийся в матрице более 1 раза #31
Цитата Сообщение от Туся111 Посмотреть сообщение
Tulosba, я все программы пишу с 1, так что это тоже правильно)
Yandex
Объявления
10.05.2013, 09:14     максимальный из элементов встречающийся в матрице более 1 раза
Ответ Создать тему
Опции темы

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