ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 투자노트 금융공학 퀀트 프로그래밍 과정 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.hinclude하시오

    . 변수 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 caseif elseif else의 특징에 대해 조사하고 어떤 때에 어떤 분기를 쓰면 유리한지 50자 이내로 정리해 보시오.

     

    switch 문으로 구현할 수 있는 것은 대부분 if문으로 구현할 수 있지만, 참과 거짓의 연산결과를 이용해서 실행할 영역을 결정할 때는 if문을 사용하는 것이 더 유리하다. 한편, switch문은 분기의 수가 많을 때 if문 보다 코드를 더 간결하게 보이게 한다.

     

     

     

    3. 환전 프로그램을 만드시오 (2시간 소요)

      . 환전하고자 하는 한국 돈을 int input으로 입력받으시오.

      . define을 통해 USA,JAPAN,EUROPE1,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

Designed by Tistory.