2015년 컴퓨터제어프로그래밍 과제리스트
(1) Bouncing Ball
그림과 같이 화면을 구성하고 지시와 같이 동작하도록 프로그램을 작성하라. (부과 3월 12일. 제출 3월 19일)
- PictureBox로 만든 all이 우측 하단으로 이동한다.
- (1) 벽에 부딪히면 반대로 움직인다. 상하좌우 4개의 벽에 대해 모두 반동한다.
- (2) Slow/Fast 라디오 버튼 선택에 따라 움직이는 속도를 2배로 변하게 한다.
- (3) 볼의 색이 폼의 중심에서 멀어지면 빨간색, 중심으로 가까워지면 파란색이 되도록 한다.
- 실행 화면을 캡쳐하여 구성 컨트롤 요소의 이름을 표기한 그림을 넣고, 소스를 넣은 보고서를 제출한다.
(2) 비트조작
다음과 같이 화면을 구성하고 지시와 같이 동작하는 프로그램을 작성하라. (부과 3월 19일. 제출 3월 26일)
(3) 2차 최소자승법
다음과 같은 문제를 풀어 화면에 그 그래프를 그려라. (부과 3월 26일. 제출 4월 2일)
(4) 몬테카를로 시뮬레이션
다음과 같은 프로그램을 작성하라. (부과 4월 2일. 제출 4월 9일)
- 삼각형의 면적 계산과, 삼각형에 대한 IN/OUT 판정은 반드시 별도 함수로 작성하라. 함수의 원형은 자유롭게 한다.
(5) 클래스의 다형성
아래 실습 프로그램에 사각형을 나타내는 Rectangle 클래스를 추가하라. 화면에 사각형이 그려지고 사각형의 갯수도 표시되도록 한다. (부과 4월 9일. 제출 4월 16일)
- Rectangle 클래스는 Geom의 파생클래스가 되도록 하고 override된 Draw() 함수를 정의하여 다형적으로 호출되도록 한다.
(6) 아두이노 프로그래밍
실습시간에 아래와 같이 만들어진 키트에 대해 다음과 같이 동작하는 프로그램을 작성하라. (부과 4월 30일. 제출 5월 7일)
(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월 7일. 제출 5월 14일)
- 실습시간에 제시된 통신프로토콜 중 "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) [라벨링] 다음의 지시와 같은 프로그램을 작성하라. (부과 5월 21일. 제출 5월 28일)
- 첨부된 지시사항을 잘 읽어보고 이에 따라 작성한다.
- water.jpg에 대해 실행한 실행화면은 아래와 같이 될 것이다.
←water.jpg(우측버튼클릭하여 다른이름저장)