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

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

Войти
Регистрация
Восстановить пароль
 
GNA
0 / 0 / 0
Регистрация: 04.09.2014
Сообщений: 34
#1

В первый массив дописать число, которое есть во втором массиве, но нету в первом - C++

07.09.2014, 17:37. Просмотров 376. Ответов 11
Метки нет (Все метки)

Есть 2 массива:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int arr1[5];
    int arr2[5];
 
    for(int i=0;i<5;i++)
    {
       arr1[i]=i;
       arr2[i]=i+1;
    }
    for(int i=0;i<5;i++)
    {
        cout<<arr1[i]<<" ";
        
    }
    for(int i=0;i<5;i++)
    {
      cout<<arr2[i]<<" ";
    }
Как в 1-ый массив дописать число , которое есть во 2-ом массиве , но нету в 1-ом ?

Помогите , пожалуйста
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2014, 17:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос В первый массив дописать число, которое есть во втором массиве, но нету в первом (C++):

Значения, которые есть в первом массиве и которых нет во втором массиве, скопировать в третий массив - C++
Помогите сделать вот условие Объявить тип структуры, содержащий сведения о фамилии и адреса людей. Ввести два массива таких...

Скопировать в третий массив структуры, которые есть в первом массиве и которых нет во втором массиве - C++
Огласить тип структуры, которая включает в себя данные про фамилии и адреса людей. Ввести два массива таких структур. Значения которые есть...

Найти элементы, которые есть как в первом массиве так и во втором, и вывести их в третий массив - C++
Всем доброго времени суток у меня такой вопрос как решить такую задачку: у нас есть массив arr1 и arr2 нужно найти элементы которые есть...

Вывести одинаковые элементы которые есть в первом и втором массиве - C++
Помогите изменить статический массив на динамический #include &lt;cstdlib&gt; #include &lt;iostream&gt; using namespace std; int main() ...

Даны два файла. Переписать в третий файл только те слова, которые есть и в первом и во втором файле. - C++
Помогите создать программу: Даны два текстовых файла, содержащих некоторый текст. Переписать в третий файл только те слова, которые есть и...

Разделить массив действительных чисел на два списка, в первом числа меньше заданного, во втором - больше - C++
Разделить введен пользователем массив действительных чисел на два списка. В первом списке должны быть числа, меньше заданное пользователем...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Holmes
5 / 5 / 1
Регистрация: 24.08.2014
Сообщений: 78
07.09.2014, 18:18 #2
Во-первых у тебя неизменный массив.То есть дописать ты не сможешь,так как выйдешь за рамки массива.Так что сделай размер arr2-10;
Этот код на C#:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool ravno = false;
int r=5;
for(int i=0;i<5;i++)
    {
         for(int k=0;k<5;k++)
             {
                  if (arr1[i] != arr2[k]) ravno = true; 
                  if(ravno==true)
                      {
                           arr2[r]=arr1[i];
                           r++;
                      }
              }
}
1
Pingvinoff
61 / 61 / 12
Регистрация: 20.08.2014
Сообщений: 593
07.09.2014, 18:28 #3
Цитата Сообщение от Holmes Посмотреть сообщение
if (arr1[i] != arr2[k]) ravno = true;
Holmes, я конечно может чего не понимаю в этой жизни, но тут написано: "если а не равно б, то они равны".GNA, Массивы только так заполняются как Вы указали, или числа случайные?
0
Holmes
5 / 5 / 1
Регистрация: 24.08.2014
Сообщений: 78
07.09.2014, 18:33 #4
Pingvinoff, ravno-это переменная типа bool
0
GNA
0 / 0 / 0
Регистрация: 04.09.2014
Сообщений: 34
07.09.2014, 18:35  [ТС] #5
Ну вообще числа вводятся с клавиатуры ) Но не случайные
0
Pingvinoff
61 / 61 / 12
Регистрация: 20.08.2014
Сообщений: 593
07.09.2014, 18:48 #6
Holmes, я вижу, только почему она у Вас называется "ravno"? Теперь переведите на русский и прочитайте что получится не в обиду сказано.
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
#include <iostream>
 
 
int main() {
    const int size = 5;
    int* arr1 = new int(size);
    int* arr2 = new int(size*2);
    for (int i = 0; i < size; ++i){
        std::cout << "arr1 elem\n";
        std::cin >> arr1[i];
        std::cout << "arr2 elem\n";
        std::cin >> arr2[i];
    }
    for (int i = size; i < size*2; ++i){
        arr2[i] = 0;
    }
    for (int i = 0; i < size; ++i){
        for (int j = 0,int k = size; j < size,k < size*2; ++j,++k){
            if (arr1[i] != arr2[j]){
                arr2[k] = arr1[i];
            }
        }
    }
    for (int i = 0; i < size*2; ++i)
    {
        std::cout << arr2[i] << "\t";
    }
    return 0;
}
0
Holmes
5 / 5 / 1
Регистрация: 24.08.2014
Сообщений: 78
07.09.2014, 19:00 #7
Честно говоря я учу С# поэтому я не понял всего кода,но это неправильно:
C++
1
2
3
4
5
6
7
for (int i = 0; i < size; ++i){
        for (int j = 0,int k = size; j < size,k < size*2; ++j,++k){
            if (arr1[i] != arr2[j]){
                arr2[k] = arr1[i];
            }
        }
    }
Приведу пример:
arr1:1,2,3,4,5; arr2:2,1,3,4,5;
1 запишется в arr2

Добавлено через 1 минуту
А на счет ravno-просто лень было что-то выдумывать,а оно по смыслу подходит.

