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

Надо создать массив путем слияния двух произвольных одномерных массивов - C++

Восстановить пароль Регистрация
 
Novi4ekC
76 / 76 / 18
Регистрация: 03.03.2013
Сообщений: 287
15.04.2013, 00:05     Надо создать массив путем слияния двух произвольных одномерных массивов #1
Нужно сделать массив, в котором елементы будут расположены следующим образом:
m3={m1[0],m2[0],m1[1],m2[1],m1[2],m2[2] и т. д.}
Нужно учитывать, что количество елементов произвольных массивов может быть разное, в том числе какой то из массивов может не иметь елементов вобще.
Помогите с алгоритмом, пожалуйста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2013, 00:05     Надо создать массив путем слияния двух произвольных одномерных массивов
Посмотрите здесь:

C++ Получить упорядоченный массив путем слияния двух введенных и вывести его
Даны два произвольных одномерных массива действительных чисел М1 и М2. Сформировать слиянием этих массивов упорядоченный массив М3 C++
C++ Из двух упорядоченных массивов получить путем слияния упорядоченный массив C
Создать массив, в котором присутствуют только совпадающие элементы двух известных одномерных массивов C++
C++ Надо создать массив путем слияния двух произвольных одномерных массивов
C++ Получить массив С(К). упорядоченный по возрастанию, путем слияния массивов A(N) и В(М). упорядоченных по возрастанию (К = N + М).
Получить массив С(К), упорядоченный по возрастанию, путем слияния массивов A(N) и B(M), упорядоченных по возрастанию (K = N + M) C++
C++ Сформировать массив из двух других одномерных массивов STL

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
anmartex
...
 Аватар для anmartex
1700 / 1193 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
15.04.2013, 06:46     Надо создать массив путем слияния двух произвольных одномерных массивов #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
#include <stdio.h>
 
void Two2One(int m1[], int nM1, int m2[], int nM2, int m3[])
{
    int i = 0, j = 0;
 
    int nMax = (nM1 < nM2) ? nM2 : nM1;
 
    for (i = 0; i < nMax; ++i)
    {
        if (i < nM1)
        {
            m3[j++] = m1[i];
        }
 
        if (i < nM2)
        {
            m3[j++] = m2[i];
        }
    }
}
 
int main()
{
 
    int m1[4] = { 1, 3, 5, 7 };
    int m2[3] = { 2, 4, 6 };
    int m3[7];
    int i;
 
    Two2One(m1, 4, m2, 3, m3);
 
    for (i = 0; i < 7; ++i)
    {
        printf("%d ", m3[i]);
    }
 
    return 0;
}
Код
stdout: 
1 2 3 4 5 6 7
wowofbob
2 / 2 / 0
Регистрация: 19.01.2013
Сообщений: 32
15.04.2013, 16:20     Надо создать массив путем слияния двух произвольных одномерных массивов #3
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 < typename ArrayType > 
void print_array(ArrayType * arr, const int & size) {
    for (int i = 0; i < size; ++i) {
        cout << "Array[" << i << "] = " << arr[i] << endl;
    }
}
 
//Создание массива:
template < typename ArrayType >
ArrayType * get_array(const int & size) {
    ArrayType * array = new ArrayType [size];
    for (int i = 0; i < size; ++i) {
        cout << "Array[" << i << "] = ";
        ArrayType val;
        cin >> val;
        array[i] = val;
    }
    return array;
}
 
//Слияние массивов:
template < typename ArrayType >
ArrayType * fusion(int & new_array_size, const ArrayType * arr1, const int & size1, ArrayType * arr2, const int & size2) {
    
    //Вычисление длины массива-результата слияния:
    new_array_size = size1 + size2 ;
    ArrayType * array = new ArrayType [new_array_size];
    ArrayType * ptr = array;
    
    //Надо вычислить наименьшую длину из двух поданных
    //массив, чтобы сначала заполнить новый массив парами,
    //как указано в задании:
    int limit1;
    int limit2;
    //Этот указатель понадобится для записи в новый массив
    //тех элементов, для которых не нашлось пары (короче,
    //оставшихся элементов из самого длинного массива):
    const ArrayType * MaxSizeArray;
    if (size1 < size2) {
        limit1 = size1;
        limit2 = size2;
        MaxSizeArray = arr2;
    }
    else {
        limit1 = size2;
        limit2 = size1;
        MaxSizeArray = arr1;
    }
    MaxSizeArray += limit1;
    
    for (int i = 0; i < limit1; ++i) {
        *(ptr++) = arr1[i];
        *(ptr++) = arr2[i];
    }
    
    for (int i = limit1; i < limit2; ++i) {
        *(ptr++) = *(MaxSizeArray++);
    }
    
    return array;
    
}
        
    
    
int main() {
 
    int size1;
    cout << "Size of first array is ";
    cin >> size1;
    int * arr1 = get_array < int > (size1);
    cout << endl;
    
    int size2;
    cout << "Size of second array is ";
    cin >> size2;
    int * arr2 = get_array < int > (size2);
    cout << endl;
    
    int fusion_result_size;
    int * fusion_result = fusion < int > (fusion_result_size, arr1, size1, arr2, size2);
    print_array < int > (fusion_result, fusion_result_size);
    
    return 0;
}
Yandex
Объявления
15.04.2013, 16:20     Надо создать массив путем слияния двух произвольных одномерных массивов
Ответ Создать тему
Опции темы

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