Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Distrikt_1
0 / 0 / 0
Регистрация: 04.09.2015
Сообщений: 2
1

Симметричная разность массивов

02.10.2015, 01:00. Просмотров 862. Ответов 6
Метки нет (Все метки)

Даны два массива: массив А из n элементов и массив В из m элементов. Сформируйте массив С, состоящий из элементов массива А и В, которые не являются общими для них. Для формирования массива С напишите функцию с использованием указателей.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.10.2015, 01:00
Ответы с готовыми решениями:

Реализовать классические операции над множествами - объединение, пересечение и симметричная разность
Создать параметризованный тип данных - множество. Этот тип предназначен для...

Разность массивов
Всем привет! подскажите как найти разность двух массивов A - B?

Разность двумерных массивов
Добрый день! Недавно я начал изучать С++, а до этого писал на делфи! Задали...

Максимальная разность массивов
выдает неправильный результат, не могу найти ошибку #include <iostream>...

Логическая разность массивов
Даны 3 множества A={ 4 8 15 16 23 42 10}, B={5 6 33 16 13 24}, C={24 13 5 9 22...

6
Ilot
Эксперт С++
1831 / 1189 / 342
Регистрация: 16.05.2013
Сообщений: 3,139
Записей в блоге: 5
Завершенные тесты: 1
02.10.2015, 07:36 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <algorithm>
const int SIZE = 5;
int main () {
  int A[SIZE] = {1, 2, 3, 4, 5};
  int B[SIZE] = {2, 4, 6, 8, 10};
  int C[SIZE + SIZE];
 
  std::sort (A,A + SIZE);
  std::sort (B,B + SIZE);
 
  int * end =std::set_symmetric_difference (A, A + SIZE, B, B + SIZE, C);
 
  std::cout << "The symmetric difference A and B is  ";
  for (int * idx = C; idx < end; ++idx)
    std::cout << ' ' << *idx;
  endl(std::cout);
  return 0;
}
0
zss
Модератор
Эксперт С++
7179 / 6678 / 4226
Регистрация: 18.12.2011
Сообщений: 17,622
Завершенные тесты: 1
02.10.2015, 07:55 3
Объединение, пересечение, разность, симметрическая разность множеств
0
Геомеханик
788 / 595 / 937
Регистрация: 26.06.2015
Сообщений: 1,409
02.10.2015, 09: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
#include <iostream>
 
int* array_sdiff(const int* f1, const int* l1,
                 const int* f2, const int* l2, int* d){
    while((f1 != l1) && (f2 != l2)){
        if(*f1 < *f2)
            *d++ = *f1++;
        else if(*f2 < *f1)
            *d++ = *f2++;
        else {
            ++f1;
            ++f2;
        }
    }
 
    while(f1 != l1)
        *d++ = *f1++;
    while(f2 != l2)
        *d++ = *f2++;
    return d;
}
 
int main(void){
    int A[] = { 0, 3, 4, 5, 8, 9 };
    int B[] = { 1, 2, 4, 5, 6, 7, 8, 9 };
    
    const size_t nA = sizeof(A)/sizeof(A[0]);
    const size_t nB = sizeof(B)/sizeof(B[0]);
 
    int C[nA + nB];
    int* e = array_sdiff(A, A + nA, B, B + nB, C);
    for(int* p = &C[0]; p != e; ++p)
        std::cout << *p << ' ';
    return 0;
}
0
Ilot
Эксперт С++
1831 / 1189 / 342
Регистрация: 16.05.2013
Сообщений: 3,139
Записей в блоге: 5
Завершенные тесты: 1
02.10.2015, 11:16 5
Геомеханик, ваш алгоритм нагло сперт с сайта http://www.cplusplus.com/reference/algorithm/set_symmetric_difference/ и выдан за свой и к тому же добавлена отсебячена. Блок:
C++
1
2
3
4
    while(f1 != l1)
        *d++ = *f1++;
    while(f2 != l2)
        *d++ = *f2++;
никогда не выполнется так как в первом блоке стоит условие:
C++
1
2
3
while((f1 != l1) && (f2 != l2)){
    ...
}
И последнее алгоритм не работает для не сортированных диапазонов.
0
daslex
1291 / 535 / 177
Регистрация: 02.08.2011
Сообщений: 2,756
02.10.2015, 12:42 6
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>
 
void only_in_one(int Arr1[], int Arr2[], int Arr3[],const int N, int &pos){
    for (int i=0;i<N;i++){
        for (int j=0;j<N;j++){
            if (Arr1[i]==Arr2[j]) goto l1;
        }
        Arr3[pos++]=Arr1[i];
        l1:;
    };
}
 
 
int main () {
    const int SIZE = 5;
  int A[SIZE] = {1, 2, 3, 4, 5};
  int B[SIZE] = {2, 4, 6, 8, 10};
  int C[SIZE + SIZE];
 
  int k=0;
 
  only_in_one(A,B,C,SIZE,k);
  only_in_one(B,A,C,SIZE,k);
 
  for (int i=0;i<k;i++) std::cout<<C[i]<<"  ";
 
 
}
0
zss
Модератор
Эксперт С++
7179 / 6678 / 4226
Регистрация: 18.12.2011
Сообщений: 17,622
Завершенные тесты: 1
02.10.2015, 12:56 7
daslex, Все же лучше goto не пользоваться
C++
1
2
3
4
5
6
7
8
9
10
void only_in_one(int Arr1[], int Arr2[], int Arr3[],const int N, int &pos){
    for (int i=0;i<N;i++)
    {
        int j=0;
        for (;j<N;j++)
            if (Arr1[i]==Arr2[j]) break;
        if(j==N)
           Arr3[pos++]=Arr1[i];
    }
}
1
02.10.2015, 12:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2015, 12:56

Вычислить сумму и разность массивов одного размера
Вычислить сумму и разность массивов одного размера что т не пойму? это как...

Вычислить сумму и разность массивов одного размера
Вычислить сумму и разность массивов одного размера что т не пойму? это как...

Шаблонные функции: найти разность элементов массивов, превосходящих некоторое число t
Доброго времени суток, совсем не знаю С++ и очень срочно нужна помощь есть...


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

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

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