2016년 컴퓨터제어프로그래밍 과제리스트
(1) Bouncing Ball
그림과 같이 화면을 구성하고 지시와 같이 동작하도록 프로그램을 작성하라. (부과 3월 15일. 제출 3월 22일)
- PictureBox로 만든 ball이 우측 하단으로 이동한다.
- (1) 벽에 부딪히면 반대로 움직인다. 상하좌우 4개의 벽에 대해 모두 반동한다.
- (2) Slow/Fast 라디오 버튼 선택에 따라 움직이는 속도를 변하게 한다.
- (3) 볼의 색이 폼의 중심에서 멀어지면 빨간색, 중심으로 가까워지면 파란색이 되도록 한다.(옵션 추가)
- 실행 화면을 캡쳐하여 구성 컨트롤 요소의 이름을 표기한 그림을 넣고, 소스를 넣은 보고서를 제출한다.
(2) 비트조작
다음과 같이 화면을 구성하고 지시와 같이 동작하는 프로그램을 작성하라. (부과 3월 22일. 제출 3월 29일)
(3) 2차 최소자승법
다음과 같은 문제를 풀어 화면에 그 그래프를 그려라. (부과 3월 29일. 제출 4월 5일)
(4) 몬테카를로 시뮬레이션
다음과 같은 프로그램을 작성하라. (부과 4월 5일. 제출 4월 12일)
- 삼각형의 면적 계산과, 삼각형에 대한 IN/OUT 판정은 반드시 별도 함수로 작성하라. 함수의 원형은 자유롭게 한다.
(5) 클래스의 다형성
아래 실습 프로그램에 사각형의 Rectangle 클래스와 삼각형의 Triangle 클래스를 추가하라. 화면에 사각형과 삼각형이 그려지고 각각의 갯수도 표시되도록 한다. (부과 4월 12일. 제출 4월 19일)
- Rectangle/Triangle 클래스는 Geom의 파생클래스가 되도록 하고 override된 Draw() 함수를 정의하여 다형적으로 호출되도록 한다.
(6) 아두이노 프로그래밍
실습시간에 아래와 같이 만들어진 키트에 대해 다음과 같이 동작하는 프로그램을 작성하라. (부과 5월 3일. 제출 5월 10일)
(1) 2번 핀의 버튼을 누르고 있는 동안 LED가 (0,0,0,0)->(1,0,0,0)->(1,1,0,0)->(1,1,1,0)->(1,1,1,1)->(0,0,0,0) 로 켜지기를 반복한다. 스위치를 놓으면 그 상태 유지.
(2) 3번 핀의 버튼을 누르고 있는 동안 LED가 (1,0,1,0) 과 (0,1,0,1) 로 켜지기를 반복한다. 스위치를 놓으면 그 상태를 유지
(3) 2,3번 핀의 버튼을 같이 누르면 모든 LED가 꺼진다.
(4) 4번 핀의 버튼을 누르고 있으면 위 (1), (2) 번의 동작이 빠르게 진행된다. 4번 핀 버튼을 떼면 다시 느려진다.
(*) delay( ) 를 사용하면 프로그램은 조금 쉬워지나 버튼에 대한 반응이 느릴 수 있다. delay( )를 사용해서 코딩해도 되지만 사용하지 않고 해보면 더욱 좋다.
(*) delay( )는 많은 기초예제에서 사용되고 있으나 loop 함수의 흐름을 block 하기 때문에 여러 종류의 작업이 동시에 이뤄져야 하는 경우 큰 문제를 발생시킬 수 있다.
(7) 아두이노와의 폴링방식 통신 프로그램을 다음과 같이 수정하라. (부과 5월 10일. 제출 5월 17일)
- 실습시간에 제시된 통신프로토콜 중 "RI"와 "RA"는 각각 접점 입력과 아날로그 입력의 상태를 얻는 것이다.
- 이를 하나로 합쳐 다음과 같은 통신 프로토콜을 추가한다.
<STX> |
R |
B |
<ETX> |
아두이노의 응답 (10byte 고정길이)
<ACK> |
R |
B |
d |
d |
, |
d |
d |
d |
<ETX> |
(※) 콤마 앞쪽의 dd = 00~FF. 8개 접점의 bitwise OR.
(※) 콤마 뒤쪽의 ddd = 000~3FF(1023). 각 채널의 10비트 해상도 AD값
- 아두이노 프로그램을 적절히 추가해 넣어야 한다.
public static bool AskAllData(SerialPort serialPort, bool[] bits, out int adval)
- PC 프로그램의 timCommMon_Tick() 함수에서는 새로운 AskAllData( ) 함수만 호출하는 것으로 수정하여 이전과 같이 동작하도록 하라.
(8) TCP 통신에 관한 실습 시간의 프로그램을 다음과 같이 수정하라. (부과 5월 17일. 제출 5월 24일)
[1] 상대 프로그램이 정지되거나 Closed되어도, 재 실행되면 즉시 다시 연결되도록 프로그램을 수정하라.
상태 감시 타이머에 다음의 기능을 넣으면 될 것이다.
(1) Server : 통신 상태가 Closed가 되면 즉시 Listen으로 전환한다.
(2) Client : 통신 상태가 Closed가 되면 성공할 때까지 Connect를 시도한다.
[2] Server에서의 원의 움직임도 거꾸로 Client의 원의 위치에 반영되는 기능도 추가하라.
서로의 움직임을 서로 간섭하게 되므로, 최후 조작의 결과가 반영될 것이다.
이를 위하여 port 연결을 새로 추가하라. Port번호는 5003으로 한다.
(9) [라벨링] 다음의 지시와 같은 프로그램을 작성하라. (부과 5월 24일. 제출 5월 31일)
- 첨부된 지시사항을 잘 읽어보고 이에 따라 작성한다.
- water.jpg에 대해 실행한 실행화면은 아래와 같이 될 것이다.
←water.jpg(우측버튼클릭하여 다른이름저장)