#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#include<string.h>
#include<Windows.h>
#pragma warning (disable : 4996)

void main()
{
	int i, j, k, l, g;
	char t1[5][20001] = { NULL };  // 랜덤 형식으로 생성될 길이가 20000인 문자열 5개를 위한 문자열 선언
	char t2[3][101] = { NULL };    // T2에 입력될 문장 3개를 위한 문자열 선언
	char t1t2[15][20102];          // 접합 T1·T2를 저장하기 위한 문자열 선언
	char temp = '\0';
	double start, end;
	FILE* fp1, * fp2, * fp3;     	    // 파일 포인터 3개 선언
	fp1 = fopen("T1data.txt", "w+");     // 랜덤 데이터를 저장하기 위한 텍스트 파일 생성 및 열기	
	fp2 = fopen("pointer_result.txt", "w+");    // 첫 번째 알고리즘으로 접합을 저장하기 위한 텍스트 파일 생성 및 열기
	fp3 = fopen("notpoint_result.txt", "w+");   // 두 번째 알고리즘으로 접합을 저장하기 위한 텍스트 파일 생성 및 열기

	// 길이가 20000인 랜덤 문자열 5개를 생성하고 텍스트 파일에 저장
	printf("\n문자열 T1이 \"T1data.txt\" 파일에서 생성되었다.\n");
	for (i = 0; i < 5; i++)
	{
		for (j = 0; j < 20000; j++)
		{
			temp = rand() % 26 + 65;
			fprintf(fp1, "%c", temp);
			t1[i][j] = temp;
		}
		t1[i][j] = '\0';
		fprintf(fp1, "\n");
	}
	// 3개 문장을 입력받고 T2에 추가
	printf("\n 문자열 T2에 대해 3개의 문자열을 입력하라.\n");
	for (i = 0; i < 3; i++)
	{
		fflush(stdin);
		printf("\u25cf ");
		scanf("%s", t2[i]);
	}
	// T2에 대한 Image를 출력
	printf("\nImage of T2\n");
	for (i = 0; i < 3; i++)
	{
		printf("<%s>\n", t2[i]);
	}
	printf("\n 페인트공 알고리즘 : T1\u25cfT2");
	printf("\n \"pointer_result.txt\" 파일이 생성되었다.");
	start = clock();
	for (g = 0; g < 100; g++)
	{
		k = 0;
		for (j = 0; j < 3; j++)
		{
			for (i = 0; i < 5; i++)
			{
				strcpy(t1t2[k], t1[i]);
				strcat(t1t2[k], t2[j]);
				k++;
			}
		}
	}
	end = clock();
	for (i = 0; i < 15; i++)
	{
		fprintf(fp2, "%s\n", t1t2[i]);
	}
	printf(" 실행 시간 : %.3lf(ms)\n", (end - start) / 100.0);

	// 접합 T1·T2를 계산하는 ‘반환값을 주는 포인터 없는 알고리즘’의 실행 시간으로 출력하고 접합을 텍스트 파일에 저장
	printf("\n 반환값을 주는 포인터 없는 알고리즘 : T1\u25cfT2");
	printf("\n \"notpointer_result.txt\" 파일이 생성되었다.\n");
	temp = '\0';
	start = clock();
	for (g = 0; g < 100; g++)
	{
		k = 0;
		for (j = 0; j < 3; j++)
		{
			for (i = 0; i < 5; i++)
			{
				for (l = 0; l < 20001; l++)
				{
					if (t1[i][l] == '\0')
					{
						strcpy(t1t2[k], t1[i]);
					}
				}
				strcat(t1t2[k], t2[j]);
				k++;
			}
		}
	}
	end = clock();
	for (i = 0; i < 15; i++)
	{
		fprintf(fp3, "%s\n", t1t2[i]);
	}
	printf(" 실행 시간 : %.3lf(ms)\n", (end - start) / 100.0);

	// 생성된 파일들을 닫음
	fclose(fp1);
	fclose(fp2);
	fclose(fp3);
	system("PAUSE");
}