본문 바로가기

무언가 만들기 위한 지식/C,C++,Embedded C

[C,C++] Mouse Movement(About Random, Malloc)


자료구조 수업때의 첫번째 간단한 과제였는데,
사실상 CPP로 수업을 진행하지만 복학후 첫프로그래밍이라서 막상 코딩은 C 스타일로 작성하였다.
특히 간단하게 new로 하면 2차원 배열 설정도 간단한데, 왜 굳이 malloc을 사용했는지는 기억이 않난다. -.,-;
(사실 지금은 new가 완전 편하다.)
그리고 random함수를 사용하기 위해 srand를 사용하는 부분은 필자도 기억이 않날때 자주 찾아본다.

[요구사항]
1. 쥐가 이동할 맵의 크기를 입력받아 정방행렬로 배열을 잡는다. (ex: 3을 입력받을 경우 3x3행렬(map) 설정
2. 쥐를 랜덤으로 이동시킨다. 단 지정된 Map(2차원 배열)내에서 움직이도록 한다.
3. 쥐가 모든 맵(=좌표=배열)을 이동하면 종료한다.
4. 쥐가 이동한 모든 경로를 출력하고 처음 이동하는 길은 "[,]"로 표기하고 이미 지났던 길을 "(,)"로 표시한다.
5. 마지막 종료전 이동한 횟수를 출력한다.

[작성환경 : Window XP  작성툴 : Visual Studio 6.0   컴파일러 : Visual Studio 6.0]
 

[소스내용]
전체적인 알고리즘은 반복을 통해 입력 받고 0을 입력받으면 종료한다.
마우스의 움직임을 제어하는 부분이 random함수 후에 상태를 Check하면서 진행된다.
움직일 경우 해당위치의 값을 확인하면서, 지나친 곳인지 아닌지를 확인한다.
최종적으로 모두 순환했는지 안했는지 여부는
count값을 통해 확인한다.
(count값은 안지난 곳을 지났을 경우에만 증가한다, 즉 배열 수가 count값과 같아질 경우 모든 장소를 이동한 것으로 취급한다.)

13 Line : srand(time(0))를 설정해주면 매번 random 함수 호출시 현재 시간과 관련된 랜덤값을 알려준다. 그냥 Random함수를 사용할 경우 일정 패턴이 반복되기 때문에 이 부분을 넣어주어야 항상 달라지는 random값을 확인할 수 있다.
27~31 Line : 2차원 배열을 malloc을 이용하여 생성한 부분이다. malloc의 리턴값은 생성된 메모리의 첫번째 번지이다. 할당에 실패하면 NULL을 Return한다. ()안에는 할당할 Size를 넣어주면되고 malloc앞에는 강제 형변환을 한 모습을 볼 수 있다. 이해가 안되면 배열할당을 외우다시피 하면 나중에(?) 적응되게 된다^^; (필자도 이해는 가는데, 실제로는 필요할때 붙여다 쓴다.)
74 Line : 메모리 해제하는 부분인데, 사실 이렇게 하나만 해주면 안된다. 모두 malloc을 통해 힙에 형성된 배열들이므로 각 배열의 row에 들어가 해당되는 column을 삭제해주어야 한다. 즉 생성할 때처럼 for문이 하나 들어가야 한다.
(수정하기 귀찮아서 패스 -.,-;)


<같은 크기를 입력해도 다른 결과를 확인 할 수 있다. (Random 함수 적용 확인)>