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