ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 투자노트 금융공학 프로그래밍 과정 7주차
    금융공학 퀀트 프로그래밍 과정 2020. 5. 3. 22:52

    제출안내

     1. 방법 : 본인 블로그에 작성   게시판에 링크를 업로드

               또는  게시판에 작성제목은 '투자노트 금융공학 퀀트 프로그래밍 과정 x주차과제등으로 작성 

               (  게시판에 작성한 내용은 주기적으로 삭제  정리되오니 강의 내용을 가지고 

                  있으시려면 본인 블로그에 작성하시오)

     2.  : 최종과제 스크린샷 1 이상 첨부스크린샷을 반드시 첨부하시오.

     3. 기한 : 매주 일요일 오후 12 전까지

     

     

     

    기본과제  제출 양식

    1. while의 사용방법은

     

    while( 조건식 )

    {

      조건식이 참일때 실행할 문장

    }

     

    과 같다. 이를 암기하시오. 또한 아래 문제를 해결하시오.(3시간 소요)

     

      . 100, 97, 94... 와 같은 등차수열이 있다.

      An = a + (n-1)*d; a=초항, d=공차임을 이용하여 등차수열의 일반항을 수기로 구하시오. 위 수열에서 초항은 100, 공차는 -3이다. 이 때, n값을 숫자로 넣으면 A를 계산해주는 프로그램을 for문을 이용하여 구하시오. 예를들어, n=3 이면 94를 출력해야함.

    int An, i, n = 0;

     

    printf("n입력 : ");

    scanf("%d", &n);

     

    An = 100;

     

     

    for (i = 0; i < n-1; i++) {

    An += -3;

    }

     

     

    printf("An = %d", An);

     

     

     

     

     

     

    return 0;

     

      . S1 = 100;

           S2 = 100 + 97;

           S3 = 100 + 97 + 94;

           Sn = A1 + A2 + A3 + ... + An; 임을 이용하여 S1, S2, S3 .... S34, S35 for문을 이용하여 구하시오. ''에서 만들어놓은 일반항 프로그램을 재사용 하여 구현하시오. (예를들어, Sum = Sum + A; A = 103-3N; 과 같이 구하면 됨) 예를들어,  n=5 이면 470을 출력해야함. (=100+97+94+91+88)

    main() {

    int An, i, sum=0, n = 0;

     

    //printf("n입력 : ");

    //scanf("%d", &n);

     

    n = 5;

    An = 100;

    sum = 100;

    printf("S1 = %d\n", sum);

     

    for (i = 0; i < n-1; i++) {

    An += -3;

    sum += An;

    printf("S%d = %d\n", i + 2, sum);

    }

     

     

    //printf("An = %d", An);

     

     

     

     

     

     

    return 0;

    }

     

      . S34100+97+94...1 이어서 모든 수가 양수가 더해지고 있고, S35100+07+94+...1+ (-2) 처럼 되어 음수를 처음으로 더하게 되므로 Sn의 최대값은 S34이다. Sn의 최대값을 구하기 위해 어디까지 Sum하여야 하는지 수기로 계산하여야 하는 불편함이 있다. ''에서 만든 프로그램을 조건식 A>0으로 주고 while문을 이용하여 똑같은 기능을 하는 프로그램을 구현하시오

     

    main() {

    int An, i=0, sum=0, n = 0;

     

    //printf("n입력 : ");

    //scanf("%d", &n);

     

     

    An = 100;

    sum = 100;

    printf("S1 = %d\n", sum);

     

    /*

    for (i = 0; i < n-1; i++) {

    An += -3;

    sum += An;

    printf("S%d = %d\n", i + , sum);

    }

    */

    while (An > 1) {

    i++;

    An += -3;

    sum += An;

    printf("S%d = %d\n", i+1, sum);

     

    }

     

     

    //printf("An = %d", An);

     

     

     

     

     

     

    return 0;

    }

     

     

      . ''를 개조하여, 초항과 공차를 입력받아

    공차가 양수이거나 초항과공차가 모두 음수인경우 S1,S2,S3... S20를 출력하고,

    초항이 양수이고 공차가 음수이면 수열의 값이 0 이상일때까지만 합해지도록 하여 부분합S 출력해 보시오. forwhile중 구현하기 유리한 것을 선택하여 사용해 보시오.

    main() {

    int An, i=0, sum=0, n = 0, d=0, a=0;

     

     

    printf("공차입력 : ");

    scanf("%d", &d);

    printf("초항입력 : ");

    scanf("%d", &a);

     

     

    An = a;

    sum = a;

    printf("S1 = %d\n", sum);

     

    if (d > 0 || (a < 0 && d < 0)) {

    for (i = 0; i < 20; i++) {

    An += d;

    sum += An;

    printf("S%d = %d\n", i +1 , sum);

    }

    }

     

    else {

    while (An > 1) {

    i++;

    An += d;

    sum += An;

    printf("S%d = %d\n", i + 1, sum);

     

    }

    }

     

     

     

     

     

     

    return 0;

    }

     

      . 코딩 중, for문과 while문 중 어떤 반복문을 어떨때 사용하는 것이 더 유리한지 50자 이내로 정리해보시오.

    for문의 경우 반복횟수가 정해져 있을 때 사용하면 유리하고, while문의 경우 반복횟수가 정해져 있지 않은 대신 반복을 제한하는 한계조건이 정해져 있을 때 사용하면 유리하다.

     

     

     

    2. Do while문의 사용법은

     

    Do{

      조건식이 참이거나 첫 실행일때 실행할 문장

    }while( 조건식 )

     

    과 같다. 이를 암기하시오. 또한 아래 문제를 해결하시오. (1시간 소요)

     

      . Do While문 바깥에 char password = 'a' 를 주시오. char input=0을 주시오.

      char password = 'a';

    char input = 0;

      . Do While문 안쪽에서 inputscanf하시오.

     

     

      . input의 값이 password가 아니면 ''를 반복하고 "입력한 값은 ~이며 암호가 틀렸습니다"를 출력하고, a 이면 반복문을 종료하도록 하는 적당한 조건식을 작성하시오. do~while문 뒤쪽 바깥에 "a를 입력하였으므로 종료되었습니다"를 출력하시오.

    main() {

    char password = 'a';

    char input = 0, enter=0;

     

    do{

    printf("pw : ");

    scanf("%c", &input);

    scanf("%c", &enter);

     

    if (input != 'a') {

    printf("입력한 값은 %c이며 암호가 틀렸습니다.\n", input);

    }

     

     

    }while (input != 'a');

     

     

    printf("a를 입력하였으므로 종료합니다.");

     

     

     

    return 0;

    }

     

      . while문은 언제 끝나게 될지 모를 경우 조건식을 통해 종료조건을 줄 수 있다는데에 의의가 있으며 do~while문은 반드시 한 번 이상은 실행해야 하는경우, 예를들어 패스워드 검증 등에 쓰인다는 데에 의의가 있다. for, while, do while에 대해 언제 어떤 반복문을 사용하는 것이 더 유리한지 100자 이내로 정리해 보시오.

    for문의 경우 반복횟수가 정해져 있는 프로그램을 짤 때 유리하다. 반면, while문과 do~while문은 반복횟수는 정해져 있지 않고, 반복을 제한하는 한계조건이 있는 프로그램을 짤 때 유리한데, while문은 조건을 확인하고 반복문을 수행하는데 반해, do~while문은 반복을 수행하고 조건을 확인하는 순서의 차이가 있어, do~while문은 최소 한 번 이상 반복을 실행하므로, 비밀번호 등을 검증할 때 유리하다.

     

     

     

    심화과제 제출 양식안해도  )

    1. 원주율을 계산하시오.

      . 1,3,5,7,9.... 가 나오는 수열을 만드시오

      . math.hinclude하고, ''를 이용하여 1,-3,5,-7,9... 가 나오는 수열을 만드시오. (-1)을 거듭제곱하면 얻을 수 있음. powfor을 이용하시오.

      . ''를 이용하여 1 - 1/3 + 1/5 - 1/7 + 1/9 가 나오는 수열을 for로 만드시오. 1/나 를 하면 얻을 수 있음.

      . 아래 공식중 위의 것을 이용하여 PI/4를 계산하시오. while을 이용하시오.

       

      . 계산된 PI/4 값에 4를 곱하여 PI계산값을 구하시오.

    main() {

    float a = 1,b=1, i=0, c=1, d;

    while (i<1000) {

    a += 2;

    b = a * pow(-1, i+1);

    c += 1 / b;

     

     

    i++;

     

     

     

     

    }

    printf("π/4 = %lf", 4*c);

     

     

     

    }

      . 3.14와 비교하여 계산PI값과의 차이가 0.01 이하가 되는 때(반복횟수)를 구하고 while문을 탈출하도록 하시오. 한편, PI와 반복횟수를 출력하시오.

    main() {

    float a = 1,b=1, i=0, c=1, d=0;

    while (fabs(3.14-4*c) > 0.01) {

    a += 2;

    b = a * pow(-1, i+1);

    c += 1 / b;

     

     

    i++;

     

     

     

    }

    printf("π/4 = %lf\n", 4*c);

    printf("반복횟수 = %lf", i);

     

     

     

    }

      . math.hinclude하고, 1제곱, 2제곱, 3제곱.. 가 나오는 수열을 powfor로 만드시오.

      . ''를 이용하여 1/1제곱, 1/3제곱, 1/5제곱.. 가 나오는 수열을 만드시오.

      . ''를 이용하여 1/1제곱 + 1/3제곱 + 1/5제곱.. 가 나오는 수열을 만드시오.

      . ''의 공식 중 아래의 것을 이용하여 PI제곱/6 값을 계산하시오. while을 이용하시오.

      . math.hinclude하고, 계산된 PI제곱/6값에, 6을 곱하고 sqrt 하여 계산된 PI값을 구하시오.

      . 3.14와 비교하여 계산PI값과의 차이가 0.01 이하가 되는 때(반복횟수)를 구하고 while문을 탈출하도록 하시오. 한편, PI와 반복횟수를 출력하시오.

      . ''에서 계산한 라이프니츠 공식과, ''에서 구한 오일러 공식의 수렴성을 비교하시오.

     

     

     

     

     2. 369 게임을 만드시오. (범위 : 99까지)

      . 1~99까지의 수의 십의자리를 읽어주는 프로그램을 만드시오.

        x번째 수에 대해, x 10으로 나눈 몫 n이 십의 자리이다.

        n=1이면 '', n=2이면 '이십', n=3이면 '삼십'....과 같이 십의 자리를 읽어주도록 만드시오.

     

      . 1~99까지의 수의 일의자리 m를 읽어주는 프로그램을 만드시오. 나머지 연산자를 이용하시오.

        m=1이면 '' m=2이면 '', m=3이면 ''.... 과 같이 일의 자리를 읽어주도록 만드시오.

     

      . 어떤수의 십의 자리가 3또는 6또는 9인 경우, 숫자를 읽지 말고 '' 을 출력하도록 만드시오. ''를 재사용하여 만드시오. if else를 이용하면 됨.

     

      . 어떤수의 일의 자리가 3또는 6또는 9인 경우, 숫자를 읽지 말고 '' 을 출력하도록 만드시오. ''를 재사용하여 만드시오. if else를 이용하면 됨.

     

      . '~' 에서, 출력문이 '짝일' '짝이' '짝사' ... '십짝' '이십짝' '사십짝' ... 처럼 나오지 않기 위해 예외처리를 하시오. if ~ elseif ~ else를 이용하면 됨.

     

      . 1~99에 대해 369 게임의 결과를 모두 출력하시오. for, while, do while 중 본인이 생각하기에 가장 간결한 코드가 되도록 반복문의 종류를 골라 작성하시오.

     

      . 33,36,39, 63,66.... 등에 대해 '짝짝' 이 출력되는지 확인하시오.

Designed by Tistory.