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

Найти объединение двух множеств - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Std::multiset::find http://www.cyberforum.ru/cpp-beginners/thread1628851.html
Каким образом функция сравнивает элементы, если я не перегрузил == У меня в классе два поля, она сравнивает их оба на соответствие? И как перегрузить, операцию == для std::multiset::find. Мои перегрузки не выполняются, а функция работает не так как мне надо. Спасибо!
C++ Моделирование работы морского порта Ребят,столкнулась с таким проектом.Нужно реализовать,100500 раз прочитала условие,и ничего не понимаю...Кто может помочь разобраться и все "разложить по полочкам"? Требуется создать компьютерную модель обслуживания потока заявок на разгрузку, поступающих от грузовых судов (сухогрузов и танкеров), прибывающих в морской порт. Грузовые суда прибывают в порт согласно расписанию, но возможны... http://www.cyberforum.ru/cpp-beginners/thread1628815.html
Существующие системы сборки в С++ C++
Здравствуйте. У меня есть вопрос: Какие системы сборки или так называемые системы "упрощения жизни программиста" существуют для С++? Что бы вручную не линковать и т.д. Я знаю только CMake. Мне бы знать самые популярные и частоиспользуемые.
Объяснить, что происходит в коде C++
что выполняется в строчке (p->d=x;) Node *first(laba x) Node *p; p=new Node; p->d=x; p->next=NULL; return(p); }
C++ Найти самое длинное слово в сообщении http://www.cyberforum.ru/cpp-beginners/thread1628776.html
#include <stdio.h> #include <string.h> #include <conio.h> int main() { char str, *temp; gets(str); int len; int max_len = strlen(temp = strtok(str, " ,.!?"));
C++ Cоздать и заполнить массив строк в стиле Си (квадратную матрицу указателей на char) Нужно создать массив символьных указателей на 10 элементов и выполните вывод всех строк в 10 столбиков Нужно заполнить массив указателями. Строки вводить с клавиатуры и размещать в динамических массивах. Сделать вывод строк в 10 столбцов, после чего уничтожить динамические массивы. ПОМОГИТЕ ПОЖАЛУЙСТА с трёх часов сижу. подробнее

Показать сообщение отдельно
ПерС
366 / 282 / 84
Регистрация: 05.11.2013
Сообщений: 806
Записей в блоге: 5
Завершенные тесты: 1
30.12.2015, 08:46     Найти объединение двух множеств
Объединением множеств A и B называется множество элементов, принадлежащих, по крайней мере, одному из данных множеств (т. е. либо A, либо B, либо одновременно и A и B).
Вот прога не на плюсах, а на обычном Си, которая объединяет 2 множества-массива, может, поможет
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
90
91
92
#include <stdio.h>
#include <stdlib.h>
 
void delete_equal(int *n0, int *a) {
    //Удаляет из массива повторяющиеся элементы и вычисляет новую размерность n0
    int n = *n0;
    int i = 0;
    while (i<n) {
        int j = i + 1;
        while (j<n) {
            if (a[i] == a[j]) {
                for (int k = j; k<n - 1; k++) a[k] = a[k + 1];
                n--;
            }
            else j++;
        }
        i++;
    }
    *n0 = n;
}
 
int find_item(int na, int *a, int b) {
    //Ищет элемент b в массиве a[na] и возвращает его индекс или -1 (не найдено)
    for (int i = 0; i<na; i++) if (a[i] == b) return i;
    return -1;
}
 
int *copy_array(int n, int *a, int *c) {
    //Копирует массив a в новый массив c и возвращает указатель на него
    c = (int *)calloc(n, sizeof(int));
    if (c == NULL) return NULL;
    for (int i = 0; i<n; i++) c[i] = a[i];
    return &c[0];
}
 
int *union_array(int na, int *a, int nb, int *b, int *nc) {
    //Объединение массивов a и b с размерностями na и nb
    //в новый динамический массив (в массив войдут уникальные элементы,
    //присутствующие хотя бы в одном из массивов a,b)
    int *c=NULL, i, j;
    if (na<1) {
        if (nb<1) return NULL;
        else {
            delete_equal(&nb, b);
            return copy_array(nb, b, c);
        }
    }
    else if (nb<1) {
        delete_equal(&na, a);
        return copy_array(na, a, c);
    }
    delete_equal(&na, a);
    delete_equal(&nb, b);
    //Вычисляем количество разных элементов в 2 массивах
    int kc = 0;
    for (i = 0; i<na; i++) if (find_item(nb, b, a[i]) != -1) kc++;
    *nc = na + nb - kc;
    c = (int *)calloc(*nc, sizeof(int));
    if (c == NULL) return NULL;
    //Формируем массив c
    int k = 0;
    for (i = 0; i<na; i++) c[k++] = a[i];
    for (j = 0; j<nb; j++) if (find_item(na, a, b[j]) == -1) c[k++] = b[j];
    return c;
}
 
void print_array(int n, int *a) { //Выводит массив на экран
    printf("\n");
    for (int i = 0; i<n; i++) printf("%5d ", a[i]);
}
 
void wait() { //Ждет нажатия клавиши
    printf("\nPress a key to continue...");
    fflush(stdin); getchar();
}
 
const int na = 6, nb = 5; //Размерности массивов a,b
int a[na] = { 4, 4, 2, 5, 3, -1 },
b[nb] = { 2, 3, 4, 4, 1 };
//Описали множества как массивы
 
void main() {
    int nc;
    printf("\na=");
    print_array(na, a);
    printf("\nb=");
    print_array(nb, b);
    printf("\nUnion (a,b)=");
    int *c = union_array(na, a, nb, b, &nc);
    print_array(nc, c);
    wait();
}
 
Текущее время: 20:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru