[ create a new paste ] login | about

Link: http://codepad.org/rgZwyvML    [ raw code | output | fork ]

C++, pasted on Nov 5:
#include <iostream>
int s_union(const int* a1, int n1, const int* a2, int n2, int* a3);
int  s_intersect(const int* a1, int n1, const int* a2, int n2, int* a3);
int  s_diff(const int* a1, int n1, const int* a2, int n2, int* a3);




int main(void){
        int a[5] = { 1, 2, 7, 8, 10 };
        int b[6] = { 0, 2, 9, 10, 15, 40 };
        int c[11], n;

        n = s_union(a, 5, b, 6, c);
        for(int i = 0; i < n; i++)
                std::cout << c[i] << ' ';
        std::cout << std::endl;

        n = s_intersect(a, 5, b, 6, c);
        for(int i = 0; i < n; i++)
                std::cout << c[i] << ' ';
        std::cout << std::endl;

        n = s_diff(a, 5, b, 6, c);
        for(int i = 0; i < n; i++)
                std::cout << c[i] << ' ';
        return 0;
}





//объединение множеств
int s_union(const int* a1, int n1, const int* a2, int n2, int* a3){
        const int* e1 = a1 + n1;
        const int* e2 = a2 + n2;
        int*  p = a3;

        while((a1 != e1) && (a2 != e2)) {
                if(*a1 < *a2)
                        *p++ = *a1++;
                else if(*a2 < *a1)
                        *p++ = *a2++;
                else {
                        *p++ = *a1;
                        ++a1;
                        ++a2;
                }
        }

        while(a1 != e1)
                *p++ = *a1++;
        while(a2 != e2)
                *p++ = *a2++;

        return (p - a3);
}



// пересечение множеств
int  s_intersect(const int* a1, int n1, const int* a2, int n2, int* a3){
        const int* e1 = a1 + n1;
        const int* e2 = a2 + n2;
        int*  p = a3;
        while((a1 != e1) && (a2 != e2)) {
                if(*a1 < *a2)
                        *a1++;
                else if(*a2 < *a1)
                        *a2++;
                else {
                        *p++ = *a1;
                        ++a1;
                        ++a2;
                }
        }
        return (p - a3);
}



// разность множеств
int  s_diff(const int* a1, int n1, const int* a2, int n2, int* a3){
        const int* e1 = a1 + n1;
        const int* e2 = a2 + n2;
        int*  p = a3;
        while((a1 != e1) && (a2 != e2)) {
                if(*a1 < *a2)
                        *p++ = *a1++;
                else if(*a2 < *a1)
                        ++a2;
                else {
                        ++a1;
                        ++a2;
                }
        }
        return (p - a3);
}


Output:
1
2
3
0 1 2 7 8 9 10 15 40 
2 10 
1 7 8 


Create a new paste based on this one


Comments: