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

Объединение двух массивов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 69, средняя оценка - 4.65
Borland
3 / 3 / 0
Регистрация: 19.11.2011
Сообщений: 133
25.03.2012, 14:48     Объединение двух массивов #1
Написать программу, которая объединяет два упорядоченных по возрастанию массива в один, также упорядоченный массив.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.03.2012, 14:48     Объединение двух массивов
Посмотрите здесь:

Объединение двух массивов C++
Объединение двух массивов в третий C++
C++ Объединение двух массивов.
Массивы: объединение двух массивов C++
C++ Объединение двух массивов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
jambas92
 Аватар для jambas92
58 / 57 / 3
Регистрация: 18.11.2010
Сообщений: 315
25.03.2012, 15:25     Объединение двух массивов #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
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    int n,m,x;
 
    cout << "Enter size of first array\n";
    cin >> n;
    int *a = new int[n];
    cout << "Enter your first array\n";
    for (int i=0; i<n; i++)
    {
        cin >> a[i];
    }
    
    cout << "Enter size of second array\n";
    cin >> m;
    int *b = new int[m];
    cout << "Enter your second array\n";
    for (int i=0; i<m; i++)
    {
        cin >> b[i];
    }
    x = n + m;
 
    int *c = new int[x];
    for (int i=0; i<n; i++)
    {
        c[i] = a[i];
    }
    for (int i=n; i<x; i++)
    {
        c[i] = b[i - n];
    }
 
    for (int i=0; i<x; i++)
    {
        cout << c[i] << " ";
    }
 
    return 0;
}
Basill
 Аватар для Basill
40 / 40 / 13
Регистрация: 16.02.2013
Сообщений: 197
04.03.2013, 16:31     Объединение двух массивов #3
Цитата Сообщение от Borland Посмотреть сообщение
в один, также упорядоченный массив.
Тут нужно чтобы 3 массив был упорядоченный, а тут получается он объединен но не упорядочен
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
04.03.2013, 17:13     Объединение двух массивов #4
Общая идея такая:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
   int arr1Pos = 0;
   int arr2Pos = 0;
   int arr3Pos = 0;
   
   while ( true ) {
      array3[ arr3Pos++ ] = ( array1[ arr1Pos ] < array2[ arr2Pos ]) ? array1[ arr1Pos++ ] : array2[ arr2Pos++ ];
      
      if ( arr1Pos == arr1Size ) {
         while ( arr2Pos < arr2Size )
            array3[ arr3Pos++ ] = array2[ arr2Pos++ ];
         
         break;
      }
      
      if ( arr2Pos == arr2Size ) {
         while ( arr1Pos < arr1Size )
            array3[ arr3Pos++ ] = array1[ arr1Pos++ ];
         
         break;
      }
   }
EDIT: не заметил некропост...
Basill
 Аватар для Basill
40 / 40 / 13
Регистрация: 16.02.2013
Сообщений: 197
04.03.2013, 17:33     Объединение двух массивов #5
Toshkarikслушай помоги плиз, вообщем смотри я прогу написал почти, вот не могу слить 2 массива можешь концовку написать?
начиная с 62 строки. У нас просто препод помешен на подробностях, хочет чтобы было все расписано подробно

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
#include <iostream>
#include <conio.h>
#include <clocale>
using namespace std;
 
int main()
{setlocale (LC_ALL, "Russian");
 
 int i,j,n,m,x,a,b,t,c,d,f;
 
 int *arr1,*arr2,*arr3;
 
 cout<<"Введите количество элементов 1 массива: \n";
 cin >> n;
     arr1 = new int [ n ];
      
     for (int i=0; i<n; i++)
        {
        cout<<"Введите элемент 1 неупорядоченного массива="; cin>> arr1[i];
         }
            for (a=1; a<n; a++) 
            for (b=n-1; b>=a; b--)      
           {
            if (arr1[b-1] > arr1[b]) 
              {
                t = arr1[b-1];
                arr1[b-1] = arr1[b];
                arr1[b] = t;
              }
           }
cout<<endl;
 
 
 cout<<"Введите количество элементов 2 массива: \n";
 cin >> m;
     arr2 = new int [ m ];
      
     for (int j=0; j<m; j++)
        {
        cout<<"Введите элемент 2 неупорядоченного массива="; cin>> arr2[j];
         }
            for (c=1; c<m; c++) 
            for (d=m-1; d>=c; d--)
          {
            if (arr2[d-1] > arr2[d]) 
            {
                f = arr2[d-1];
                arr2[d-1] = arr2[d];
                arr2[d] = f;
            }
            }
cout<<"Упорядоченный 1 массив:\n";
    for(t=0; t<n; t++) cout<<arr1[t]<<endl;
cout<<"Упорядоченный 2 массив:\n";
for(f=0; f<m; f++) cout<<arr2[f]<<endl;
cout<<endl;
 
 
 
x = n + m;
arr3 = new int[x];
 
 
 
 
   cout<<"Упорядоченный 3 массив:\n"; 
   for (int k=0; k<x; k++)
   {
       cout<<arr3[k]<<endl;
   }
 
 
_getch();
return 0;
}
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
04.03.2013, 18:00     Объединение двух массивов #6
Я же дал код выше. Замените имена массивов и имена размерностей на свои.

Добавлено через 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
33
...
x = n + m;
arr3 = new int[x];
 
   int arr1Pos = 0;
   int arr2Pos = 0;
   int arr3Pos = 0;
   
   while ( true ) {
      arr3[ arr3Pos++ ] = ( arr1[ arr1Pos ] < arr2[ arr2Pos ]) ? arr1[ arr1Pos++ ] : arr2[ arr2Pos++ ];
      
      if ( arr1Pos == n ) {
         while ( arr2Pos < m )
            arr3[ arr3Pos++ ] = arr2[ arr2Pos++ ];
         
         break;
      }
      
      if ( arr2Pos == m ) {
         while ( arr1Pos < n )
            arr3[ arr3Pos++ ] = arr1[ arr1Pos++ ];
         
         break;
      }
   }
 
 
   cout<<"Упорядоченный 3 массив:\n"; 
   for (int k=0; k<x; k++)
   {
       cout<<arr3[k]<<endl;
   }
