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

Сформировать массив из двух других массивов с исключением повторяющихся элементов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 5.00
murus
0 / 0 / 0
Регистрация: 11.01.2011
Сообщений: 23
17.01.2011, 10:52     Сформировать массив из двух других массивов с исключением повторяющихся элементов #1
Дано 2 массива. Сформировать третий массив, включив в него все элементы,
которые есть и в первом, и во втором массиве. Повторяющиеся элементы
удалить.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2011, 10:52     Сформировать массив из двух других массивов с исключением повторяющихся элементов
Посмотрите здесь:

Сформировать массив путем слияние двух других C++
C++ Сформировать массив из элементов исходных массивов, меньших произведения последних элементов заданных массивов.
Сформировать одномерный массив на основе двух других массивов C++
Сформировать массив из двух других массивов C++
C++ Из двух массивов сформировать общий массив и вычислить сумму элементов, являющихся полными квадратами
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
17.01.2011, 15:21     Сформировать массив из двух других массивов с исключением повторяющихся элементов #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
#include <algorithm>
#include <iterator>
#include <iostream>
#include <vector>
#include <cstddef>
 
int main() {
  int first [] = { 0, 0, 1, 2, 3, 7, 8, 9 };
  int second[] = { 1, 1, 4, 7, 5, 7, 8, 9 };
  
  const std::size_t first_size  = sizeof(first)  / sizeof(first[0]);
  const std::size_t second_size = sizeof(second) / sizeof(second[0]);
    
  std::sort(first , first  + first_size);
  std::sort(second, second + second_size);
  
  std::vector<int> result;
  
  std::set_intersection(first , first  + first_size,
                        second, second + second_size,
                        std::back_inserter(result));
                        
  std::copy(result.begin(), result.end(), std::ostream_iterator<int>(std::cout, " "));
  
  return 0;
}
Результат: http://codepad.org/FlYtBESJ
murus
0 / 0 / 0
Регистрация: 11.01.2011
Сообщений: 23
17.01.2011, 15:56  [ТС]     Сформировать массив из двух других массивов с исключением повторяющихся элементов #3
CyBOSSeR, большое спасибо! я так понимаю что в данном случае на печать выводятся удаленные элементы, а как сделать (прошу прощения за глупый вопрос), чтобы выводился на печать итоговый массив с оставшимися элементами?

Добавлено через 14 минут
а еще...
можно кратенько коменты по функциям... я еще только в основах сижу с библиотекой #include <cstddef> еще не сталкивалась, и для меня после строк объявления массивов совсем темный лес начинается...
MILAN
 Аватар для MILAN
883 / 777 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
17.01.2011, 19:17     Сформировать массив из двух других массивов с исключением повторяющихся элементов #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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream>
#include <ctime>
 
using namespace std;
 
int main()
 {
     srand(static_cast<int>(time(NULL)));
     int *arr1,*arr2,*arr3;
     int size1,size2,k=0,cnt=0;
     cout<<"Enter size of first array -> ";
     cin>>size1;
     arr1=new int[size1];
     cout<<"Enter size of second array -> ";
     cin>>size2;
     arr2=new int[size2];
     cout<<endl<<"First array -> ";
      for(int i=0; i<size1; i++)
      {
          arr1[i]=rand()%9;
          cout<<arr1[i]<<"  ";
      }
     cout<<endl<<"Second array -> ";
      for(int i=0; i<size2; i++)
      {
          arr2[i]=rand()%9;
          cout<<arr2[i]<<"  ";
      }
    arr3=new int[size1+size2];
      for(int i=0; i<size1; i++)
    {
        for(int j=0; j<size2; j++)
        {
            if(arr1[i]==arr2[j])
            {
                arr3[k]=arr1[i];
                k++;
                 break;
            }
        }
    }
    cout<<endl<<"Third array -> ";
     for(int i=0; i<k; i++)
     {
         for(int j=0; j<i; j++)
         {
            if(arr3[j]==arr3[i])
             {
                 cnt++;
             }
         }
         if(!cnt)
         {
           cout<<arr3[i]<<"  ";
         }
           cnt=0;
     }
    cout<<endl;
    delete [] arr1;
    delete [] arr2;
    delete [] arr3;
    system("pause");
    return 0;
 }
murus
0 / 0 / 0
Регистрация: 11.01.2011
Сообщений: 23
17.01.2011, 21:14  [ТС]     Сформировать массив из двух других массивов с исключением повторяющихся элементов #5
простите несведущую.... а для чего используется библиотека ctime?
и вот эта строчка srand(static_cast<int>(time(NULL)));
что обозначает?
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
17.01.2011, 21:22     Сформировать массив из двух других массивов с исключением повторяющихся элементов #6
ctime нужна для ф-ции time(NULL), которая считывает системное время
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
17.01.2011, 21:44     Сформировать массив из двух других массивов с исключением повторяющихся элементов #7
Цитата Сообщение от murus Посмотреть сообщение
я так понимаю что в данном случае на печать выводятся удаленные элементы
Нет, выводяться те элементы, которые есть и в первом и во втором массивах, то бишь, фактически, пересечение множеств элементов массивов.
Цитата Сообщение от murus Посмотреть сообщение
а еще...
можно кратенько коменты по функциям... я еще только в основах сижу с библиотекой #include <cstddef> еще не сталкивалась, и для меня после строк объявления массивов совсем темный лес начинается...
Вся информация есть на справочных ресурсах, типа http://www.cplusplus.com/.
murus
0 / 0 / 0
Регистрация: 11.01.2011
Сообщений: 23
18.01.2011, 00:23  [ТС]     Сформировать массив из двух других массивов с исключением повторяющихся элементов #8
CyBOSSeR, igorrr37, благодарю за пояснения, пошла дальше грызть гранит)

