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

Сравнение элементов двумерного массива - C++

Восстановить пароль Регистрация
 
HiDunay
0 / 0 / 0
Регистрация: 28.06.2014
Сообщений: 5
28.06.2014, 22:04     Сравнение элементов двумерного массива #1
Доброго времени суток. Нужно написать программу, которая проверяет, есть ли во введённом с клавиатуры массиве элементы с одинаковыми значениями. Если таковые имеются, программа выводит данные элементы.
Нет никаких идей, кроме:
1.
C++
1
2
3
4
5
for(i=0;i<k;i++){
    for(j=0;j<n;j++){
       for(q=i;q<k;q++){
          for(w=j;w<n;w++){
if (q!=i or w!=j) if (mas[i][j]==mas[q][w]) cout<<mas[i][j]<<" ";}}}}
2.
C++
1
2
3
4
5
for(i=0;i<k;i++){
    for(j=0;j<n;j++){
       for(q=i+1;q<k;q++){
          for(w=j+1;w<n;w++){
if (mas[i][j]==mas[q][w]) cout<<mas[i][j]<<" ";}}}}
Оба варианта не верны, они не выводят все похожие элементы массива.
Это вся программа, может быть в ней ошибка:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
setlocale(LC_ALL, "Russian");
int i,j,k,n,q,w;
cout<<"Введите размер массива:"<<endl;
cin>>k>>n;
int mas[k][n];
cout<<"Введите элементы массива:"<<endl;
    for(i=0;i<k;i++){
        for(j=0;j<n;j++)   
            cin>>mas[i][j];}
cout<<"Матрица:"<<endl;
    for(i=0;i<k;i++){
       for(j=0;j<n;j++)                     
          cout<<mas[i][j]<<" ";
          cout<<endl;}  
cout<<"Одинаковые элементы:"<<endl;  
for(i=0;i<k;i++){
    for(j=0;j<n;j++){
       for(q=i+1;q<k;q++){
          for(w=j+1;w<n;w++){
if (mas[i][j]==mas[q][w]) cout<<mas[i][j]<<" ";}}}}
return 0;
}

Надеюсь вы меня поправите. Заранее благодарю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.06.2014, 22:04     Сравнение элементов двумерного массива
Посмотрите здесь:

Сравнение элементов массива C++
залить из двумерного массива данные в одномерный длиной, равной количеству всех элементов исходного массива C++
определить количество элементов двумерного массива,которые меньше среднего арифметического значения всех элементов своей строки C++
Посчитать кол-во элементов между максимальным и минимальным значением элементов двумерного массива( подразумевается, что эти значения уже найдены) C++
C++ количество четных элементов одномерного массива до числа равному а, Определить количество нечетных элементов двумерного массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Binary Mind
 Аватар для Binary Mind
2 / 2 / 0
Регистрация: 12.02.2014
Сообщений: 56
28.06.2014, 22:41     Сравнение элементов двумерного массива #2
Вот, если я правильно понял
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
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
setlocale(LC_ALL, "Russian");
int i,j,k,n,q,w,p;
cout<<"Введите размер массива:"<<endl;
cin>>k>>n;
int mas[k][n];
cout<<"Введите элементы массива:"<<endl;
    for(i=0;i<k;i++){
        for(j=0;j<n;j++)   
            cin>>mas[i][j];}
cout<<"Матрица:"<<endl;
    for(i=0;i<k;i++){
       for(j=0;j<n;j++)                     
          cout<<mas[i][j]<<" ";
          cout<<endl;}  