...
fuelcs
12 / 12 / 0
Регистрация: 23.01.2013
Сообщений: 143
04.03.2013, 19:16     Объединение двух массивов #7
Вчера нам такую же задачку задали...
Вот мой вариант:

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
81
82
83
84
85
86
87
88
89
#include <iostream>
 
using namespace std;
 
template <class T, int n>
void init (T (&arr) [n], int dx)
{
    for (int i=0;i<n;i++)
    {
        *(arr+i)=i*dx;
    }
}
 
template <class T, int n>
void out (T (&arr) [n])
{
    for (int i=0;i<n;i++)
    {
        cout << *(arr+i) << " ";
    }
    cout << "\n\n";
}
 
template <class T, int n, int m>
void add (T (&a) [n], T (&b) [m], T (&c) [n+m])
{
    for (int i=0,j=0,h=0;h<(n+m);h++)
    {
        if (i==n)
        {
            *(c+h)=*(b+j);
            j++;
            continue;
        }
        if (j==m)
        {
            *(c+h)=*(a+i);
            i++;
            continue;
        }
        if (*(b+j)<=*(a+i))
        {
            *(c+h)=*(b+j);
            j++;
        }
        else
        {
            *(c+h)=*(a+i);
            i++;
        }
    }
}
 
 
template <class T, int n, int m>
void add2 (T (&a) [n], T (&b) [m], T (&c) [n+m])
{
    for (int i=0,j=0,h=0;h<(n+m);)
    {
        while(*(a+i)<=*(b+j)&&i<n||(j==m&&i<n))
        {
            *(c+h++)=*(a+i++);
        }
        while(*(b+j)<=*(a+i)&&j<m||(i==n&&j<m))
        {
            *(c+h++)=*(b+j++);
        }
    }
}
 
int main()
{
    const int n=6,m=7;
    int a[n];
    int b[m];
    int c[n+m];
 
    init(a,1);
    out(a);
    init(b,2);
    out(b);
    add(a,b,c);
    out(c);
 
    add2(b,a,c);
    out(c);
 
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2015, 03:18     Объединение двух массивов
Еще ссылки по теме:

Объединение двух массивов C++
C++ Объединение двух массивов
C++ Объединение двух массивов

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

Или воспользуйтесь поиском по форуму:
Черный мечник
48 / 49 / 17
Регистрация: 29.12.2012
Сообщений: 417
30.04.2015, 03:18     Объединение двух массивов #8
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
81
82
83
84
85
86
87
88
89
90
91
92
93
#include<iostream>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"Rus");
 int aN,bN,cN;
    int x,y;
    cout<<"Введите размер множества A:";
    cin>>aN;
cout<<"ведите диапазон  множества A\n от:";
 
        cin>>x;
        cout<<" до:";
        cin>>y;
        cout<<"Введите элементы множества A:\n";
    int *A=new int[aN];
    for(int i=0;i<aN;i++){
        int z;
        cin>>z;
        if(z>x&&z<y)
         A[i]=z;
        else
         {cout<<"Вы вышли за диапазон, повторите ввод:\n";
        --i;}}
    cout<<"\n\nВведите размер множества B:";
    cin>>bN;
        int *B=new int[bN];
cout<<"Введите диапазон  множества B\n от:";
        cin>>x;
        cout<<" до:";
        cin>>y;
cout<<"Введите элементы множества B:\n";
    for(int i=0;i<bN;i++)
        {
        int z;
        cin>>z;
        if(z>x&&z<y)
         B[i]=z;
        else{cout<<"Вы вышли за диапазон, повторите ввод:\n";
        --i;}}
    cout<<"\n\nВведите размер множества C:";
    cin>>cN;
cout<<"ведите диапазон  множества B\n от:";
        cin>>x;
        cout<<" до:";
        cin>>y;
 
int *C=new int[cN];
cout<<"Введите элементы множества C:\n";
    for(int i=0;i<cN;i++)
        {
        int z;
        cin>>z;
        if(z>x&&z<y)
          C[i]=z;
        else
        {cout<<"Вы вышли за диапазон, повторите ввод:\n";
        --i;}}
    cout<<endl;
cout<<"\n\n\nМножество A:";
    for(int i=0;i<aN;i++)
        cout<<A[i]<<":";
    cout<<endl;
cout<<"\nМножество B:";
    for(int i=0;i<bN;i++)
        cout<<B[i]<<":";
    cout<<endl;
cout<<"\nМножество С:";
    for(int i=0;i<cN;i++)
        cout<<C[i]<<":";
    cout<<endl<<endl;
cout<<"\nОбъединение множеств A и B=:";
int *AC=new int[aN+cN];
  for (int i=0;i<aN;i++) 
      AC[i]=A[i];
  for (int i=aN; i<aN+cN; i++)
        AC[i] = C[i - aN];
  for (int i=0; i<aN+cN; i++)
      cout<<AC[i]<<":";
cout<<endl<<endl;
cout<<"Возводим в квадрат множество B=:";
    for(int i=0;i<bN;i++)
        cout<<B[i]*B[i]<<":";
    cout<<endl<<endl;
delete A;
delete B;
delete C;
delete AC;
 system("pause");
  return 0;
}
Yandex
Объявления
30.04.2015, 03:18     Объединение двух массивов
Ответ Создать тему
Опции темы

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