Добавлено через 2 часа 16 минут
написала один из вариантов, посмотрите пожалуйста код, не у меня выводится на экран результирующий массив или я что-то неправильно делаю...
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 <stdafx.h>
#include <stdio.h>
#include <conio.h>
#include <iostream>
 
 
void main()
{
int first[7] = {0, 2, 6, 10, 3, 2, 5};
int second[5] = {5, 4, 3, 8, 9};
 
int i = 0; //индекс первого массива
int j = 0; //индекс второго массива
 
printf("first:\n");
for (i = 0; i < 7; i++)
{
printf("%d\t", first[i]); //выводим первый массив с пробелами
}
printf("\nsecond:\n");
for (i = 0; i < 5; i++)
{
printf("%d\t", second[i]);//выводим второй массив
}
 
int n = 0; //объявляем кол-во неповторяющихся чисел первого массива
int k = 0; //объявляем индекс результирующего массива
int *result; //объявляем результирующий массив
 
printf("\nresult:\n");
 
result = new int[n];
      for(i = 0; i < 7; i++)
        {
                for(j = 0; j < 5; j++)
                {
                        if(first[i]!= second[j])
                        {
                                result[i] = first[i];
                                result[i++] = second[i];
                        }
                }
                
      }         
for(int i=0; i<n; i++)
         {
           printf("%d\t", result[i]);
         }
      
_getch();
 
 }
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
18.01.2011, 07:35     Сформировать массив из двух других массивов с исключением повторяющихся элементов #9
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
#include <stdio.h>
#include <conio.h>
#include <iostream>
 
 
int main(){
    int first[7] = {0, 2, 6, 10, 3, 2, 5};
    int second[5] = {5, 4, 3, 8, 9};
    int i = 0;
    int j = 0;
    printf("first:\n");
    for (i = 0; i < 7; i++){
        printf("%d\t", first[i]); //выводим первый массив с пробелами
    }
    printf("\nsecond:\n");
    for (i = 0; i < 5; i++){
        printf("%d\t", second[i]);//выводим второй массив
    }
    int n = 12;
    int met = 0, met1=0; //объявляем индекс результирующего массива
    int *result=new int[n]; //объявляем результирующий массив
    int *result1=new int[n];
    printf("\nresult:\n");
    for(i = 0; i < 7; i++){
        for(j = 0; j < 5; j++){
            if(first[i]== second[j])
                goto mark;
        }
        result[met] = first[i];
        ++met;
        mark:;
    }
    for(i = 0; i < 5; i++){
        for(j = 0; j < 7; j++){
            if(second[i]== first[j])
                goto mark1;
        }
        result[met] = second[i];
        ++met;
        mark1:;
    }
    for(i = 0; i < met; i++){
        for(j = 0; j < met1; j++){
            if(result[i]== result1[j])
                goto mark2;
        }
        result1[met1] = result[i];
        ++met1;
        mark2:;
    }
    for(int i=0; i<met1; i++)
        printf("%d\t", result1[i]);
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2011, 11:38     Сформировать массив из двух других массивов с исключением повторяющихся элементов
Еще ссылки по теме:

C++ Из двух целочисленных массивов различной размерности сформировать общий массив. Упорядочить полученный массив
C++ Поэлементное соединение двух массивов строк с удалением повторяющихся элементов
C++ Сформировать массив из двух других одномерных массивов STL

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

Или воспользуйтесь поиском по форуму:
murus
0 / 0 / 0
Регистрация: 11.01.2011
Сообщений: 23
18.01.2011, 11:38  [ТС]     Сформировать массив из двух других массивов с исключением повторяющихся элементов #10
igorrr37, спасибо огромное! все работает
я так понимаю в первом цикле мы ищем в первом массиве элементы второго и записываем в третий массив, если неравные. Потом тоже самое делаем для второго массива... а потом сравниваем два итоговых массива, проверяем на равенство и записываем неравные в искомый массив... так?

насчет использования временного массива я тоже в принципе думала, но все-таки интересно, почему у меня не получилось реализовать идею с циклом на проверку неравенство элементов... ведь наверное в итоге операций меньше в итоге получится... попробую поковыряться в коде еще...
Yandex
Объявления
18.01.2011, 11:38     Сформировать массив из двух других массивов с исключением повторяющихся элементов
Ответ Создать тему
Опции темы

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