[프로그래밍] [C++]로또 번호분석 및 조합생성 프로그램

이미지
준비중입니다.
※ 미리보기 이미지는 최대 20페이지까지만 지원합니다.
  • 분야
  • 등록일
  • 페이지/형식
  • 구매가격
  • 적립금
자료 다운로드  네이버 로그인
소개글
[프로그래밍] [C++]로또 번호분석 및 조합생성 프로그램에 대한 자료입니다.
목차
class LottoAnalysis{
private:
int lottoDB[210][7]; // 이전 당첨번호들이 입력될 배열
int numRange[5]; // 각 단위별로 숫자 출현 빈도수를 기록할 배열
int HighestSevenNum[7]; // 가장 높은 빈도수를 나타내는 7개의 숫자 저장 배열
int RandCombo[5][6]; // 랜덤으로 생성한 조합들을 저장할 배열
int UsingRangeCombo[5][6]; // 각 범위별 유력 숫자를 이용하여 조합을 생성하여 저장하는 배열
int UsingHighestSevenCombo[5][6]; // 7개의 빈도수 높은 숫자를 이용하여 만든 조합을 저장하는 배열
int UsingHighRateCombo[5][6]; // 최근 당첨결과와 상관없이 빈도수가 높은 숫자를 이용하여 만든 조합을 저장하는 배열
int UsingHighRateRangeCombo[5][6]; // 최근 당첨결과와 상관없이 빈도수가 높은 숫자를 범위별로 숫자를 선택하여 만든 조합을 저장하는 배열
term rangeSorting[MaxNum]; // 빈도수를 기준으로 각 범위별로 숫자를 정렬하여 저장하는 배열
term wholeSorting[MaxNum]; // 빈도수를 기준으로 전체 숫자를 정렬하여 저장하는 배열
int MaxRow; // 현재 회차를 저장할 변수
int combocnt; // 조합 생성 중 이전 당첨 조합과 동일한 조합이 있었는지 확인하는 카운터

bool Check_Sequence(int *temp, int start, int finish); // 연속되는 수가 3개 이하인지 확인한다.
void Sorting_AllDATA(); // 모든 데이터를 정렬하는 함수
void Counting_Frequency(int temp); // 현재 읽어온 번호가 해당하는 범위와 해당 번호의 빈도수를 증가시켜주는 함수
void Set_rangeSorting(); // 각 범위별 번호를 빈도수에 따라 정렬
void Sort_Num(int start, int finish, term *buff); // 빈도수를 기준으로 내림차순 정렬
void Sort_GenNum(int start, int finish, int *buff); // 해당 배열의 숫자를 오름차순 정렬
bool Search_Combination(int *temp); // 이전 회차의 당첨 조합인지 확인하는 함수
bool Search_Num(int key, int row); // 지정된 최근 회차에 존재하는 번호인지 확인하는 함수
bool Check_NumRange(int *temp, int i); // 자리수가 같은 번호가 3개 이하인지 확인한다.
int Get_HighFrequencyNum(int low, int high, int cnt, int *useNum); // 지정된 범위에서 가장 빈도수가 높은 번호를 추출하는 함수
void Create_FileHeader(); // 결과를 출력할 파일의 헤더를 생성하는 함수
void Write_numRange(); // 십자리수를 기준으로 각 범위별 빈도수를 출력하여 주는 함수
void Write_wholeSorting(); // 각 숫자들의 빈도수를 출력하여 주는 함수
void Write_rangeSorting(); // 십자리수를 기준으로 각 범위별 빈도수가 높은 숫자별로 정렬한 결과를 출력하는 함수
void Write_HighestSevenNum(); // 유력한 7개의 숫자를 출력하는 함수
void Write_RandCombo(); // 무작위로 선택된 5개의 조합을 출력하는 함수
void Write_UsingSevenCombo(); // 유력한 7개의 숫자를 이용한 조합을 출력하는 함수
void Write_UsingRateCombo(); // 최근 나온 조합을 무시하고 빈도수가 높은 숫자로 만든 조합을 출력하는 함수
void Write_UsingRateRangeCombo(); // 최근 나온 조합을 무시하고 각 범위별 빈도수가 높은 숫자를 이용해서 만든 조합을 출력하는 함수
void Write_UsingRangeCombo(); // 최근 나온 조합을 제외시키고 빈도수가 높은 숫자들을 이용하여 만든 조합을 출력하는 함수
void Write_LowestCombo(); // 빈도수가 가장 낮은 6개의 숫자를 출력하는 함수

public:
LottoAnalysis(); // 번호분석을 위해 이전 당첨번호를 저장하고 빈도수를 계산하는 역할을 하는 생성자
~LottoAnalysis(); // 파괴자
void Get_HighestSevenNum(); // 유력한 7개의 숫자를 생성하는 함수
void Get_RandCombination(); // 무작위로 5개의 조합을 생성하는 함수
void Get_UsingRangeCombination(); // 최근나온 숫자를 제외하고 각 범위별 유력한 숫자를 선택하여 5개의 조합을 생성하는 함수
void Get_UseHighestSevenCombination(); // 7개의 유력한 숫자를 이용하여 5개의 조합을 생성하는 함수
void Get_HighRateCombination(); // 최근나온 숫자를 포함하여 빈도수가 높은 숫자를 이용하여 5개의 조합을 생성하는 함수
void Get_HighRateRangeCombination(); // 최근나온 숫자를 포함하여 빈도수가 높은 숫자를 각 범위별로 선택하여 5개의 조합을 생성하는 함수
void Make_ReportFile(); // 파일로 결과를 출력하여 주는 함수
};
본문내용
LottoAnalysis::LottoAnalysis()
{ /*번호분석을 위해 이전 당첨번호를 저장하고 빈도수를 계산*/

char buff[2];
char ch; int i = 0;
for(; i < 5; i++) numRange[i] = 0;
for(i = 0; i < MaxNum; i++){
rangeSorting[i].count = wholeSorting[i].count = 0; // 카운터 초기화
rangeSorting[i].num = wholeSorting[i].num = i + 1; // 1~45 입력
}

ifstream fin;
fin.open(file); // 기존 당첨번호 파일 열기
int row, col;
row = col = i = 0;
if(!fin.is_open()) return;

while(!(!fin.get(ch))){ // 기존 당첨번호 저장
if(ch >= 48 && ch 1){
int temp;
temp = keytoi(buff); // 정수로 변환
lottoDB[row][col] = temp; // 당첨번호 저장

Counting_Frequency(temp); // 각 번호 빈도수 계산

i = 0; col++;
}

if(col > 6){row++; col = 0;} // 번호 6개 모두 저장했으면 다음 회로 이동
} // end of if
} // end of while

fin.close();
MaxRow = row; // 마지막 회차 저장
numRange[4] = numRange[4] * 5 / 3; // 40번대는 6개이므로 다른 번호대와 빈도수를 맞추기 위한 계산
Sorting_AllDATA(); // 각 회차의 당첨번호 정렬
combocnt = 0; // 분석 중 당첨 횟수를 기록할 변수 초기화
}
하고 싶은 말
번호 조합은 다음과 같은 방식으로 생성 합니다.
1. 무작위 조합
2. 최근 당첨번호에 포함되지 않으면서 출현횟수가 높은 7개의 숫자를 이용하여 만든 조합
3. 최근 당첨번호에 포함되지 않으면서 출현횟수가 높은 각 범위별 숫자를 20개 선정하여 그 숫자들을 이용해 만든 조합
4. 최근 당첨번호에 포함되는 것과 상관없이 출현횟수가 높은 숫자들을 이용하여 만든 조합
5. 최근 당첨번호에 포함되는 것과 상관없이 출현횟수가 높은 숫자들을 각 범위별로 선정하여 만든 조합

위 결과들은 REPORT.TXT에 기록됩니다. 그 외에도 각 번호별 출현횟수와 각 범위별 출현횟수 등을 기록하여 줍니다.