cout<<"Одинаковые элементы:"<<endl;  
for(i=0;i<k;i++){
    for(j=0;j<n;j++){
       for(p=j+1;p<n;p++) // цикл для проверки в не полной строке элемента который проверяется в данный обход
       {
            if (mas[i][j]==mas[i][p]) cout<<mas[i][j]<<" ";     
       }
       for(q=i+1;q<k;q++){
          for(w=0;w<n;w++){
if (mas[i][j]==mas[q][w]) cout<<mas[i][j]<<" ";}}}}
return 0;
}
SlavaSSU
213 / 158 / 44
Регистрация: 17.07.2012
Сообщений: 580
28.06.2014, 22:45     Сравнение элементов двумерного массива #3
после того как ты зафиксировал 1-ый элемент, посмотри, в какой области ты ищешь 2-ой!
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
28.06.2014, 23:06     Сравнение элементов двумерного массива #4
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <iterator>
#include <algorithm>
#include <functional>
 
 
template<typename ForwardIterator>
ForwardIterator nonunique(ForwardIterator first, ForwardIterator const last) {
   using namespace std::placeholders;
    
   using value_type = typename std::iterator_traits<ForwardIterator>::value_type;
    
   auto result = first;
   while (first != last) {
      auto const afterFirst = std::next(first);
      auto const notEqualTo = std::bind(std::not_equal_to<value_type>(), _1, std::cref(*first));
      auto const localLast  = std::find_if(afterFirst, last, notEqualTo);
      
      if (localLast != afterFirst) {
         *result++ = *first;
         first = localLast;
      } else {
         ++first;
      }
   }
   
   return result;
}
 
 
int main() {
    std::vector<int> sequence(std::istream_iterator<int>{std::cin}, std::istream_iterator<int>{});
    
    std::sort(std::begin(sequence), std::end(sequence));
    auto const last = nonunique(std::begin(sequence), std::end(sequence));
    
    if (last != std::begin(sequence)) {
       std::copy(std::begin(sequence), last, std::ostream_iterator<int>{std::cout, "\t"});
       std::cout << std::endl;
    } else {
       std::cout << "all elements are unique" << std::endl;
    }
}
http://ideone.com/DDztjR
HiDunay
0 / 0 / 0
Регистрация: 28.06.2014
Сообщений: 5
28.06.2014, 23:14  [ТС]     Сравнение элементов двумерного массива #5
Спасибо, интересно; но программа все ровно находит ответ не верно, точнее не все ответы выводит. Я учту ваши приобразования

Добавлено через 1 минуту
Ххах, мой препод по пактике ох*еет от такого. Да и мне не хватит знаний, что бы все это объяснить или даже понять сейчас. Но спасибо.
gru74ik
Модератор
 Аватар для gru74ik
3068 / 1313 / 164
Регистрация: 20.02.2013
Сообщений: 3,745
Записей в блоге: 15
28.06.2014, 23:19     Сравнение элементов двумерного массива #6
Цитата Сообщение от HiDunay Посмотреть сообщение
Ххах, мой препод по пактике ох*еет от такого. Да и мне не хватит знаний, что бы все это объяснить или даже понять сейчас.
Это такой местный форумный юмор. В разделе для новичков на вопрос чему равно 2*2 ответить в общем-то верно, но используя для решения задачи уравнения квантовой механики.
HiDunay
0 / 0 / 0
Регистрация: 28.06.2014
Сообщений: 5
28.06.2014, 23:21  [ТС]     Сравнение элементов двумерного массива #7
Цитата Сообщение от gru74ik Посмотреть сообщение
Это такой местный форумный юмор. В разделе для новичков на вопрос чему равно 2*2 ответить используя уравнения квантовой механики.
Ооу, слишком тонко, наверное. =_=

Добавлено через 1 минуту
Перечитал задание, и речи не идет о двумерном массиве, попробую с одномерным, может прокатит.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
28.06.2014, 23:39     Сравнение элементов двумерного массива #8
HiDunay,
1. Сортируем массив
2. Запоминаем позицию первого элемента в first и result, следующего за последним - в last. Пока first != last: начиная со следующего элемента массива после first ищем позицию localLast элемента, который неравен элементу на позиции first; если localLast != first + 1, то записываем элемент на позиции first в элемент на позиции result, ++result, first = localLast; иначе ++first.

