#include<stdio.h>
#include<conio.h>
#include<Windows.h>

#pragma warning(disable : 4996)

#define domain 10   // 집합의 크기 

void readfile(char fn[13], char adjancy[domain + 1][domain + 1], int nocheck, int n2);

void main()
{
	char adjancymx[domain + 1][domain + 1] = { 0 };
	char define1, define2; 	       // 함수 여부에 대한 플래그
	char fn[13] = "pp3-1.dat";     // 첫 번째 파일 이름
	char fn2[13] = "pp3-2.dat";    // 두 번째 파일 이름
	int nocol, i, j;
	int nocheck = 1;                // 함수 번호 : f1, f2
	int n1 = 10, n2 = 10;	        // 파일에서의 줄의 개수

	// 첫 번째 파일을 읽고 데이터를 adjacencymx에 대입
	readfile(fn, adjancymx, nocheck, n1);
	printf("}\n\n");

	define1 = 1;
	for (i = 1; i <= 10; i++)
	{
		define2 = 0;
		nocol = 0;
		for (j = 1; j <= 10; j++)
		{
			if (adjancymx[i][j] == 1)
			{
				define2 = 1;
				nocol++;
			}
		}
		// 정의역에 있는 원소가 관계에 포함되지 않았을 때
		if (define2 == 0)
		{
			define1 = 0;
			printf("%5cf%d 함수가 아니다.", ' ', nocheck);
			printf(" 왜냐하면 f(%d)이 정의되지 않았기 때문이다.\n", i);
		}
		// 정의역에 있는 원소가 두 번 이상 대응될 때
		if (nocol > 1)
		{
			define1 = 0;
			printf("%5cf%d 함수가 아니다.", ' ', nocheck);
			printf(" f(%d)가 유일하지 않다.\n", i);
		}
	}
	// f_ 관계가 함수인지 아닌지를 출력
	if (define1 == 1)
	{
		printf("%5cf%d 잘 정의되어 있다.\n\n", ' ', nocheck);
	}
	nocheck++;
	printf("\n\n");
	for (i = 1; i <= 10; i++)
	{
		for (j = 1; j <= 10; j++)
		{
			adjancymx[i][j] = 0;
		}
	}

	// 두 번째 파일을 읽고 데이터를 adjacencymx에 대입
	readfile(fn2, adjancymx, nocheck, n2);
	printf("}\n\n");
	define1 = 1;                    // 플래그를 바꿈
	for (i = 1; i <= 10; i++)
	{
		define2 = 0;
		nocol = 0;
		for (j = 1; j <= 10; j++)
		{
			if (adjancymx[i][j] == 1)
			{
				define2 = 1;
				nocol++;
			}
		}
		// 정의역에 있는 원소가 관계에 포함되지 않았을 때
		if (define2 == 0)
		{
			define1 = 0;
			printf("%5cf%d 함수가 아니다.", ' ', nocheck);
			printf(" 왜냐하면 f(%d)이 정의되지 않았기 때문이다.\n", i);
		}
		// 정의역에 있는 원소가 두 번 이상 대응될 때
		if (nocol > 1)
		{
			define1 = 0;
			printf("%5cf%d 함수가 아니다.", ' ', nocheck);
			printf(" f(%d)가 유일하지 않다.\n", i);
		}
	}
	// f_ 관계가 함수인지 아닌지를 출력
	if (define1 == 1)
	{
		printf("%5cf%d 잘 정의되어 있다.\n\n", ' ', nocheck);
	}
	system("PAUSE");
}

// readfile 함수가 텍스트 파일에서 관계를 읽고 adjancy에 대입
void readfile(char fn[13], char adjancy[domain + 1][domain + 1], int nocheck, int n2)
{
	FILE* fp;
	int i, x, y;
	fp = fopen(fn, "r");
	// 읽은 관계 데이터를 한 번에 출력
	printf("%5cf%d={", ' ', nocheck);
	for (i = 1; i <= n2; i++)
	{
		fscanf(fp, "%d %d", &x, &y);
		adjancy[x][y] = 1;
		printf("%2c(%2d,%2d)", ' ', x, y);
	}
	fclose(fp);
}