brunch

You can make anything
by writing

C.S.Lewis

by 아무나 Mar 25. 2019

5. 변수 연습문제 1 - 매직볼 가라사대

C언어를 배워보자 - 평범한 인문대 졸업 직장인의 프로그래밍 고군분투기

#c언어 #codecademy #내돈으로유료질러봄




0. 그런데 매직볼이 뭐지?


이번 시간은 매직볼을 만드는 시간이다. 그런데 도대체 매직볼이 뭐야.

코드카데미에서는 나와 같은 인터네셔널 학생을 위해 친절한 설명을 곁들여주었다.

정체는 바로, 1950년대에 개발된 미국에서 슈퍼 유명한 장난감. 

랜덤 대답을 해주는 일종의 포춘쿠키 같은 거랄까? 

이를테면 "응, 바로 그거야.", "그건 좀 아닌 듯." "별론대..."

아무 말 대단치 해주는 공이랄까?






1. 일단, main을 깔아준다.








2. 이번엔 랜덤 기능을 사용할 것이다. = function( rand() )


하지만 이 기능은 stdlib.h라는 라이브러리에 있다.

따라서 이 랜덤이라는 새로운 기능을 사용하기 위해서는 내 코드 맨 상단에 stdlib.h라는 새로운 라이브러리를 참고해야 한다고 코드 맨 상단에 추가가 필요하다.


그리고 int "대답(answer)"을 선언하고 랜덤()하게 대답할 것이라고 한다.

그런데, 여기서 끝내면 무슨 랜덤 값을 가지는지는 컴퓨터만 아니까

cout (see out)으로 내가 선언한 answer 값을 보이게 한다.


매직볼 가라사대 1804289383...


공이 말을 했다.






3. 숫자가 너무 크잖아! - 천재적인 나머지


1804289383... 개의 매직볼의 다른 대답을 만들 수 없다. 우리는 인내심이 적으니 이 매직볼을 10개의 대답만 할 줄 아는 매직볼로 만들 것이다.

그렇다면 우리는 1804...가 아니 랜덤 숫자 10개만 필요하다 0-9 정도?

이렇게 큰 숫자를 순식간에 0~9 사이로 만드는 방법은 무엇일까.


여기서 당신이 천재 프로그래머인지 아닌지가 나온다.(천재까지는 아닐 수 있지만)

정답을 알았는가?


공은 짧게 한 숨을 내쉬었다 "삼..." 하고


모든 순자를 0-9 사이로 만드는 방법 바로, '나머지'를 활용하는 것이다. 기억하나 %를. 

% 는 무언가로 나눈 나머지를 뜻한다. 10으로 나누면 10보다 작은 모든 수가 나온다 0-9까지

기존의 int answer = rand()에다가 %10; 만해주면 만사가 해결된다.


놀랍다.





5. 랜덤이 랜덤이 아니잖아!


이상하게 계속 재구동해도 내 매직볼은 3밖에 모르는 바보였다. 

최초 구동시에만 랜덤이 아닌, 실행 할 때마다 랜덤하게 하려면 rand()을 선언한 answer 전에 매번 랜덤이 재구동 되도록 코드를 넣어야 했다. 랜덤코드 꽤 까탈스럽잖아.


//이것이 바로 그 재구동 코드이다

srand(time(NULL))


공이 이제 6도 알게 되었다.






6. 이제 "대답"을 입력할 시간


if 0일 때 "정말이야!(It's certain)"을 말하게 해 보자.

else일 땐 "의심스럽구먼.(Very doubtful.)"


90%가 의심스럽구먼....





7. 나머지는 else if로 만든다.



"놉" 이라던지 "하하하"라던지... 도 할 수 있게 되었다.






8. 말하는 매직볼을 정리하며


이렇게 랜덤을 활용한 예제가 끝났다.라고 하면 너무 삭막하니 말하는 공을 만들었다는 것으로 하자.

하다 보니 꽤 재밌는 과제라서 즐겁게 끝낼 수 있었다


생각보다 힌트도 잘 되어 있어서 막힐 일도 없었다.

if, if else, else와 % 등을 복습하는 계기가 되었다.


누가 한다고 하면... 음 아직은 잘 모르겠다. 추천인지 아닌지는 나머지도 좀 더 풀어봐야지..!

매거진의 이전글 4. 코드카데미 유료를 지르다
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari