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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
aquarius-a
0 / 0 / 0
Регистрация: 16.04.2011
Сообщений: 48
#1

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

11.05.2011, 22:33. Просмотров 1149. Ответов 6
Метки нет (Все метки)

здравствуйте!
есть задача: даны два неубывающих массива x и y. найти их соединение, то есть неубывающий массив z, содержащий их общие элементы, причем каждый элемент должен входить в массив z столько раз, сколько он входит в общей сложности в массивах x и y. написал код, вроде бы все правильно, но не работает :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
using namespace std;
 
int main() {
int x[]={1,2,2,4,6,7,7,8,9},y[]={1,1,2,2,5,7,8},z[20];
size_t i,j,k,m,t=0;
k=sizeof(x)/sizeof(int),m=sizeof(y)/sizeof(int);
for (i=0;i<k;i++)
  {for (j=0;j<m;j++)
   {if (x[i]==y[j]) {z[t]=x[i];z[t+1]=y[j];t++;}}}
t=sizeof(z)/sizeof(int);
for (i=0;i<t;i++) cout<<z[i]<<" ";
 
getch();
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2011, 22:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос соединение двух массивов (C++):

Поэлементное соединение двух массивов строк с удалением повторяющихся элементов - C++
Например есть два массива: char A = {&quot;abcdefghi&quot;}; char B = {&quot;ihgfedcba&quot;}; В результате должно быть так: ai bh cg df e fd...

Создать два массива, которые будут содержать: все четные элементы двух массивов; все нечетные элементы двух массивов - C++
Помогите, пожалуйста, с программой.. Ввести с клавиатуры два одномерных массива произвольной размерности (например, 3) и создать два...

Соединение массивов. Не могу сообразить. - C++
Задание таково. Создать шаблон функции, а так же к ней тело проги которое будет из 2ух масивов делать третий упорядочивать его по...

Соединение двух 32 битных блоков в 64 битный и обратно - C++
Есть переменная __unt64 и две переменных unsigned unsigned int. Могу ли я получить один 64 битный блок из двух 32 битных и обратно? ...

Объединение двух массивов - C++
Добрый день помогите пожалуйста решыть задачу по програмированнию. Есть два массива целых чисел X(n) i Y(n), n&lt;=300. Создать програму...

Слияние двух массивов - C++
Всем привет. Возникла проблема с задачей. Даны два массива одинакоого размера. Нужно создать 3 массив который будет хранить элементы...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
oinari
5 / 5 / 0
Регистрация: 18.10.2009
Сообщений: 69
11.05.2011, 22:50 #2
Цитата Сообщение от aquarius-a Посмотреть сообщение
t=sizeof(z)/sizeof(int);
ну это первое что бросилось в глаза, размер массива в твоем случае всегда будет равен 20, т.е. эту строчку просто убрать из программы, потому что мы в циклах for уже посчитали количество элементов массива z.
написано правильно, но алгоритм неверный
aquarius-a
0 / 0 / 0
Регистрация: 16.04.2011
Сообщений: 48
11.05.2011, 22:56  [ТС] #3
Цитата Сообщение от oinari Посмотреть сообщение
ну это первое что бросилось в глаза, размер массива в твоем случае всегда будет равен 20, т.е. эту строчку просто убрать из программы, потому что мы в циклах for уже посчитали количество элементов массива z.
написано правильно, но алгоритм неверный
а как мне тогда определять массив z, не указывая кол-во элементов? z[] - ошибка. подскажите, в чем ошибка алгоритма?
oinari
5 / 5 / 0
Регистрация: 18.10.2009
Сообщений: 69
11.05.2011, 23:10 #4
Цитата Сообщение от aquarius-a Посмотреть сообщение
а как мне тогда определять массив z, не указывая кол-во элементов?
Да все хорошо я просто говорю что строчка t=sizeof(z)/sizeof(int); не нужна, так как размер статического массива, всегда равен количеству выделенной под него памяти.
Ошибка в том, что считает неправильно и выводит такие числа: 1 1 2 2 2 2 7 7 8
aquarius-a
0 / 0 / 0
Регистрация: 16.04.2011
Сообщений: 48
11.05.2011, 23:20  [ТС] #5
Цитата Сообщение от oinari Посмотреть сообщение
Да все хорошо я просто говорю что строчка t=sizeof(z)/sizeof(int); не нужна, так как размер статического массива, всегда равен количеству выделенной под него памяти.
Ошибка в том, что считает неправильно и выводит такие числа: 1 1 2 2 2 2 7 7 8
вот то-то и оно...
насчет строчки t=sizeof(z)/sizeof(int) понял.
oinari
5 / 5 / 0
Регистрация: 18.10.2009
Сообщений: 69
11.05.2011, 23:59 #6
aquarius-a, надо в цикле брать каждый элемент первого массива, и находить количество равных ему элементов в первом и во втором, потом записывать в массив z, количество записей будет равно количеству найденных элементов и так пока не пройдем все числа.

Добавлено через 24 минуты
aquarius-a,
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
int _tmain(int argc, _TCHAR* argv[])
{
    int x[]={1,2,2,4,6,7,7,8,9},y[]={1,1,2,2,5,7,8},z[80];
    size_t i=0,j,k,m,t=0,count,step_fa=0,step_sa=0;
    k=sizeof(x)/sizeof(int), m=sizeof(y)/sizeof(int);
    for (i=0;i<k;i++)
    {
        for (j=0;j<m;j++)
        {
            if (x[i]==y[j])
            {
                for(int step(i+1);step<k;step++)
                    if(x[i]==x[step]) step_fa++;
                    else break;
                for(int step(j+1);step<m;step++)
                    if(y[j]==y[step]) step_sa++;
                    else break;
                for(count = 0 ; count < step_fa+step_sa+2; count++)
                {
                    z[t] = x[i];
                    t++;
                }
                i+=step_fa+1;
                j+=step_sa;
                step_fa=0,step_sa=0;
            }
        }
    }
    for (i=0;i<t;i++) cout<<z[i]<<" ";
    getch();
    return 0;
}
Держи
screenshot: http://s13.***********/i186/1105/93/64d001e7870e.jpg
aquarius-a
0 / 0 / 0
Регистрация: 16.04.2011
Сообщений: 48
12.05.2011, 00:50  [ТС] #7
oinari, спасибо большое
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2011, 00:50
Привет! Вот еще темы с ответами:

Сравнение двух массивов - C++
даны два массива целых чисел одинакового размера. сравнить элементы двух массивов и сохранить результаты в третий массив в соответствующей...

Сравнение двух массивов - C++
что не так,, введеный массив должен быть равен заданому,.. #include &lt;iostream.h&gt; int main() { int arr; int i=0; int...

Объединение двух массивов - C++
Пожалуйста! Дано два впорядкованих за зростанням масиви A(m) та B(n). Отримати з них за допомогою злиття впорядкований за зростанням...

Объединение двух массивов - C++
Выполнено два задания:нашли Элементы массива A, которые не включаются в B и Элементы массива B, которые не включаются в A. Как объединить...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
12.05.2011, 00:50
Ответ Создать тему
Опции темы

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