Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Setb
136 / 2 / 6
Регистрация: 04.07.2015
Сообщений: 122
1

Создать третий массив, в котором нужно собрать общие элементы двух массивов

12.09.2015, 14:26. Просмотров 1029. Ответов 7
Метки нет (Все метки)

Даны два массива: A[n] и B[n]. Необходимо создать третий массив, в котором нужно собрать общие элементы двух массивов. Для работы с массивами используйте указатели.
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
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "rus");
    srand(time(NULL));
    
    const int size1 = 6;
    const int size2 = 8;
    int mas1[size1], mas2[size2];//создаем 2 массива
        
    int *ptr1 = &mas1[0];//создаем указатели на массивы
    int *ptr2 = &mas2[0];
 
    printf("Первый массив:\n");
 
    for (int i = 0; i<size1; i++)
    {
        *(ptr1 + i) = rand() % 10;
        printf("%d ", ptr1[i]);
    }
    printf("\n");
    printf("Второй массив:\n");
 
    for (int i = 0; i<size2; i++)
    {
        *(ptr2 + i) = rand() % 10;
        printf("%d ", ptr2[i]);
    }
    printf("\n");
    
    int mas3[size1 + size2];//создаем третий массив
    int *ptr3 = &mas3[0];
    int temp = 0;//переменная для записи элементов в массив
 
    for (int i = 0; i<size1; i++)
    {
        for (int j = 0; j<size2; j++)
        {
            if (*(ptr1 + i) == *(ptr2 + j))//если значения в массивах равны, то пишем их в третий массив
            {
                *(ptr3 + temp) = *(ptr1 + i);
                temp++;
                break;
            }
        }
    }
 
    printf("третий массив:\n");
 
    for (int i = 0; i<temp; i++)
    {
        printf("%d ", ptr3[i]);
    }
    printf("\n");
    
    
    return 0;
    }
Все работает. Только как сделать проверку, если общих чисел несколько, чтоб они не писались в третий массив?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2015, 14:26
Ответы с готовыми решениями:

Создать третий массив, в котором нужно собрать общие элементы двух массивов
Элементы, которые есть только в массиве А или только в массиве В, заполнить ими массив C. Всё...

Создать третий массив на основе двух заданных массивов по условию
Создать 2 динамических массива различной размерности, указанной пользователем. Далее создать третий...

Создать третий массив такого же размера каждый элемент которого равен сумме соответствующих элементов двух первых массивов
Даны два двумерных массива одинаковых размеров. а) Создать третий массив такого же размера каждый...

Из двух упорядоченных массивов составить третий упорядоченный массив
#include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; using namespace std; //...

Создать третий массив из индексов повторяющихся элементов исходных массивов
Привет всем! Помогите пожалуйста, уже все перепробовал, ни как не получается сделать прогу. Задать...

7
Kerry_Jr
Эксперт PHP
2211 / 2007 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
12.09.2015, 14:56 2
Лучший ответ Сообщение было отмечено Setb как решение

Решение

Цитата Сообщение от Setb Посмотреть сообщение
C
1
int mas3[size1 + size2];//создаем третий массив
не вижу смысла создавать массив размером с два массива, если число общих элементов не может превысить размер меньшего из них.
Цитата Сообщение от Setb Посмотреть сообщение
как сделать проверку
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
int temp = 0; //переменная для записи элементов в массив
int flag = 0; // флаг наличия элемента в конечном массиве
 
for (int i = 0; i<size1; i++)
{
    for (int j = 0; j<size2; j++)
    {
        if (*(ptr1 + i) == *(ptr2 + j))//если значения в массивах равны, то 
        {
            flag = 0;
            for (int k = 0; k < temp; k++)
                if (*(ptr1 + i) == *(ptr3 + k)) // проверяем наличие элемента в конечном массиве
                {
                    flag = 1;
                    break;
                }
            if (!flag) // если его нет, то
            {
                *(ptr3 + temp) = *(ptr1 + i); // пишем элемент в массив
                temp++;
                break;
            }
        }
    }
}
1
Setb
136 / 2 / 6
Регистрация: 04.07.2015
Сообщений: 122
12.09.2015, 15:04  [ТС] 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
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "rus");
    srand(time(NULL));
 
    const int size1 = 6;
    const int size2 = 8;
    int mas1[size1], mas2[size2];//создаем 2 массива
 
    int *ptr1 = &mas1[0];//создаем указатели на массивы
    int *ptr2 = &mas2[0];
 
    printf("Первый массив:\n");
 
    for (int i = 0; i<size1; i++)
    {
        *(ptr1 + i) = rand() % 10;
        printf("%d ", ptr1[i]);
    }
    printf("\n");
    printf("Второй массив:\n");
 
    for (int i = 0; i<size2; i++)
    {
        *(ptr2 + i) = rand() % 10;
        printf("%d ", ptr2[i]);
    }
    printf("\n");
 
    int mas3[size1 + size2];//создаем третий массив
    int *ptr3 = &mas3[0];
    int temp = 0;//переменная для записи элементов в массив
 
    int flag = 0; // флаг наличия элемента в третьем массиве
 
    for (int i = 0; i<size1; i++)
    {
        for (int j = 0; j<size2; j++)
        {
            if (*(ptr1 + i) == *(ptr2 + j))//если значения в массивах равны
            {
                flag = 0;
                for (int k = 0; k < temp; k++)
                {
                if (*(ptr1 + i) == *(ptr3 + k))//если уже есть такое значение, поднимаем флаг
                {
                    flag = 1;
                    break;
                }
                if (!flag)//если нет такого значения, то пишем его в массив
                {
                    *(ptr3 + temp) = *(ptr1 + i);
                    temp++;
                    break;
                }
            }
        }
    }
 
    printf("третий массив:\n");
 
    for (int i = 0; i<temp; i++)
    {
        printf("%d ", ptr3[i]);
    }
    printf("\n");
 
 
    return 0;
}
Все равно одинаковые значения пишет
0
IrineK
Заблокирован
12.09.2015, 15:48 4
Цитата Сообщение от Setb Посмотреть сообщение
Необходимо создать третий массив
Лучше бы список.
0
12.09.2015, 15:48
Setb
136 / 2 / 6
Регистрация: 04.07.2015
Сообщений: 122
12.09.2015, 17:33  [ТС] 5
А как именно мой код отредактировать?

Добавлено через 1 час 36 минут
Заработало. Это какой-то глюк был)
0
Kerry_Jr
Эксперт PHP
2211 / 2007 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
12.09.2015, 17:47 6
Setb, т.е. Вас не смущает замечание по поводу размера массива?
0
MansMI
1452 / 1161 / 550
Регистрация: 08.01.2012
Сообщений: 4,509
12.09.2015, 18:06 7
с 44-й строкой все нормально? компилирует?
0
Setb
136 / 2 / 6
Регистрация: 04.07.2015
Сообщений: 122
12.09.2015, 20:13  [ТС] 8
Смущает) просто сделано на базе другой задачи, где надо было большой третий массив. Исправлю.
А в 44 не хватало скобки

Добавлено через 1 минуту
Проверено. Все работает.
0
12.09.2015, 20:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2015, 20:13

Есть 2 одномерных массива, нужно все не общие элементы записать в 3 массив
Помогите решить, буду очень благодарен

Создать третий массив, в котором нужно собрать элементы двух заданных массивов
Даны два массива : А и B. Необходимо создать третий массив, в котором нужно собрать: Элементы...

Создать массив минимально возможного размера, в котором нужно собрать общие элементы двух заданных массивов
Даны два массива: А и B (M и N вводятся с клавиатуры). Необходимо создать третий массив...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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