C언어 소스질문좀....
유1혹
질문 제목 : 집합 연산 소스인데 합집합 부분에서 출력이 이상하게 나오네요 ㅜㅜ
input.txt로 입력하는 소스인데
집합 {5 3 7 9 4}, {1 9 7 2 3 10} 을 입력하면 합집합 {1 2 3 4 5 7 9 10} 이 나와야되는데
{3 4 5 7 9} 즉 먼저 입력한 집합밖에 안나와요.
합집합부분 굵게표시해놨거든요..어디부분이 잘못된건지 알려주세요ㅜㅜ
#include iostream
#include fstream
#include cstdlib
#define m_range 100
int data(FILE *input, int aid[]);
void gyo(int op1[], int op2[], int num1, int num2);
void plus(int op1[], int op2[], int num1, int num2);
void minus(int op1[], int op2[], int num1, int num2);
void set1(int op3[], int count2);
void set2(int op3[], int count2);
void main(void)
{
int numTestCases, num1, num2;
int op1[m_range], op2[m_range];
FILE *input;
input = fopen(input.txt, r);
if(input == NULL)
{
exit(1);
}
fscanf(input, %d, &numTestCases);
for(int i = 0; i numTestCases; i++)
{
num1 = data(input, op1);
num2 = data(input, op2);
gyo(op1, op2, num1, num2);
plus(op1, op2, num1, num2);
minus(op1, op2, num1, num2);
}
fclose(input);
}
int data(FILE *input, int aid[])
{
int cases;
int i;
fscanf(input, %d, &cases);
for(i = 0; i cases; i++)
{
fscanf(input, %d, &aid[i]);
}
return cases;
}
void set1(int op3[], int count2)
{
int perf;
while(count2--)
{
for(int i = 0; i count2; i++)
{
if(op3[i] op3[i+1])
{
perf = op3[i];
op3[i] = op3[i+1];
op3[i+1] = perf;
}
}
}
}
void set2(int op3[], int count2)
{
int i;
printf(%d , count2);
for(i = 0; i count2; i++)
printf(%d , op3[i]);
printf(\n);
}
void gyo(int op1[], int op2[], int num1, int num2) // 교집합
{
int op3[m_range];
int count2 = 0;
for(int i = 0; i num1; i++)
{
for(int j = 0; j num2; j++)
{
if(op1[i] == op2[j])
op3[count2++] = op1[i];
}
}
set1(op3, count2);
set2(op3, count2);
}
void plus(int op1[], int op2[], int num1, int num2) // 합집합
{
int a = 0;
int i, j, k;
int op3[m_range];
for(i = 0; i num1; i++)
{
op3[i] = op1[i];
}
for(j = 0; j num2; j++)
{
for(k = 0; k i; k++)
{
if(op3[k] == op1[k])
{
a++;
}
if(a == 0)
{
op3[i++] = op2[j];
a = 0;
}
}
}
set1(op3, i);
set2(op3, i);
}
void minus(int ops(int op1[], int op2[], int num1, int num2) // 차집합
{
int op3[m_range];
int k;
int count2 = 0;
for(int i = 0; i num1; i++)
{
k = 0;
for(int j = 0; j num2; j++)
{
if(op1[i] == op2[j])
{
k++;
}
}
if(k == 0)
{
op3[count2++] = op1[i];
}
}
set1(op3, count2);
set2(op3, count2);
}