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

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

Восстановить пароль Регистрация
 
Delaimo
 Аватар для Delaimo
1 / 1 / 0
Регистрация: 26.10.2012
Сообщений: 51
14.05.2014, 12:32     Найти максимальное число из, встречающихся в матрице более одного раза #1
Хей. Есть рабочая программа, но для её полной правильности в ней нужно использовать Функцию или процедуру.
Задание: Найти максимальное число из чисел, встречающихся в заданной матрице размером nxn более одного раза. Составить процедуру (или функцию) нахождения совпадающих элементов в матрице.
Код програмы:
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
#include <locale>
#include <iomanip>
#include <math.h>
#include <conio.h>
#include <time.h>
using namespace std;
 
int _tmain()
{
    setlocale(LC_ALL, "Russian");
 
    int const n = 4, m = 4;
    int matr[n][m];
 
    srand(time(NULL)); 
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++) 
        {    
            matr[i][j] = rand() % 20 + 1; 
        } 
    }
 
    cout << "\n";
 
    cout << "Исходная матрица: \n";
    for(int i = 0; i < n; i++)
    {
        cout << endl;
        cout << "\t";
        for(int j = 0; j < m; j++)
        {
            cout << setw(3) << setiosflags(ios::left) << matr[i][j] << " " ;
        }
    }
 
    cout << "\n\n";
 
    /*2)максимальное из чисел, встречающихся в заданной матрице более одного раза.*/
 
    int t, t1 = 0, r = 0, t2;
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
        {
            t2 = matr[i][j];
            matr[i][j] = 0;
    
            for(int k = 0; k < n; k++)
            {
                for(int f = 0; f < m; f++)
                {
                    if(t2 == matr[k][f])
                    {
                        t = matr[k][f];
                    }
                    else
                        r++;
                }
 
                if(t1 > t)
                    t = t1;
            }
 
            t1 = t;
            matr[i][j] = t2;
 
        }
    }
 
    double kof;
    kof = pow((double)n,4);
 
    if(r == kof)
        cout << "Одинаковых элементов нет";
    else
        cout << "Максимальное из встречающихся более 1 раза: " << t;
 
    cout << "\n\n";
 }
Так вот, может кто помочь? Я не могу понять, как тут использовать функцию.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2014, 12:32     Найти максимальное число из, встречающихся в матрице более одного раза
Посмотрите здесь:

C++ максимальное из чисел, встречающихся в заданной матрице более одного раза.(исправить 1 ошибку)
Найти максимальное из чисел встречающихся в матрице более одного раза. Сделать используя указатели и классы C++
C++ Максимальное из чисел, встречающихся в заданной матрице более одного раза
Определить максимальное из значений, встречающихся в заданной матрице более одного раза C++
C++ Двумерный массив. Найти: максимальное из чисел, встречающихся в заданной матрице более одного раза
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
14.05.2014, 15:18     Найти максимальное число из, встречающихся в матрице более одного раза #2
Delaimo,
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
#include <iostream>
#include <set>
#include <vector>
#include <algorithm>
 
typedef std::vector<std::vector<int>> VVI;
 
int max(const VVI &v) {
    int res = v.front().front();
    for (auto row: v)
        res = std::max(res, *std::max_element(row.cbegin(), row.cend()));
    return res;
}
 
int number_of_different_elements(const VVI &v) {
    std::set<int> s;
    for (auto row: v)
        for (auto elem: row)
            s.insert(elem);
    return s.size();
}
 
int main() {
    std::vector<std::vector<int>> v = { 
        {1,2,3,4,5},
        {1,2,3,4,5},
        {1,2,3,4,5},
        {1,2,8,4,5},
        {1,2,3,4,5}
    };  
 
    std::cout << "Max elem: " << max(v) << std::endl
        << "Number of different elements: " << number_of_different_elements(v) << std::endl;
}
Bash
1
2
3
4
ruslan@TFTM-K53TA:~/Programming/c++/cyberforum$ g++ -std=c++11 main.cpp -o main
ruslan@TFTM-K53TA:~/Programming/c++/cyberforum$ ./main 
Max elem: 8
Number of different elements: 6
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
14.05.2014, 15:22     Найти максимальное число из, встречающихся в матрице более одного раза #3

Не по теме:

outoftime, автор же помочь просил, а не написать совершенно другой код, никак не связанный с его наработками...

К тому же, твоя программа ищет максимальный не среди повторяющихся, а среди вообще всех элементов. Совпадающие элементы тоже не ищет! Короче, ни один пункт задания не выполнен!
Delaimo
 Аватар для Delaimo
