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

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

12.09.2015, 14:26. Показов 3754. Ответов 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.09.2015, 14:26
Ответы с готовыми решениями:

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

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

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

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

7
Эксперт PHP
3008 / 2523 / 1187
Регистрация: 14.05.2014
Сообщений: 7,100
Записей в блоге: 1
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
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
Заблокирован
12.09.2015, 15:48 4
Цитата Сообщение от Setb Посмотреть сообщение
Необходимо создать третий массив
Лучше бы список.
0
136 / 2 / 6
Регистрация: 04.07.2015
Сообщений: 122
12.09.2015, 17:33  [ТС] 5
А как именно мой код отредактировать?

Добавлено через 1 час 36 минут
Заработало. Это какой-то глюк был)
0
Эксперт PHP
3008 / 2523 / 1187
Регистрация: 14.05.2014
Сообщений: 7,100
Записей в блоге: 1
12.09.2015, 17:47 6
Setb, т.е. Вас не смущает замечание по поводу размера массива?
0
1464 / 1172 / 551
Регистрация: 08.01.2012
Сообщений: 4,517
12.09.2015, 18:06 7
с 44-й строкой все нормально? компилирует?
0
136 / 2 / 6
Регистрация: 04.07.2015
Сообщений: 122
12.09.2015, 20:13  [ТС] 8
Смущает) просто сделано на базе другой задачи, где надо было большой третий массив. Исправлю.
А в 44 не хватало скобки

Добавлено через 1 минуту
Проверено. Все работает.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.09.2015, 20:13

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

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

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

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


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

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

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