-
투자노트 금융공학 퀀트 프로그래밍 과정 8주차금융공학 퀀트 프로그래밍 과정 2020. 5. 10. 19:46
# 제출안내
1. 방법 : 본인 블로그에 작성 후 본 게시판에 링크를 업로드
또는 본 게시판에 작성. 제목은 '투자노트 금융공학 퀀트 프로그래밍 과정 x주차과제' 등으로 작성
(※ 본 게시판에 작성한 내용은 주기적으로 삭제 및 정리되오니 강의 내용을 가지고
있으시려면 본인 블로그에 작성하시오)
2. 양 : 최종과제 스크린샷 1장 이상 첨부. 스크린샷을 반드시 첨부하시오.
3. 기한 : 매주 일요일 오후 12시 전까지
# 기본과제 및 제출 양식
1. switch 함수의 사용 방법은
switch( 조건분기할 변수 )
case 변수의값 : 실행내용 break;
case 변수의값2 : 실행내용 break;
case 변수의값3 : 실행내용 break;
default : 실행내용
과 같다. 이를 암기하시오. 또한 아래 문제를 해결하시오.(2시간 소요)
가. 이차방정식 ax2+bx+c = 0 에 대해 a,b,c를 선언하고, 각각 입력받으시오.
단, 입력받은 a=0이면 0이 아닌 수를 입력할 때 까지 반복하여 입력을 받도록 하시오.(do while이용)
do {
printf("a입력 : ");
scanf("%lf", &a);
} while (a != 0);
printf("b입력 : ");
scanf("%lf", &b);
printf("c입력 : ");
scanf("%lf", &c);
나. math.h를 include하시오
다. 변수 det를 선언하고, 이차방정식의 판별식을 계산하여 넣으시오.
det = pow(b, 2) - 4 * a * c;
라. 변수 SolNum를 선언하고, if~elseif~else로 해의 갯수를 넣으시오. '나'를 활용하시오.
if (det > 0) SolNum = 2;
else if (det == 0) SolNum = 1;
else SolNum = 0;
마. switch 함수를 만들고 조건분기할 변수를 SolNum으로 하시오.
바. case에서 SolNum=2 이면 두 근을 표시하시오.
사. case에서 SolNum=1 이면 중근을 표시하시오.
아. case에서 SolNum=0 이면 '해가없다'를 표시하시오.
switch (SolNum + 1) {
case 1 :
printf("해가 없다");
break;
case 2 :
x1 = -b / (2 * a);
printf("중근 : %lf", x1);
break;
case 3 :
x1 = -b / (2 * a) + sqrt(det) / (2 * a);
x2 = -b / (2 * a) - sqrt(det) / (2 * a);
printf("x1 = %.2lf, x2 = %.2lf", x1, x2);
2. 숫자를 읽어주는 프로그램을 만드시오.(2시간 소요)
가. 1~99까지 반복문을 for로 만드시오.
나. 1~99까지의 수의 십의자리를 읽어주는 프로그램을 switch case로 만드시오.
x번째 수에 대해, x를 10으로 나눈 몫 n이 십의 자리이다.
n=1이면 '십', n=2이면 '이십', n=3이면 '삼십'....과 같이 십의 자리를 읽어주도록 만드시오.
다. 1~99까지의 수의 일의자리 m를 읽어주는 프로그램을 switch case로 만드시오. 나머지 연산자를 이용하시오.
m=1이면 '일' m=2이면 '이', m=3이면 '삼'.... 과 같이 일의 자리를 읽어주도록 만드시오.
main() {
int i, n, m;
for (i = 1; i < 100; i++) {
n = i / 10;
switch (n) {
case 1 :
printf("십");
break;
case 2:
printf("이십");
break;
case 3:
printf("삼십");
break;
case 4:
printf("사십");
break;
case 5:
printf("오십");
break;
case 6:
printf("육십");
break;
case 7:
printf("칠십");
break;
case 8:
printf("팔십");
break;
case 9:
printf("구십");
break;
}
m = i % 10;
switch (m) {
case 1:
printf("일");
break;
case 2:
printf("이");
break;
case 3:
printf("삼");
break;
case 4:
printf("사");
break;
case 5:
printf("오");
break;
case 6:
printf("육");
break;
case 7:
printf("칠");
break;
case 8:
printf("팔");
break;
case 9:
printf("구");
break;
}
printf("\n");
}
return 0;
}
라. 나~다에서 switch case가 아닌 if ~elseif~ else~를 이용하여 똑같은 기능을 하도록 만드시오.
for (i = 1; i < 100; i++) {
n = i / 10;
if (n == 1) printf("십");
else if (n == 2) printf("이십");
else if (n == 3) printf("삼십");
else if (n == 4) printf("사십");
else if (n == 5) printf("오십");
else if (n == 6) printf("육십");
else if (n == 7) printf("칠십");
else if (n == 8) printf("팔십");
else if (n == 9) printf("구십");
m = i % 10;
if (m == 1) printf("일");
else if (m == 2) printf("이");
else if (m == 3) printf("삼");
else if (m == 4) printf("사");
else if (m == 5) printf("오");
else if (m == 6) printf("육");
else if (m == 7) printf("칠");
else if (m == 8) printf("팔");
else if (m == 9) printf("구");
printf("\n");
}
마. switch case와 if elseif else의 특징에 대해 조사하고 어떤 때에 어떤 분기를 쓰면 유리한지 50자 이내로 정리해 보시오.
switch 문으로 구현할 수 있는 것은 대부분 if문으로 구현할 수 있지만, 참과 거짓의 연산결과를 이용해서 실행할 영역을 결정할 때는 if문을 사용하는 것이 더 유리하다. 한편, switch문은 분기의 수가 많을 때 if문 보다 코드를 더 간결하게 보이게 한다.
3. 환전 프로그램을 만드시오 (2시간 소요)
가. 환전하고자 하는 한국 돈을 int input으로 입력받으시오.
나. define을 통해 USA,JAPAN,EUROPE를 1,2,3 으로 정의하시오. 어느나라 돈으로 바꿀지를 정의할 때 사용할 것임(switch case의 입력임)
다. define을 통해 USD,JPY,EUR을 정의하시오. 현재 환율을 이용하시오. 단, 엔화환율은 100으로 나누어야 계산이 정상동작함
라. 어느나라 통화로 바꿀것인지 입력받으시오.(1.USA 2.JAPAN 3.EUROPE) switch ~ case문을 통해 바꿀통화의 번호를 nation이라는 변수로 받아 USA,JAPAN,EUROPE와 비교하여 넣으시오.
scanf( "%d", &nation );
switch( nation )
case USA : 실행내용 break;
case JAPAN : 실행내용 break;
case EUROPE : 실행내용 break;
default : 실행내용
마. case문 안에서 원화량을 환율로 나누어 외환으로 얼마인지 구하시오.
바. 1달러 미만, 1000엔 미만, 1유로 미만은 절사하고 한국돈 잔돈으로 받을수 있도록 계산하시오.
사. 최종적으로 한국돈입력, 어느나라통화로 바꿀지 입력하면 상대 통화로 얼마를 받을수 있고 잔돈은 얼마인지 출력되는 프로그램을 만드시오.
#define USA 1
#define JAPAN 2
#define EUROPE 3
#define USD 1221
#define JPY 1148
#define EUR 1324
main() {
int input, nation, output, change;
printf("환전 할 돈(원화) : ");
scanf("%d", &input);
printf("어느 화폐로 환전하시겠습니까? (1.USA 2.JAPAN 3.EUROPE) : ");
scanf("%d", &nation);
switch (nation) {
case 1:
output = input / USD;
change = input - output * USD;
printf("환전된 돈 : %d USD, 잔돈 : %d 원", output, change);
break;
case 2:
output = input / JPY;
change = input - output * JPY;
printf("환전된 돈 : %d JPY, 잔돈 : %d 원", output*100, change);
break;
case 3 :
output = input / EUR;
change = input - output * EUR;
printf("환전된 돈 : %d EUR, 잔돈 : %d 원", output, change);
break;
}
return 0;
}
아. define을 통해 USA,JAPAN,EUROPE,USD,JPY,EUR등을 정의하면 무엇이 좋은지 50자 이내로 쓰시오.
먼저 코드를 더 깔끔하게 작성하고 보는 사람도 쉽게 이해할 수 있다는 장점이 있고, 환율과 같이 실시간으로 값을 바꿔줘야 되는 경우 코드 값을 일일이 바꾸는 것이 아니라 define에서 정의만 수정하여 간편하게 코드를 수정할 수 있다.
# 심화과제 제출 양식( 안해도 됨 )
1. 기본문제 3번을 재사용하여, 외국돈의 양과 외화종류를 선택하면 한국돈으로 바꾸어 주는 프로그램을 만드시오.
가. 외국돈은 정수로 받도록 하시오.
나. 환전 후 한국돈의 양, 잔돈 및 환전하지 못하는 금액의 양을 표시하시오. 특히, 엔화는 1000엔을 최소단위로 환전할 수 있음을 고려하시오. (1000엔 미만 환전 불가)
다. 환가료율을 고려하여 외화->한화 교환시 수수료를 떼도록 만들어 보시오.
달러 1%, 엔화 1.5%, 유로 2%를 떼도록 switch case를 이용해보시오.
라. 환율을 어제날짜의 값으로 바꾼 후, 가~다를 다시 확인해 보시오. 이 때, 프로그램은 손대지 않고 define문에 새로운 값을 주기만 하면 된다는 코딩의 편리성 및 코드의 가시성을 확인하시오.
2. 자바를 이용하여 만들어진 다음 프로그램을 C로 포팅하여 보시오.
http://tujanote.cafe24.com/bbs/board.php?bo_table=pds2&wr_id=23&sca=%EC%9E%90%EB%B0%94
'금융공학 퀀트 프로그래밍 과정' 카테고리의 다른 글
투자노트 금융공학 프로그래밍 과정 7주차 (0) 2020.05.03 투자노트 금융공학 퀀트 프로그래밍 과정 6주차 (0) 2020.04.26 투자노트 금융공학 퀀트 프로그래밍 과정 5주차 (0) 2020.04.19 투자노트 금융공학 퀀트 프로그래밍 과정 4주차 과제 (0) 2020.04.12 투자노트 금융공학 퀀트 프로그래밍 3주차 과제 (0) 2020.04.05