Добавлено через 16 минут
без шаблонов и итераторов: http://ideone.com/s9xISZ

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
    #include <iostream>
    #include <algorithm>
    #include <cstddef>
     
     
    int main() {
    std::vector<int> sequence;
    for (int value; std::cin >> value; ) {
    sequence.push_back(value);
    }
     
    std::sort(sequence.begin(), sequence.end());
     
    std::size_t const last = sequence.size();
    std::size_t first = 0;
    std::size_t result = 0;
    while (first != last) {
    std::size_t localLast = first + 1;
    for ( ; localLast != last && sequence[localLast] == sequence[first]; ++localLast);
     
    if (localLast != first + 1) {
    sequence[result++] = sequence[first];
    first = localLast;
    } else {
    ++first;
    }
    }
     
    if (result != 0) {
    for (std::size_t i = 0; i != result; ++i) {
    std::cout << sequence[i] << '\t';
    }
    std::cout << std::endl;
    } else {
    std::cout << "all elements are unique" << std::endl;
    }
    }
Alex5
881 / 616 / 81
Регистрация: 12.04.2010
Сообщений: 1,546
28.06.2014, 23:41     Сравнение элементов двумерного массива #9
Цитата Сообщение от HiDunay Посмотреть сообщение
есть ли во введённом с клавиатуры массиве элементы с одинаковыми значениями
Можно использовать множество (std::set, #include<set>), составленное из элементов массива. При добавлении (insert) элемента проверяем (count), может он уже есть.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include<set>
using namespace std;
 
int main()
{
    set<int> st;
    st.clear();
    int ar[] = { 10, 20, 30, 10, 20, 30, 40, 50, 0 };
    int i=0;
    while( ar[i] != 0 )
    {
        // перед добавлением очередного элемента, используем функцию count() 
        cout << ar[i] << "    count() == " << st.count( ar[i] ) << endl;
        st.insert( ar[i] ); 
        ++i;
    }
 
    std::cout << "\n\n";
    system("pause");
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.06.2014, 00:19     Сравнение элементов двумерного массива
Еще ссылки по теме:

Сравнение элементов двумерного динамического массива C++
C++ Сравнение двумерного массива созданного из двух строк
C++ Сравнение элементов двумерного массива

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

Или воспользуйтесь поиском по форуму:
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
29.06.2014, 00:19     Сравнение элементов двумерного массива #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
74
75
76
77
78
79
#include <iostream>
#include <vector>
#include <limits>
#include <utility>
#include <cstddef>
 
 
std::pair<int, int> minmax_element(std::vector<int> const& sequence) {
   int min = std::numeric_limits<int>::max();
   int max = std::numeric_limits<int>::min();
   
   for (std::size_t i = 0; i != sequence.size(); ++i) {
      if (min > sequence[i]) {
         min = sequence[i];
      }
      
      if (max < sequence[i]) {
         max = sequence[i];
      }
   }
   
   return std::make_pair(min, max);
}
  
void counting_sort(std::vector<int> & sequence) {
   std::pair<int, int> const minmax = minmax_element(sequence);
   
   std::vector<std::size_t> counts(minmax.second - minmax.first + 1, 0);
   
   for (std::size_t i = 0; i != sequence.size(); ++i) {
      ++counts[sequence[i] - minmax.first];
   }
   
   for (std::size_t i = 0, j = 0; i != counts.size(); ++i) {
      for ( ; counts[i] != 0; --counts[i], ++j) {
         sequence[j] = static_cast<int>(i) + minmax.first;
      }
   }
}
  
std::size_t nonunique(std::vector<int> & sequence) {
   std::size_t const last = sequence.size();
   std::size_t first      = 0;
   std::size_t result     = 0;
   while (first != last) {
      std::size_t localLast = first + 1;
      for ( ; localLast != last && sequence[localLast] == sequence[first]; ++localLast);
 
      if (localLast != first + 1) {
         sequence[result++] = sequence[first];
         first = localLast;
      } else {
         ++first;
      }
   }
   
   return result;
}
  
 
int main() {
    std::vector<int> sequence;
    for (int value; std::cin >> value; ) {
       sequence.push_back(value);
    }
    
    counting_sort(sequence);
    
    std::size_t const result = nonunique(sequence);
    
    if (result != 0) {
       for (std::size_t i = 0; i != result; ++i) {
          std::cout << sequence[i] << '\t';
       }
       std::cout << std::endl;
    } else {
       std::cout << "all elements are unique" << std::endl;
    }
}
Yandex
Объявления
29.06.2014, 00:19     Сравнение элементов двумерного массива
Ответ Создать тему
Опции темы

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