2017-2 공학설계프로그래밍 (Practical Programming for Engineering) 과제 코드
--목차--
1.week04
2.week06
3.week08
4.week10
우선 대문자 A~Z에 아래와 같이 숫자를 할당한다.
A=25, B=24, ... Z=0
(1) main 함수의 인수로 알파벳 대문자로만 된 이름을 받는다. (단, 이름의 길이는 5~10자까지여야 한다.)
(2) 입력받은 이름이 제대로 되어있는지 검사한다.
(3) 이름의 각 알파벳을 위에서 정해 놓은 규칙에 따라 숫자로 변환한다.
(예) name: ADFWZ -> name: 25 22 20 3 0
(4) 변환된 숫자에 대해 아래의 연산을 결과값이 5000보다 작아질 때까지 반복한다.
(5) 위의 연산의 중간 과정이 아래와 같이 출력되도록 프로그램을 작성하시오.
main.exe
A
B
4≤A≤10, strlen(A)≤70
=> 인수 B의 값을 높은 자리수부터 숫자의 크기가 [0, A²-1] 범위에 있도록 나눈다.
(ex) main.exe
5
5037090045222
-> 5037090045222: 5 03 7 09 004 5 22 2 0 -> 5,3,7,9,4,5,22,2
(ex) main.exe
7
5037090045222
-> 5037090045222: 5 037 09 0045 22 2 -> 5,37,9,45,22,2
(ex) main.exe
10
5037090045222
-> 5037090045222: 50 37 090 045 22 2 -> 50,37,90,45,22,2
=> 얻어진 수에 대해 숫자판에서 가장 멀리 떨어져 있는 두 수를 출력하시오.
(두 수의 거리: (두 수의 가로방향 거리차이) + (두 수의 세로방향 거리차이)
[1] 가로, 세로 모두 400 pixel로 되어 있으며, 하나의 pixel이 4 byte로 되어 있는 BMP 그림 파일만을 고려한다.
BMP 파일은 앞에 54 byte의 header 정보가 있고, 그 다음부터 각각의 pixel 데이터가 저장되어 있다. Pixel 데이터 값은 각각 0~255의 값을 갖는 1byte 정보 4개가 모여 있는 구조이다.
(1) BMP 파일을 동일한 크기의 8개의 블록으로 나눈 다음, 앞에서부터 블록의 인덱스를 1,2,...,8로 정한다.
(즉, 각각의 블록은 가로 50 pixel, 세로 400 pixel로 된 그림 조각이 된다)
(2) 아래와 같이 4개의 인수를 받는 main 함수를 고려한다.
main.exe
[input file]
[output file]
[mode (0/1)]
[positive integer]
(3) 'mode' 값에 따라 아래와 같이 동작하는 프로그램을 작성하시오.
mode = 0: main.exe
input.bmp
output.bmp
0
13572468
-> "input.bmp"를 1,3,5,7,2,4,6,8 순으로 바꿔 "output.bmp"에 저장한다.
mode = 1: main.exe
input.bmp
output.bmp
0
13572468
-> 1,3,5,7,2,4,6,8 순서로 섞여 있는 "input.bmp"를 섞이지 않은 원래의 블록 순으로 바꿔 "output.bmp"에 저장한다.
옆의 그림과 같은 윷놀이판을 가정하자.
(1) 출발은 'Z' 위치에서 한다.
(2) '5', '10', '15', 'C' 위치에 도착한 경우는 화살표 방향으로만 진행한다.
(3) 동일한 구조로 만들어진 4개의 윷을 가정. UP(U): 윷이 제대로 누워있는 상태 / DOWN(D): 윷이 뒤집어진 상태
- 도: 1개는 'UP', 3개는 'DOWN'
- 개: 2개는 'UP', 2개는 'DOWN'
- 걸: 3개는 'UP', 1개는 'DOWN'
- 윷: 4개 'UP'
- 모: 4개 'DOWN'
(5) 윷이 'UP'이 될 확률은 main함수의 인수로 받는다.
main.exe
a (0≤a≤1)
-> Prob(윷='U')=a, Prob(윷='D')=1-a
'Z'에서 시작해서 다시 'Z'까지 올 때까지, 계속 윷을 던지며 진행하는 프로그램을 작성하시오.