Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2014, 23:45   #1
авраам
 
Регистрация: 07.11.2014
Сообщений: 6
По умолчанию Об'единения двох массивов

Добрый день помогите пожалуйста решыть задачу по програмированнию. Есть два массива целых чисел X(n) i Y(n), n<=300. Создать програму которая находит множник елементов об'единения этих двох массивов. Об'единения двох массивов это все элементы массива X(n) и все элементы массива Y(n) набраны по одному раза. Печатает элементы об'единения та ихнюю суму. Помогите запрограмировать в С++, очень надо, заранее спасибо.
авраам вне форума Ответить с цитированием
Старый 08.11.2014, 00:34   #2
Lardes
Форумчанин
 
Аватар для Lardes
 
Регистрация: 19.08.2011
Сообщений: 329
По умолчанию

Цитата:
находит множник елементов об'единения этих двох массивов
Множник... это что?

Для объединения двух массивов можно завести третий массив. Назначаете для него размер (размер 1-го массива + размер 2-го массива), циклом проходите по элементам 1-го массива и записываете элементы в 3-й массив. Аналогично проделываете со 2-ым массивом. Ну а после подсчитываете сумму всех элементов (если я правильно Вас понял) 3-го массива
Lardes вне форума Ответить с цитированием
Старый 08.11.2014, 01:02   #3
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Стреляю вслепую. Вот пример из книги "Professional C++ (2nd Edition)" Здесь есть пересечение, объединение и т.д.

Код:
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

// Function template to populate a container of ints.
// The container must support push_back().

template<typename Container>
void populateContainer( Container& cont )
{
    int num;

    while ( true ) {
        cout << "Enter a number (0 to quit): ";
        cin >> num;
        if ( num == 0 ) {
            break;
        }
        cont.push_back( num );
    }
}

int main( )
{
    vector<int> vec1, vec2, result;
    cout << "Enter elements for set 1:" << endl;
    populateContainer( vec1 );
    cout << "Enter elements for set 2:" << endl;
    populateContainer( vec2 );

    // set algorithms work on sorted ranges
    sort( vec1.begin( ), vec1.end( ) );
    sort( vec2.begin( ), vec2.end( ) );

    cout << "Set 1: ";
    for_each( vec1.cbegin( ), vec1.cend( ), []( int i ) {
        cout << i << " ";
    } );
    cout << endl;
    cout << "Set 2: ";
    for_each( vec2.cbegin( ), vec2.cend( ), []( int i ) {
        cout << i << " ";
    } );
    cout << endl;


    if ( includes( vec1.cbegin( ), vec1.cend( ), vec2.cbegin( ), vec2.cend( ) ) ) {
        cout << "The second set is a subset of the first." << endl;
    }
    if ( includes( vec2.cbegin( ), vec2.cend( ), vec1.cbegin( ), vec1.cend( ) ) ) {
        cout << "The first set is a subset of the second" << endl;
    }

    result.resize( vec1.size( ) + vec2.size( ) );
    auto newEnd = set_union( vec1.cbegin( ), vec1.cend( ), vec2.cbegin( ),
                             vec2.cend( ), result.begin( ) );
    cout << "The union is: ";
    for_each( result.begin( ), newEnd, []( int i ) {
        cout << i << " ";
    } );
    cout << endl;

    newEnd = set_intersection( vec1.cbegin( ), vec1.cend( ), vec2.cbegin( ),
                               vec2.cend( ), result.begin( ) );
    cout << "The intersection is: ";
    for_each( result.begin( ), newEnd, []( int i ) {
        cout << i << " ";
    } );
    cout << endl;

    newEnd = set_difference( vec1.cbegin( ), vec1.cend( ), vec2.cbegin( ),
                             vec2.cend( ), result.begin( ) );
    cout << "The difference between set 1 and set 2 is: ";
    for_each( result.begin( ), newEnd, []( int i ) {
        cout << i << " ";
    } );
    cout << endl;

    newEnd = set_symmetric_difference( vec1.cbegin( ), vec1.cend( ), vec2.cbegin( ),
                                       vec2.cend( ), result.begin( ) );
    cout << "The symmetric difference is: ";
    for_each( result.begin( ), newEnd, []( int i ) {
        cout << i << " ";
    } );
    cout << endl;

    return 0;
}
Output
Цитата:
Enter elements for set 1:
Enter a number (0 to quit): 5
Enter a number (0 to quit): 2
Enter a number (0 to quit): 4
Enter a number (0 to quit): 6
Enter a number (0 to quit): 6
Enter a number (0 to quit): 3
Enter a number (0 to quit): 2
Enter a number (0 to quit): 0
Enter elements for set 2:
Enter a number (0 to quit): 3
Enter a number (0 to quit): 4
Enter a number (0 to quit): 5
Enter a number (0 to quit): 6
Enter a number (0 to quit): 3
Enter a number (0 to quit): 2
Enter a number (0 to quit): 4
Enter a number (0 to quit): 0
Set 1: 2 2 3 4 5 6 6
Set 2: 2 3 3 4 4 5 6
The union is: 2 2 3 3 4 4 5 6 6
The intersection is: 2 3 4 5 6
The difference between set 1 and set 2 is: 2 6
The symmetric difference is: 2 3 4 6
Press <RETURN> to close this window...
8Observer8 вне форума Ответить с цитированием
Старый 08.11.2014, 08:25   #4
авраам
 