1 / 1 / 0
Регистрация: 26.10.2012
Сообщений: 51
14.05.2014, 15:29  [ТС]     Найти максимальное число из, встречающихся в матрице более одного раза #4
К тому же, твоя программа ищет максимальный не среди повторяющихся, а среди вообще всех элементов. Совпадающие элементы тоже не ищет! Короче, ни один пункт задания не выполнен!
Это же не про мою программу?
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
14.05.2014, 17:36     Найти максимальное число из, встречающихся в матрице более одного раза #5
Delaimo, ты не видишь, я к outoftime обращаюсь?
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
14.05.2014, 18:35     Найти максимальное число из, встречающихся в матрице более одного раза #6
Delaimo,
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
#include <iostream>
#include <map>
#include <vector>
 
typedef std::vector<std::vector<int>> VVI;
 
std::vector<int> get_repeated(const VVI &v) {
    std::map<int,int> m;
    for (auto row: v)
        for (auto elem: row)
            m[elem]++;
    std::vector<int> res;
    for (auto elem: m)
        if (elem.second > 1)
            res.push_back(elem.first);
    return res;
}
 
void print_repeated(const VVI &v) {
    std::cout << "Repeated elements: ";
    for (int elem: get_repeated(v))
        std::cout << elem << " ";
    std::cout << std::endl;
}
 
void print_max_elem_from_repeated(const VVI &v) {
    std::cout << "Maximum element value is: " << get_repeated(v).back() << std::endl;
}
 
int main() {
    std::vector<std::vector<int>> v = {
        {1,2,3,4,5},
        {1,2,3,4,5},
        {1,2,3,4,5},
        {1,2,8,4,5},
        {1,2,3,4,5}
    };
 
    print_repeated(v);
    print_max_elem_from_repeated(v);
}

Не по теме:

Kuzia domovenok, а ты суров



Добавлено через 4 минуты
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
автор же помочь просил
А я и помог: показал как это можно написать по другому.
Delaimo
 Аватар для Delaimo
1 / 1 / 0
Регистрация: 26.10.2012
Сообщений: 51
15.05.2014, 10:35  [ТС]     Найти максимальное число из, встречающихся в матрице более одного раза #7
outoftime, программа выдаёт на удивление много ошибок.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
15.05.2014, 11:07     Найти максимальное число из, встречающихся в матрице более одного раза #8
Delaimo, небось спп11 не поддерживает твоя среда разработки. В любом случае не паррься. Даже если бы эта программа бы запустилась у тебя, ты бы вряд ли смог объяснить учителю хотя бы половину фич, в ней использованных. Так что пиши по-старинке, как и писал (в первом посте).
Delaimo
 Аватар для Delaimo
1 / 1 / 0
Регистрация: 26.10.2012
Сообщений: 51
15.05.2014, 11:12  [ТС]     Найти максимальное число из, встречающихся в матрице более одного раза #9
Kuzia domovenok, это да. Только опять же остаётся использовать функцию. Как её туда впихнуть не знаю.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
15.05.2014, 12:54     Найти максимальное число из, встречающихся в матрице более одного раза #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
#include <locale>
#include <iomanip>
#include <math.h>
#include <conio.h>
#include <time.h>
using namespace std;
int const n = 4, m = 4;
int matr[n][m];
int clones[n*m/2+1];
int clones_size=0;
 
