Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
 Аватар для _д_м_и_т_р_и_й_
0 / 0 / 0
Регистрация: 11.02.2011
Сообщений: 38

Вывести массив D, состоящий из тех элементов В, которых нет в С

11.08.2011, 21:23. Показов 818. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
даны три одномерных массива (А,В,С). нужно вывести массив D, состоящий из тех элементов В, которых нет в С, и тех элементов С, которых нет в А. В дискретной математике это выглядит так: D=(B-C)+(C-A)
где + это знак объединения.
Умоляю, очень нужна программа. Заранее всем спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.08.2011, 21:23
Ответы с готовыми решениями:

Дан массив целых чисел, состоящий из 15 элементов. Вывести индексы тех элемемтов, значения которых кратны 3 и 5
помогите пожалуйста скорее!буду очень признателен!!

Дан массив, состоящий из N элементов. Составить программу, которая вычислит среднее арифметическое тех элементов массива, значения которых не падает в
Дан массив, состоящий из N элементов. Составить программу, которая вычислит среднее арифметическое тех элементов массива, значения которых...

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

4
Заблокирован
11.08.2011, 21:52
Цитата Сообщение от _д_м_и_т_р_и_й_ Посмотреть сообщение
даны три одномерных массива (А,В,С). нужно вывести массив D, состоящий из тех элементов В, которых нет в С, и тех элементов С, которых нет в А. В дискретной математике это выглядит так: D=(B-C)+(C-A)
где + это знак объединения.
Умоляю, очень нужна программа. Заранее всем спасибо.
Если вы знаете стандартные алгоритмы, то это делается в одну строчку. Главное - чтобы результирующий массив D имел достаточную размерность, для хранения результирующих элементов.

Но сначала вам нужно отсортировать массивы.

C++
1
2
3
std::sort( A, A + k );
std::sort( B, B + l );
std::sort( C, C + m );
Здесь r, l, m - это обозначение размерности соответствующих массиивов.

Далее пишите одну строчку

C++
1
std::set_difference( C, C + m, A, A + k, std::set_difference( B, B + l, C, C + m, D ) );
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
11.08.2011, 21:53
Код и скриншот работы, циклы вконце можно доработать до функции, это можешь при большом желании сам сделать
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
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
 
int get_rand_num(int max);
void show_mass(int m, int * mass);
bool valEmass(int m, int * mass, int val);
 
int main()
{
    srand(0);
    cout<<"Enter numelements in vectors m = ";
    int m;cin>>m;
    int * A = new int[m];
    int * B = new int[m];
    int * C = new int[m];
    int * D = new int[2*m];
    for(int i = 0; i < m; i++)
    {
        A[i] = get_rand_num(100);
        B[i] = get_rand_num(100);
        C[i] = get_rand_num(100);
    }
    cout<<"\tInput vectors\r\n";
    cout<<"Vector A:\r\n";
    show_mass(m, A);
    cout<<"Vector B:\r\n";
    show_mass(m, B);
    cout<<"Vector C:\r\n";
    show_mass(m, C);
    int k = 0;
    for(i = 0; i < m; i++)
    {
        if(!valEmass(m, B, A[i]))
        {
            D[k] = A[i];
            k++;
        }
    }
    for(i = 0; i < m; i++)
    {
        if(!valEmass(k + 1, B, C[i]))
        {
            D[k] = C[i];
            k++;
        }
    }
    cout<<"Vector D:\r\n";
    show_mass(k, D);
    cout<<"Press any key to continue\r\n";
    char ch;cin>>ch;
    return 0;
}
 
int get_rand_num(int max)
{
    int ret = rand();
    while(max < ret)
        ret = rand();
    return ret;
}
 
void show_mass(int m, int * mass)
{
    for(int i = 0; i < m; i++)
        cout<<mass[i]<<" ";
    cout<<"\r\n";
}
 
bool valEmass(int m, int * mass, int val)
{
    bool ret = false;
    for(int i = 0; i < m; i++)
    {
        if(mass[i] == val)
            break;
    }
    if(i < m)
        ret = true;
    return ret;
}
Миниатюры
Вывести массив D, состоящий из тех элементов В, которых нет в С  
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
11.08.2011, 22:50
Цитата Сообщение от Сыроежка Посмотреть сообщение
В вашем коде еще надо разбираться, что он делает, так как ваш код оригинальный, а мой код всем понятен, кто знаком с С++.
- Сортировки удлиняют выполнение кода, я понял что ты делал, причём тут кто знаком с С++)

Вот код сам алгоритм уместился в 2 функции( у тебя их 4!), остальное лишь организация интерфейса и инициализация
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
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
 
int get_rand_num(int max);
void show_mass(int m, int * mass);
bool valEmass(int m, int * mass, int val);
void vecUnion(int m, int * vec1, int * vec2, int &k, int * out);
 
