#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
#define SEED_FILE "seedValue.dat"
#define PAGE_NUMBER 20 // 생성할 페이지 수
#define ADD // 덧셈 예제를 생성함.
//#define SUB // 뺄셈 예제를 생성함.
// ADD, SUB 둘 다 define 되어있거나,
// 아무것도 define 되어있지 않은지 체크함.
#if defined(ADD) && defined(SUB)
#error "defined both ADD and SUB."
#endif
#if !defined(ADD) && !defined(SUB)
#error "NOT Defined anything."
#endif
// srand() 함수에 사용될 seed 값을 증가함.
// 이전값을 기억하여 랜덤 결과가 겹치지 않도록 함.
unsigned int getSeed()
{
FILE* fp = fopen(SEED_FILE, "rt") ;
if(!fp)
{
FILE* fp = fopen(SEED_FILE, "wt") ;
fprintf(fp, "1") ;
fclose(fp) ;
return 1 ;
}
unsigned int seed ;
char szText[128] ;
fgets(szText, sizeof(szText), fp) ;
seed = atoi(szText) ;
fclose(fp) ;
return seed + 1 ;
}
// 예제에 사용될 샘플을 수집하여 vector에 저장함.
int makeList(std::vector<int>* pVecInt)
{
int result ;
for(int ii = 0; ii <= 9; ii++)
{
for(int jj = 0; jj <= 9; jj++)
{
#ifdef ADD
result = ii + jj ;
if(result >= 10)
continue ;
#elif defined SUB
result = ii - jj ;
if(result < 0)
continue ;
#endif
result = (ii * 10) + jj ;
pVecInt->push_back(result) ;
}
}
return 1 ;
}
// 수집한 샘플을 파일로 저장함.
int makeFile(std::vector<int>* pVecInt, int seed, FILE* fp)
{
int a, b ;
int cnt = 0 ;
const int ROW = 4 ;
std::vector<int>::iterator vecIntIter ;
fprintf(fp, "Seed Index : %d\r\n", seed - 1 ) ;
vecIntIter = pVecInt->begin() ;
for(; vecIntIter != pVecInt->end(); vecIntIter++)
{
a = *vecIntIter / 10 ;
b = *vecIntIter % 10 ;
if(cnt % ROW != 0)
fprintf(fp, " ") ;
#ifdef ADD
fprintf(fp, "%d + %0d = ", a, b) ;
#elif defined SUB
fprintf(fp, "%d - %0d = ", a, b) ;
#endif
if(cnt % ROW == ROW - 1)
fprintf(fp, "\r\n") ;
cnt++ ;
}
return 1 ;
}
int main()
{
std::vector<int> vecInt ;
static char szName[128] ;
unsigned int seed = getSeed() ;
srand(seed) ;
#ifdef ADD
printf("ADD mode : %d\n", seed) ;
sprintf(szName, "addTest_%d-%d.txt", seed, seed - 1 + PAGE_NUMBER) ;
#elif defined SUB
printf("SUB mode : %d\n", seed) ;
sprintf(szName, "subTest_%d-%d.txt", seed, seed - 1 + PAGE_NUMBER) ;
#endif
FILE* fp = fopen(szName, "wt") ;
for(int ii = 1; ii < PAGE_NUMBER; ii++)
{
seed++ ;
if(seed == 0x8fffffff)
seed = 1 ;
FILE* fpSeed = fopen(SEED_FILE, "wt") ;
fprintf(fpSeed, "%d", seed) ;
fclose(fpSeed) ;
vecInt.clear() ;
makeList(&vecInt) ;
// 수집한 샘플을 섞음.
random_shuffle(vecInt.begin(), vecInt.end()) ;
makeFile(&vecInt, seed, fp) ;
fprintf(fp, "\r\n") ;
fprintf(fp, "\r\n") ;
}
fclose(fp) ;
return 1 ;
}
|