c·c++/c 프로그래밍

합집합, 교집합, 차집합

바로이순간 2013. 4. 11. 09:29

[합집합의 경우]

input1.txt  input2.txt 의 각 숫자들이 오름차순으로 정렬되어 있다고 가정한 것임


#include <stdio.h>

int main() {

    FILE *f1, *f2;

    int x1, x2, x3;

    

    f1=fopen("input1.txt", "r");

    if(f1==NULL) {

        printf("입력파일1이 없습니다.");

        return -1;

    }

    f2=fopen("input2.txt", "r");

    if(f2==NULL) {

        printf("입력파일2가 없습니다.");

        return -1;

    }

    

    fscanf(f1, "%d", &x1);

    fscanf(f2, "%d", &x2);

    while(!feof(f1) && !feof(f2)) {

        if(x1<x2) {

            x3=x1;

            printf("%d ", x3);

            fscanf(f1, "%d", &x1);

        }

        else if(x1>x2) {

            x3=x2;

            printf("%d ", x3);

            fscanf(f2, "%d", &x2);

        } 

        else {

            x3=x1;

            printf("%d ", x3);

            fscanf(f1, "%d", &x1);

            fscanf(f2, "%d", &x2);

        }

    }


    if(!feof(f1)) {

        while(!feof(f1) && x1<x2) {

            x3=x1;

            printf("%d ", x3);

            fscanf(f1, "%d", &x1);

        }

        if(x2<x1) {

            x3=x2;

            printf("%d ", x3);

        }

        while(!feof(f1)) {

            x3=x1;

            printf("%d ", x3);

            fscanf(f1, "%d", &x1);

        }

    }


    if(!feof(f2)) {

        while(!feof(f2) && x2<x1) {

            x3=x2;

            printf("%d ", x3);

            fscanf(f2, "%d", &x2);

        }

        if(x1<x2) {

            x3=x1;

            printf("%d ", x3);

        }

        while(!feof(f2)) {

            x3=x2;

            printf("%d ", x3);

            fscanf(f2, "%d", &x2);

        }

    }


    if(x1>x3) {

        x3=x1;

        printf("%d ", x3);

    }

    if(x2>x3) {

        x3=x2;

        printf("%d ", x3);

    }

    fclose(f1);

    fclose(f2);


    return 0;

}


[교집합의 경우]


#include <stdio.h>

int main() {

    FILE *f1, *f2;

    int x1, x2, x3;

    

    f1=fopen("input1.txt", "r");

    if(f1==NULL) {

        printf("입력파일1이 없습니다.");

        return -1;

    }

    f2=fopen("input2.txt", "r");

    if(f2==NULL) {

        printf("입력파일2가 없습니다.");

        return -1;

    }

    

    fscanf(f1, "%d", &x1);

    fscanf(f2, "%d", &x2);

    while(!feof(f1) && !feof(f2)) {

        if(x1<x2) {

            fscanf(f1, "%d", &x1);

        }

        else if(x1>x2) {

            fscanf(f2, "%d", &x2);

        } 

        else {

            x3=x1;

            printf("%d ", x3);

            fscanf(f1, "%d", &x1);

            fscanf(f2, "%d", &x2);

        }

    }


    if(!feof(f1)) {

        while(!feof(f1)) {

            if(x1==x2) {

                x3=x1;

                printf("%d ", x3);

            }

            fscanf(f1, "%d", &x1);

        }

    }


    if(!feof(f2)) {

        while(!feof(f2)) {

            if(x1==x2) {

                x3=x2;

                printf("%d ", x3);

            }

            fscanf(f2, "%d", &x2);

        }

    }

    fclose(f1);

    fclose(f2);


    return 0;

}


[차집합]


#include <stdio.h>

int main() {

    FILE *f1, *f2;

    int x1, x2, x3;

    

    f1=fopen("input1.txt", "r");

    if(f1==NULL) {

        printf("입력파일1이 없습니다.");

        return -1;

    }

    f2=fopen("input2.txt", "r");

    if(f2==NULL) {

        printf("입력파일2가 없습니다.");

        return -1;

    }

    

    fscanf(f1, "%d", &x1);

    fscanf(f2, "%d", &x2);

    while(!feof(f1) && !feof(f2)) {

        if(x1<x2) {

            x3=x1;

            printf("%d ", x3);

            fscanf(f1, "%d", &x1);

        }

        else if(x1>x2) {

            fscanf(f2, "%d", &x2);

        } 

        else {    // x1==x2

            fscanf(f1, "%d", &x1);

            fscanf(f2, "%d", &x2);

        }

    }


    if(!feof(f1)) {

        while(!feof(f1) && x1<x2) {

            x3=x1;

            printf("%d ", x3);

            fscanf(f1, "%d", &x1);

        }

        if(x1==x2) {

            fscanf(f1, "%d", &x1);

        }

        while(!feof(f1)&& x1>x2) {

            x3=x1;

            printf("%d ", x3);

            fscanf(f1, "%d", &x1);

        }

    }


    if(x1>x3) {

        x3=x1;

        printf("%d ", x3);

    }

    fclose(f1);

    fclose(f2);


    return 0;

}