1. Introduction
변수와 반복문을 이용해서 컬러박스 120개를 그려봅시다. 한 줄에 12개씩 나누어서 그리는 방법을 알아보겠습니다. 면색에 대해서는 지난 시간에 알아보았으며, 이번 예제에서는 선색에 대해서 알아보겠습니다.
이 예제에서는 다음 사항들에 주목해야 합니다.
1) 펜컬러 설정하기 : 예) setPenColor [ 0 0 0 ]
2) random 255
3) random값으로 컬러값 설정하기
4) repCount
5) MODULO 연산
6) LIST와 LIST 변수 만들기
7) if
8) 함수 파라미터 사용하기 : 예) box1 20
9) 변수 만들기 : 예) make "side 20
2. Code
to box1 :side
repeat 4 [ fd :side rt 90 ]
end
to cBLACK
output [ 0 0 0 ]
end
to cWHITE
output [ 255 255 255 ]
end
to gotoNextLine
pu lt 90 fd ((:side+:space)*12) rt 90 back (:side+:space) pd
end
to main
setup
repeat 120 [
;; setLineColor1 ;; 지우지 말고 주석처리 권장. setLineColor2와 스위치 온/오프 방식 사용!
setLineColor2
box1 :side
move1 :jump
make "modValue (modulo repCount 12)
print :modValue
if (:modValue = 0) [ gotoNextLine ]
]
ht
end
to move1 :jump
pu rt 90 fd :jump lt 90 pd
end
to setLineColor1
setpc [ 0 0 0 ]
end
to setLineColor2
make "cR random 255
make "cG random 255
make "cB random 255
make "myList (List :cR :cG :cB)
setpc :myList
end
to setup
make "side 20
make "space 5
make "jump (:side + :space)
setPC [ 0 0 0 ]
setFloodColor cWHITE Fill
Window Home CS PPT PD ST
pu lt 90 fd 400 rt 90 fd 250 pd
end
3. Result
4. Notes
이 예제에서는 다음 사항들에 주목해야 합니다. ^.^;
1) 펜컬러 설정하기 : 예) setPenColor [ 0 0 0 ]
2) random 255
3) random값으로 컬러값 설정하기
4) repCount
5) MODULO 연산
6) LIST와 LIST 변수 만들기
7) if
8) 함수 파라미터 사용하기 : 예) box1 20
9) 변수 만들기 : 예) make "side 20
10) output 사용법 : 예)
to cRed
output [ 255 0 0 ]
end
◈ Note 1. 주석 처리
위 코드 내부 주석 처리된 부분은 지우지 말고 주석처리할 것 권장. setLineColor2 앞에 세미콜론 ';'을 붙이고 setLineColor1에 있는 세미콜론은 지워서 저장 후 실행하면 간단하게 컬러와 흑백을 전환할 수 있습니다. 주석 처리를 온/오프 스위치 비슷하게 사용하는 셈입니다. 주석 처리할 때 세미콜론(;)은 하나만 사용해도 됩니다. ;; 제 경우는 그냥 버릇이나 습관으로 어떤 학습 자료를 보다가 그것을 그냥 따라한 것일 뿐입니다. ^.^;
;; setLineColor1 ;; 지우지 말고 주석처리 권장. setLineColor2와 스위치 온/오프 방식 사용! 주석 처리가 여기에 있다가...
setLineColor2
코드를 지우지 않고 주석 대상만 바꾸기 :
setLineColor1
;; setLineColor2 ;; 지우지 말고 주석처리 권장. setLineColor2와 스위치 온/오프 방식 사용! 주석 처리가 여기로! ^.^;
◈ Note 2. Modulo 연산
Modulo 연산은 나눗셈의 나머지를 계산하는 연산입니다. 일반 수학에서 5 나누기 3의 나머지를 구하는 수식을 FMSLogo 표현식으로는 다음과 같이 나타냅니다. 띄어쓰기만 잘 지키면 됩니다.
Modulo 5 3
괄호로 묶어서 변수 만들기에 사용할 수도 있습니다.
make "modValue (modulo repCount 12)
: repCount값을 12로 나누고 그 나머지를 구합니다. 이 나머지값을 변수 modValue에 저장합니다. repCount 변수는 LOGO 특수변수로 앞에 변수라는 사실을 나타내는 콜론(:) 기호를 붙이지 않습니다.
◈ Note 3. List와 List 변수 만들기
다음 함수를 통해서 살펴보겠습니다.
to setLineColor2
make "cR random 255
make "cG random 255
make "cB random 255
make "myList (List :cR :cG :cB)
setpc :myList
end
make "cR random 255
: 변수 cR에 random 255의 결과값을 저장합니다. random 255는 0을 포함해서 0부터 254까지의 범위에서 아무 숫자나 골라냅니다. 255는 포함되지 않습니다.
make "myList (List :cR :cG :cB)
: LIST를 만들 때는 'LIST'라는 단어를 사용합니다. 작은 따옴표는 제외.
List :cR :cG :cB ;; 제시된 변수 3개를 리스트로 만듭니다. 아무 숫자나 컴퓨터가 골라주므로 예를 들어 3, 200, 241을 골랐다고 가정하면 리스트 만들기의 결과는 [ 3 200 241 ]이 됩니다. FMSLogo에서는 리스트를 나타낼 때 대괄호([ ])를 사용합니다.
List :cR :cG :cB ---> [ 3 200 241 ]
(List :cR :cG :cB) ;; 괄호로 묶어서 하나의 덩어리처럼 만듭니다.
make "myList (List :cR :cG :cB) ;; 괄호로 묶인 덩어리를 변수 myList에 저장합니다. 이때, myList 변수는 리스트형 변수가 됩니다.
내장 함수인 setPenColor 함수나 setFloodColor 함수는 모두 리스트LIST를 파라미터로 가집니다.
setPenColor [ 0 0 255 ]
setFloodColor [ 255 0 128 ]
파라미터 [ 0 0 255 ] 혹은 [ 255 0 128 ] 대신에 위에서 만든 리스트형 변수를 사용할 수 있습니다.
setPC :myList
setFC :myList
◈ Note 4. 덧셈과 곱/나눗셈, 서로 먼저 계산하기. 왜?
to gotoNextLine
pu lt 90 fd ((:side+:space)*12) rt 90 back (:side+:space) pd
end
덧셈/뺄셈과 곱셈/나눗셈이 하나의 수식에 같이 포함되어 있다면 먼저 계산하는 방식에 따라 그 결과값이 달라질 수 있습니다. 프로그래밍 세계에서는 대부분 괄호로 묶으면 괄호 부분을 먼저 계산합니다.
다음 수식을 검토해보세요.
1 + 2 * 3 =
;; 별표*는 곱셈을 뜻합니다. 9 혹은 7
4 - 2 / 2 =
;; 슬래시는 나눗셈을 뜻합니다. 따라서 1 혹은 3
일반 수학이라면 어느 쪽이 정답일까요? 정해진 계산 규칙이 있을까요? 흐음... 이런 부분과 관련된 일반 수학 규칙을 <연산의 우선순위> 문제라고 합니다. ^.^;
대부분의 컴퓨터 프로그래밍 세계에서는 계산의 혼란을 막고 오류를 방지하기 위해서 먼저 계산할 내용을 명확하게 밝히기 위해서 괄호로 묶을 수 있습니다. 괄호가 있으면 괄호 부분을 무조건 먼저 계산해야 합니다.
(1 + 2) * 3 =
4 - (2 / 2) =
괄호가 있으면 다른 답은 허용될 수 없습니다. ^.^;
(tbc...)
5. Ref.
1) FMSLogo 내장 도움말.
6. Files
Happy Programming!
^.^;
'Programming > LOGO' 카테고리의 다른 글
LOGO : 변수(Variables) - 12 - ColorBox256 (0) | 2024.05.19 |
---|---|
LOGO : 변수(Variables) - 11 - 눈꽃송이SnowFlake. (0) | 2024.05.12 |
LOGO : 변수(Variables) - 9, Coloring (1) (0) | 2024.04.26 |
LOGO : 변수(Variables) - 8 (0) | 2024.04.21 |
LOGO : 변수(Variables) - 7 (0) | 2024.04.14 |