Добавлено через 2 минуты
Можно было значения поменять
C#
1
2
3
4
5
bool ravno = true;
...
if (arr1[i] != arr2[k]) ravno = false; 
                  if(ravno==false)
...
Но смысл от этого не изменится.
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
07.09.2014, 19:01 #8
Pingvinoff, У Вас будет повторное копирование несовпадающих элементов
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int k=size;
 for (int i = 0; i < size; ++i) // цикл по элементам первого массива
{
        bool present=false;
        for (int j = 0; j < size; ++j)   // проверяем наличие arr1[i] во втором массиве
        {
            if (arr1[i] == arr2[j])
            {
                  present=true;
                  break;
            }
        }
        if(!present) // во втором массиве не нашли
            arr2[k++] = arr1[i];
}
1
Pingvinoff
61 / 61 / 12
Регистрация: 20.08.2014
Сообщений: 593
07.09.2014, 19:06 #9
zss, я с телефона писал, вполне мог промахнуться. Спасибо.
0
SANYAMILITARY
7 / 7 / 3
Регистрация: 07.05.2014
Сообщений: 56
07.09.2014, 19:27 #10
GNA, Я сделал так. Код кривой и долгий, но рабочий. В моей программе массивы сначала надо отсортировать. Так-как здесь массивы отсортированы, то я их не сортировал.
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 "stdafx.h"
#include <iostream>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    int *arr1 = new int[5];
    int *arr2 = new int[5];
 
    for(int i=0;i<5;i++)
    {
       arr1[i]=i;
       arr2[i]=i+1;
    }
    cout << "arr1: ";
    for(int i=0;i<5;i++)
    {
        cout<<arr1[i]<<" ";
        
    }
    cout << endl << "arr2: ";
    for(int i=0;i<5;i++)
    {
      cout<<arr2[i]<<" ";
    }
    int *tem =new int [5];
    for(int i=0;i<5;i++)
    {
      tem[i] = arr1[i];
    }
    free (arr1);
 
    int size_of_arr1 = 5;
    int temp = 0;
    for (int i =0; i<5; i++)
    {   
        for (int j =0; j<5; j++)
        {
            if (arr2[i] != tem[j])
            {
                temp++;
            }
            if (temp == 5)
                {
                    size_of_arr1++;
                    temp = 0;
                }
        }
        temp = 0;
    }
 
    arr1 = new int [size_of_arr1];
    temp = 0;
    int r = 5;
    for (int i =0; i<5; i++)
    {   
        for (int j =0; j<5; j++)
        {
            if (arr2[i] != tem[j] )
            {
                temp++;
            }
            if (temp == 5)
                {
                    arr1[r] = arr2[i];
                    r++;
                    temp = 0;
                }
        }
        temp = 0;
    }
 
 
    for(int i=0;i<5;i++)
    {
      arr1[i] = tem[i];
    }
 
    cout << endl << "New arr1: ";
    for (int i=0; i<size_of_arr1; i++)
    {
        cout<<arr1[i]<<" ";
    }
    
 
    system("pause");
    return 0;
}
Добавлено через 2 минуты
Также я сделал динамическое выделение памяти массивов. Так есть возможность изменять размер массива.
0
GNA
0 / 0 / 0
Регистрация: 04.09.2014
Сообщений: 34
07.09.2014, 22:24  [ТС] #11
Спасибо.
А если у меня имеется массив структур ?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 struct Pk1
    {
        public int i;
        public string info;
    }
    /*2-ой  объект*/
    struct Pk2
    {
        public int i;
        public string info;
    }
 
Pk1[] pk1 = new Pk1[5];
 Pk2[]pk2=new Pk2[5];
И нужно дописать в Pk1 то поле info , которого есть в Pk2 , но нету в Pk1

Как тогда делать нужно? Помогите, пожалуйста

Добавлено через 31 минуту
Я вот так пробую найти :

C#
1
2
3
4
5
6
string []res=new string[5];
            for (int i = 1; i < 5; i++)
            { 
              if (pk1[i].info != pk[i].info) res[i] = pk[i].info;
              Console.WriteLine("Неизвестный атрибут : " + res[i]);
            }
Только как приписать их в Pk1?
0
SANYAMILITARY
7 / 7 / 3
Регистрация: 07.05.2014
Сообщений: 56
08.09.2014, 13:36 #12
GNA, так ты не сможешь правильно найти отличия в массиве структур. Если в arr1 ( 0.1.2.3.4.5), arr2(1.3.4.5.6), то если делать твоим способом. правильно отличие не найдешь. Просто подставь эти данные в свой способ и ты это поймешь.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2014, 13:36
Привет! Вот еще темы с ответами:

Во втором массиве вставить число z после и перед каждым числом, заканчивающееся на число k - C++
Помогите исправить программу! Необходимо, чтобы во втором массиве мы вставили число z после и перед каждым числом, заканчивающееся на...

Бинарный поиск: Если в первом массиве есть такое же число, как и во втором, то написать YES - C (СИ)
Можете помочь составить бинарный поиск вида: если в первом массиве есть такое же число, как и во втором, то написать YES, иначе NO?

Создать третий одномерный массив x состоящий из чисел, которые есть и в первом и во втором массиве - Pascal
Даны два одномерных массива a и b.Числа вводятся с клавиатуры.Создать третий одномерный массив x состоящий из чисел,которые есть и в первом...

Найти элементы, которые есть как в первом массиве так и во втором, и вывести их в третий массив - C++ Builder
Всем доброго времени суток у меня такой вопрос как решить такую задачку: у нас есть массив arr1 и arr2 нужно найти элементы которые есть...


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

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

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