int fill_matrix(){
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++) 
        {    
            matr[i][j] = rand() % 20 + 1; 
        } 
    }
}
void print_matrix(){
    cout << "\n";
    cout << "Исходная матрица: \n";
    for(int i = 0; i < n; i++)
    {
        cout << endl;
        cout << "\t";
        for(int j = 0; j < m; j++)
        {
            cout << setw(3) << setiosflags(ios::left) << matr[i][j] << " " ;
        }
    } 
    cout << "\n\n";
}
void find_clones(){
    for(int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
        {
            bool already_clone=false;
            for (int t=0; t<clones_size && !already_clone; t++)
                
            for (int k=i; k<n && !already_clone;; k++)
                for (int l=j+1; l<m && !already_clone; l++){
                    already_clone=(matr[i][j]==matr[k][l]);
                    if (already_clone)
                        clones[clones_size++]=matr[i][j];
                }
                        
        }
}
int get_max_clone(){
  int max_id=clones[0];
  for (int t=1; t<clones_size && !already_clone; t++)
    if (clones[t]>max)max=clones[t];
  return max;
}
int _tmain()
{
    setlocale(LC_ALL, "Russian");
    srand(time(NULL)); 
    fill_matrix();
    print_matrix(); 
    if(clones_size==0)
        cout << "Одинаковых элементов нет";
    else
        cout << "Максимальное из встречающихся более 1 раза: " << get_max_clone();
    return 0;
 }
Delaimo
 Аватар для Delaimo
1 / 1 / 0
Регистрация: 26.10.2012
Сообщений: 51
15.05.2014, 13:34  [ТС]     Найти максимальное число из, встречающихся в матрице более одного раза #11
Kuzia domovenok, смотри. Немного доработанный преподом код.
Теперь запускается без ошибок и ни на что не жалуется. Только косяк в том, что он не находит максимальное число и просто выдаёт сообщение о том, что элементов нет.
Как мне сказали, нужно вывести массив clones и максимальное число в месте, где я указал в коде. Почти в конце.
Кликните здесь для просмотра всего текста
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
#include "StdAfx.h"
#include <locale>
#include <iomanip>
#include <math.h>
#include <conio.h>
#include <time.h>
#include <iostream>
using namespace std;
int const n = 4, m = 4;
int matr[n][m];
int clones[n*m/2+1];
int clones_size=0;
 
void fill_matrix(){
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++) 
        {    
            matr[i][j] = rand() % 20 + 1; 
        } 
    }
}
void print_matrix(){
    cout << "\n";
    cout << "Исходная матрица: \n";
    for(int i = 0; i < n; i++)
    {
        cout << endl;
        cout << "\t";
        for(int j = 0; j < m; j++)
        {
            cout << setw(3) << setiosflags(ios::left) << matr[i][j] << " " ;
        }
    } 
    cout << "\n\n";
}
bool already_clone;
void find_clones(){
    for(int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
        {
            already_clone=false;
            for (int t=0; t<clones_size && !already_clone; t++)
                
            for (int k=i; k<n && !already_clone; k++)
                for (int l=j+1; l<m && !already_clone; l++){
                    already_clone=(matr[i][j]==matr[k][l]);
                    if (already_clone)
                        clones[clones_size++]=matr[i][j];
                }
                        
        }
        !!!/Вывести массив clones здесь
 
 
}
int get_max_clone(){
  int max_id=clones[0],max,tt;
  for (int t=1; t<clones_size && !already_clone; t++)
 
    if (clones[t]>max)
    {max=clones[t]; tt=t;};
!!!/Вывести максимальное из чисел здесь
  return max;
}
int _tmain()
{
    cout<<"Test Vivod";
    setlocale(LC_ALL, "Russian");
    srand(time(NULL)); 
    fill_matrix();
    print_matrix(); 
    if(clones_size==0)
        cout << "Одинаковых элементов нет";
    else
        cout << "Максимальное из встречающихся более 1 раза: " << get_max_clone();
    return 0;
 }
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
15.05.2014, 15:07     Найти максимальное число из, встречающихся в матрице более одного раза #12
Цитата Сообщение от Delaimo Посмотреть сообщение
программа выдаёт на удивление много ошибок.
Разобраться в коде слабо?
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <map>
#include <vector>
 
typedef std::vector<std::vector<int> > VVI;
 
std::vector<int> get_repeated(const VVI &v) {
    std::map<int,int> m;
    for (VVI::const_iterator row = v.begin(); row != v.end(); ++row)
        for (int i = 0; i < row->size(); ++i)
            m[row->at(i)]++;
    std::vector<int> res;
    for (std::map<int,int>::iterator it = m.begin(); it != m.end(); ++it)
        if (it->second > 1)
            res.push_back(it->first);
    return res;
}
 
void print_repeated(const VVI &v) {
    std::cout << "Repeated elements: ";
    std::vector<int> repeated = get_repeated(v);
    for (int i = 0; i < repeated.size(); ++i)
        std::cout << repeated[i] << ' ';
    std::cout << std::endl;
}
 
void print_max_elem_from_repeated(const VVI &v) {
    std::cout << "Maximum element value is: " << get_repeated(v).back() << std::endl;
}
 
int main() {
    int row[] = {1,2,3,4,5};
    VVI v(5, std::vector<int>(row, row + 5));
    v[3][4] = 8;
 
    print_repeated(v);
    print_max_elem_from_repeated(v);
}
Bash
1
2
3
4
ruslan@TFTM-K53TA:~/Programming/c++/cyberforum$ g++ main.cpp -o main -std=c++98
ruslan@TFTM-K53TA:~/Programming/c++/cyberforum$ ./main 
Repeated elements: 1 2 3 4 5 
Maximum element value is: 5


Добавлено через 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
#include <iostream>
#include <map>
#include <vector>
 
typedef std::vector<int> VI;
typedef std::vector<VI> VVI;
typedef std::map<int,int> MI;
 
#define ALL(type, name, collection) \
    for (type name = collection.begin(); name != collection.end(); ++name)
#define FOR(i,n) for (int i(0), _n = n; i < _n; ++i)
 
VI get_repeated(const VVI &v) {
    MI m;
    ALL(VVI::const_iterator, row, v) FOR(i, row->size()) m[row->at(i)]++;
    VI res;
    ALL(MI::iterator, it, m) if (it->second > 1) res.push_back(it->first);
    return res;
}
 
void print_repeated(const VVI &v) {
    std::cout << "Repeated elements: ";
    VI repeated = get_repeated(v);
    FOR(i, repeated.size()) std::cout << repeated[i] << ' ';
    std::cout << std::endl;
}
 
void print_max_elem_from_repeated(const VVI &v) {
    std::cout << "Maximum element value is: " << get_repeated(v).back() << std::endl;
}
 
int main() {
    int row[] = {1,2,3,4,5};
    VVI v(5, VI(row, row + 5));
    v[3][4] = 8;
 
    print_repeated(v);
    print_max_elem_from_repeated(v);
}


Добавлено через 1 час 4 минуты
Delaimo, вы структуры проходили?
Delaimo
 Аватар для Delaimo
1 / 1 / 0
Регистрация: 26.10.2012
Сообщений: 51
15.05.2014, 18:31  [ТС]     Найти максимальное число из, встречающихся в матрице более одного раза #13
Delaimo, вы структуры проходили?
Не было такого.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
15.05.2014, 21:57     Найти максимальное число из, встречающихся в матрице более одного раза #14
Delaimo, Что-бы все было красиво предлагаю вынести глобальные переменные:
- двумерный массив NxM
- одномерный N*M
- псевдоразмер одномерного массива

Далее использовать функции:
- инициализации двумерного массива
- разворачивания двумерного в одномерный, сортировка и модификация http://en.cppreference.com/w/cpp/algorithm/unique или http://en.cppreference.com/w/cpp/alg.../adjacent_find или что-то самому придумать для нахождения повторяющихся на одномерном отсортированом массиве с изменением псевдоразмера чтобы он соответствовал размеру подмассива повторяющихся элементов
- взять последний элемент подмассива, который и будет самым большим для повторяющихся

Все понятно?

Добавлено через 36 минут
P.S. отвечая на сообщение добавляйте кому именно адресован ответ, чтобы адресанту приходило уведомление об этом.
Delaimo
 Аватар для Delaimo
1 / 1 / 0
Регистрация: 26.10.2012
Сообщений: 51
22.05.2014, 10:30  [ТС]     Найти максимальное число из, встречающихся в матрице более одного раза #15
outoftime, что-то какая-то не такая прога. Не то, что нужно.

Добавлено через 23 часа 49 минут
outoftime, слушай, тут векторы какие-то, а нужна матрица.

Добавлено через 21 час 23 минуты
Ребят, поможет кто-нибудь? Я так и не разобрался.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
22.05.2014, 11:57     Найти максимальное число из, встречающихся в матрице более одного раза #16
Цитата Сообщение от Delaimo Посмотреть сообщение
слушай, тут векторы какие-то, а нужна матрица
Поэтому я и написал - модифицировать, это значит разобраться как оно работает и добавить что-то чтобы поведение было удовлетворительным.

Цитата Сообщение от Delaimo Посмотреть сообщение
Я так и не разобрался.

Не по теме:

А пытался? Есть вопросы?

Delaimo
 Аватар для Delaimo
1 / 1 / 0
Регистрация: 26.10.2012
Сообщений: 51
22.05.2014, 17:01  [ТС]     Найти максимальное число из, встречающихся в матрице более одного раза #17
outoftime, действительно.
Дал код своей проги, над которым мне помогали, но осталось пару нюансов. А потом мне скидывают совершенно другой код и не пойми что там нужно делать.
Kuzia domovenok
22.05.2014, 17:36
  #18

Не по теме:

Цитата Сообщение от outoftime Посмотреть сообщение
А пытался? Есть вопросы?
А что, теперь ему надо всё бросить и пытаться в чужом говнокоде разобраться?

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2014, 18:09     Найти максимальное число из, встречающихся в матрице более одного раза
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
outoftime
22.05.2014, 18:09     Найти максимальное число из, встречающихся в матрице более одного раза
  #19

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А что, теперь ему надо всё бросить и пытаться в чужом говнокоде разобраться?
Ты в курсе что ты только что сказал? Ты STL говнокодом назвал (: Найти максимальное число из, встречающихся в матрице более одного раза

Yandex
Объявления
22.05.2014, 18:09     Найти максимальное число из, встречающихся в матрице более одного раза
Ответ Создать тему
Опции темы

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