Регистрация: 07.11.2014
Сообщений: 6
По умолчанию

Да вы правильно поняли, но мне нужен код програмы как бы для 1 курса мы еще не проходили такие библиотеки как algoritm и.т.д.
авраам вне форума Ответить с цитированием
Старый 08.11.2014, 08:37   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
мне нужен код програмы
Наработки покажешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.11.2014, 08:44   #6
авраам
 
Регистрация: 07.11.2014
Сообщений: 6
По умолчанию

Код:
int main(){
const int N=20, M=40;
int s=0,k=0; //k - счетчик числа повторов
int arr1[N], arr2[N], arr3[M], arr4[M];
<функция заполнения arr1, arr2 числами>
for (int i=; i<20; i++){
arr3[i]=arr1[i];
arr3[20+i]=arr2[i];
if(arr1[i]=0|arr2[i]=0){s=1;} 
else{}
}

for (int i=; i<40; i++)
{
for (int j=; j<40; j++)
{if (arr3[i]=arr3[j]){arr3[j]=0;
k=k+1;
}else {}
}
}
//arr4 = new int[s+k];//массив переменной длины 
const P=s+k;
int arr4[P];//пожалуй так получше
if(s!=0){arr4[s+k]=0;}else{}
s=0;
for (int i=; i<40; i++){
if (arr3[i]!=0){s=s+1;
arr4[s]=arr3[i];}
else {}
}
return 0;
}

Последний раз редактировалось Stilet; 08.11.2014 в 09:06.
авраам вне форума Ответить с цитированием
Старый 08.11.2014, 09:29   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я бы на твоем месте начал примерно так:
Код:
#include <iostream>
#include <stdlib.h>

using namespace std;

const int n=4,m=4;
int x[n][m],y[n][m],z[2*n][m]={0};

void input(){
 int i,j;
 for(i=0;i<n;i++){
  for(j=0;j<m;j++){
    x[i][j]=rand()%100+1;
    cout<<x[i][j]<<'\t';
  } cout<<endl;
 } cout<<endl;

 for(i=0;i<n;i++){
  for(j=0;j<m;j++){
    y[i][j]=rand()%100+1;
    cout<<y[i][j]<<'\t';
  } cout<<endl;
 } cout<<endl;
}

bool find(int k){
 int i,j;
 for(i=0;i<2*n;i++){
  for(j=0;j<m;j++){
    if(z[i][j]==k) return true;
  }
 }
 return false;
}

void join(){
 int i,j,q=0;

 for(i=0;i<n;i++){
  for(j=0;j<m;j++){
    if(!find(x[i][j])) z[q][j]=x[i][j]; else z[q][j]=0;
  }
  q++;
 }

 for(i=0;i<n;i++){
  for(j=0;j<m;j++){
    if(!find(y[i][j])) z[q][j]=y[i][j];  else  z[q][j]=0;
  }
  q++;
 }
}

void output(){
 int i,j;
 for(i=0;i<2*n;i++){
  for(j=0;j<m;j++){
    cout<<z[i][j]<<'\t';
  } cout<<endl;
 } cout<<endl;
}

int main()
{
    input();join();output();
    cin.get();
    return 0;
}
Сразу предупреждаю: Это не ответ на твой вопрос, а подсказка.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.11.2014, 11:00   #8
авраам
 
Регистрация: 07.11.2014
Сообщений: 6
По умолчанию

Понял, спасибо огромное
авраам вне форума Ответить с цитированием
Старый 08.11.2014, 13:35   #9
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

На самом деле, тот способ с библиотеками намного проще и короче, ниже порог вхождения, понятнее другим. Я за стандартные решения std::set_union
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выполнить обработку массивов. предусмотреть описание массивов как динамических Vika_0_0 Паскаль, Turbo Pascal, PascalABC.NET 8 03.06.2012 10:12
Общие елементы двох массивов, Си XemyL Помощь студентам 0 07.11.2011 21:17
Delphi, сравнение массивов, умножение массивов Marjasja Общие вопросы Delphi 0 22.05.2011 19:49
ошибка в двох проверках sasha14486 PHP 0 02.11.2009 00:31