Объединение двух множеств - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите! Нужно сделать объединение двух множеств. Вот код, но я не пойму откуда ноль
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#define KU 11
int search(int B[],int A)
{
    int i;
    for(i=1;i<KU;i++)
        if (B[i]==A) return 1;
    return 0;
}
void vvod(int *KA, int A[KU])
{
    int j;
    printf("Введите кол-во элементов множества: \n");
    scanf("%i",KA);
    printf("Введите элементы множества: \n");
    for (j=1;j<*KA;j++){
        scanf("%i",&A[j]);
    }
}
void obedenenie(int A[KU],int B[KU],int C[KU],int KA,int KB,int *p)
{
    int j,i;
    *p=KB;
    for(i=1;i<*p;i++){
        C[i]=B[i];
    }
    for(j=1;j<KA;j++){
        if(search(C,A[j])==0)
        {
            (*p)++;
            C[*p]=A[j];
        }
    }
}
int main()
{
    setlocale (LC_CTYPE,"");
    int A[KU],B[KU],i,j,KA,KB,p,C[KU],F;
    vvod(&KA,A);
    vvod(&KB,B);
    obedenenie(A,B,C,KA,KB,&p);
    for(i=1;i<=p;i++)
        printf("%i ",C[i]);
    return 0;
}

Решение задачи: «Объединение двух множеств»

textual
Листинг программы
#include <stdio.h>
#define  KU 11
 
int* union_set(int* f1, int* l1, int* f2, int* l2, int* ds){
    int* p = ds;
    while((f1 != l1) && (f2 != l2)){
        if(*f1 < *f2)
            *p++ = *f1++;
        else {
            if(*f1 == *f2)
                ++f1;
            *p++ = *f2++;
        }
    }
 
    while(f1 != l1)
        *p++ = *f1++;
    while(f2 != l2)
        *p++ = *f2++;
    return p;
}
 
int main(void){
    int* p, *e;
    int  sc[KU * 2];
    int  sa[] = { 1, 3, 4, 5, 8 };
    int  sb[] = { 0, 1, 2, 5, 6, 7, 8, 9 };
 
    e = union_set(sa, sa + sizeof(sa)/sizeof(sa[0]), 
                  sb, sb + sizeof(sb)/sizeof(sb[0]), sc);
    for(p = &sc[0]; p != e; ++p)
        printf("%d ", *p);
    return 0;
}

Объяснение кода листинга программы

  1. Включаем заголовочный файл для возможности работы с функциями ввода-вывода
  2. Определяем константу KU равную 11, которая будет использоваться в дальнейшем в коде
  3. Функция union_set принимает пять аргументов: указатели на первые и последние элементы двух множеств и указатель на первое пустое место в результирующем множестве
  4. В функции union_set происходит объединение двух множеств в третье. Результатом работы функции является указатель на первый элемент после объединенного множества
  5. В цикле while происходит сравнение и перемещение элементов из первого и второго множеств в третье до тех пор, пока не будут использованы все элементы одного из множеств
  6. Если текущие элементы первого и второго множеств равны, то они пропускаются и происходит переход к следующим элементам
  7. После завершения цикла while, в результирующее множество добавляются оставшиеся элементы из первого и второго множеств
  8. В функции main создается массив из KU * 2 элементов для хранения объединенного множества
  9. Задаются два множества: sa и sb. Множество sa содержит элементы { 1, 3, 4, 5, 8 }, а множество sb содержит элементы { 0, 1, 2, 5, 6, 7, 8, 9 }
  10. Вызывается функция union_set для объединения множеств sa и sb в результирующее множество sc
  11. Результат объединения выводится на экран с помощью цикла for и функции printf
  12. Возвращаемое значение функции main равно 0, что означает успешное выполнение программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.8 из 5
Похожие ответы