태그 보관물: c언어

숫자맞추기 게임

숫자맞추기게임


규칙
사용자가 랜덤하게 양의 정수값을 입력
컴퓨터가 임의로 발생시킨 양의 정수를 알아 맞추는 게임
컴퓨터가 발생시키는양의 정수범위는  1 ? 200 사이의 정수
한 게임에알아 맞출 수 있는 횟수는 7번으로 제한
7번을 넘기도록 맞추지 못하면 게임에서 지는 것으로 코딩
게임 횟수는 사용자가 그만둘 때까지이며
사용자의  계속여부는 Y/ N를 입력받아 Y(y)이면 게임을 계속 진행, , N(n)이면 게임종료
다음 게임시 컴퓨터가 발생시키는 랜덤값은 바뀌어야 한다.

사용자 삽입 이미지

직접 작성한 코드입니다. 소스를 봐주시길 바랍니다.

개발 환경 : Visual Studio .NET 2003. C/C++, WIN32 Console

1398385331.zip

0~9까지 값을 입력받아 그 숫자를 카운팅 해주는 소스

사용자 삽입 이미지
1. 키보드로 0부터 9숫자로 무한대로 입력을 받기

2.입력이 끝나면 각 숫자별로 몇회씩 입력을 받았나 계산하기


3. 많이 입력한 순서대로  번호를 출력하기


일단 만들려고 했던 요구조건은 위와 같은데 만들고 나니 조금 빗나간 듯 싶네요.

제가 만든 소스는 3번 부분이 그냥 순서대로 출력이 되게 됩니다.

조건문만 조금 손을 보면 위와 같이 코드를 만들 수 있겠습니다.

위와 같은 요구조건의 코드를 만들기 위해서 C언어 형식의 getchar로 값을 받아서 배열에

저장해서 처리할 수도 있겠고, 무식하게 swith ~ case 문을 이용 할 수 도 있겠지만

이 코드에서는 C++을 이용하여 STL 의 map 을 사용하여 작성하였습니다.

조금 더 응용하면 for_each 를 이용하여 만들 수도 있을 것 같습니다.

주석을 충분히 달았기 때문에 c++ 을 공부하시는 분께 유용 할 것이라 생각합니다.

제작환경 : VisualStuido .NET 2003 C/C++, WIN 32 Consol


1395475070.zip

부동소수의 정밀도 처리


void main()
{
uint32 Price = 0;
uint32 Money = 999990000;

Price = static_cast<uint32>(Money * 1.0f);

Price = ???
}

////////////////////////////////////////////////////

Price 같은 경우 999990000 가 나와야 이 코드를 짠 사람이 생각하는 정답이겠지만

실제로는 그렇게 값이 나오지 않을 것입니다.

저 같은 경우에는 999990016 이란 값으로 계속 나오더라구요.

DWORD rate = 1.0;
Price = static_cast<uint32>(Money * rate);

이렇게 바꾸게 되면 제대로 된 값이 나올 것입니다.

정수로 계산을 하면 정상적으로 나오지요.

이러한  꽁수로 해결할 수 도 있습니다.

double TempMoney = 0.0f;
if(Money != 0)
  TempMoney = Money / 100;
Price = static_cast<uint32>(TempMoney * 1.0);
if(Money != 0)
{
  Price *= 100;
  Price += Money % 100;
}

값을 작게하여 정밀도를 높이는 방법 입니다.

값이 클수록 정밀도가 낮아지는 것 같네요.

사소한 실수지만 자잘하게 이상한 값이 나올 수 있으므로 프로그래밍 할 때 주의를

해야할 것 같습니다. 저도 이 부분 때문에 버그가 나버렸네요.

더 좋은 방법이 있다면 꼭 알려주세요.

[참고사이트]