int main()
{
    srand(0);
    cout<<"Enter numelements in vectors m = ";
    int m;cin>>m;
    int * A = new int[m];
    int * B = new int[m];
    int * C = new int[m];
    int * D = new int[2*m];
    for(int i = 0; i < m; i++)
    {
        A[i] = get_rand_num(100);
        B[i] = get_rand_num(100);
        C[i] = get_rand_num(100);
    }
    cout<<"\tInput vectors\r\n";
    cout<<"Vector A:\r\n";
    show_mass(m, A);
    cout<<"Vector B:\r\n";
    show_mass(m, B);
    cout<<"Vector C:\r\n";
    show_mass(m, C);
    int k = 0;
    vecUnion(m, A, B, k, D);
    vecUnion(m, C, B, k, D);
    cout<<"Vector D:\r\n";
    show_mass(k, D);
    cout<<"Press any key to continue\r\n";
    char ch;cin>>ch;
    return 0;
}
 
int get_rand_num(int max)
{
    int ret = rand();
    while(max < ret)
        ret = rand();
    return ret;
}
 
void show_mass(int m, int * mass)
{
    for(int i = 0; i < m; i++)
        cout<<mass[i]<<" ";
    cout<<"\r\n";
}
 
bool valEmass(int m, int * mass, int val)
{
    bool ret = false;
    for(int i = 0; i < m; i++)
    {
        if(mass[i] == val)
            break;
    }
    if(i < m)
        ret = true;
    return ret;
}
 
void vecUnion(int m, int * vec1, int * vec2, int &k, int * out)
{
    for(int i = 0; i < m; i++)
    {
        if(!valEmass(m, vec2, vec1[i]))
        {
            out[k] = vec1[i];
            k++;
        }
    }
}
Миниатюры
Вывести массив D, состоящий из тех элементов В, которых нет в С  
0
Заблокирован
11.08.2011, 23:49
Это не важно, сколько места занимает ваш код. Проблема в другом. Никто не знает, что делает ваш код. То есть каждому придется разбираться в вашем коде, что отнимает время у программистов. Причем интерфейс вашего кода, честно говоря, ужасный. То есть если уж писать собственный код, то хотя бы интерфейс функций, то есть их прототипы, делать схожими со стандартными алгоритмами. Например, я смотрю прототип следующей функции

C++
1
void vecUnion(int m, int * vec1, int * vec2, int &k, int * out);
и мне ничего не ясно. Например, что эта за переменная k, которая передается по ссылке? И зачем она вообще нужна? То есть ваш код не профессиональный. Так сказать, код на уровне студента.

Я лишь с вами в одном согласен, что тут и требуется такой "студенческий" код, так как скорей всего авторы вопросов в этом разделе не знакомы с С++, чтобы использовать алгоритмы. Тем не менее всегда имеет смысл показать, как задачу следует делать, если вы обладаете достаточными знаниями С++.

Относительно задачи могу сказать, что на самом деле действительно сортировка не требуется, если писать свой алгоритм разности двух множеств. Но тогда его сложность будет высокая и равна произведению размерностей двух массивов.

Добавлено через 40 минут
В чем состоит прелесть использования стандартных алгоритмов - это то, что если вам нужно вывести результат на экран, то вам не нужен даже массив D, и в исходном коде вы меняете всего лишь одну переменную! То есть вместо

C++
1
2
std::set_difference( C, C + m, A, A + k,
                    std::set_difference( B, B + l, C, C + m, D ) );
вы можете записать

C++
1
2
3
std::set_difference( C, C + m, A, A + k,
                    std::set_difference( B, B + l, C, C + m,
                    std::ostream_iterator<int>( std::cout, "; " ) ) );
и у вас все готово! Я всего лишь поменял последний аргумент в выражении, а какой эффект!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.08.2011, 23:49
Помогаю со студенческими работами здесь

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

Массив: вывести индексы тех элементов, для которых исполняется условие C[i][j]= C[j][i]
Есть двухмерный масив (матрица) розмером nxn вывести индексы тех елементов для которых исполняется условие C= C. Помогите плиз, немогу...

Дан массив целых чисел. Вывести индексы тех элементов, значения которых кратны 3 и 5
1)Дан массив целых чисел. Вывести индексы тех элементов, значения которых кратны 3 и 5 2)Определить, есть ли пара соседних элементов с...

Вывести массив в виде таблицы. Вычислить произведение тех элементов, для которых справедливы неравенства
Создать массив с элементами a=n*f(k)+sin(k)*g(n), где k, n=1,2,3,4 f(k)=2*sin(k)*sin(2k−1,5)*cos(2k+1,5)−6 g(n)=|cos(n2)...

Массив: Вывести индексы тех элементов массива, значения которых больше, чем у стоящих справа от него
Задан целочисленный массив вывести индексы тех элементов, значения которых больше, чем у стоящих справа от него. Определить количество...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru