ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 투자노트 금융공학 퀀트 프로그래밍 과정 6주차
    금융공학 퀀트 프로그래밍 과정 2020. 4. 26. 22:49

    제출안내

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

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

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

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

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

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

     

     

    기본과제  제출 양식

    1. for의 사용방법은

     

      for(초기값;종료조건;증감값)

      {

         반복할 내용

       }

     

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

     

      . int start를 선언하고 1을 주시오.

      . int end를 선언하고 10을 주시오.

      . for문의 초기값에 int i=start를 주시오.

      . for문의 종료조건에 i<=end를 주시오.

      . for문의 증감값은 i++를 주시오.

      . ~마를 이용하여, 1부터 10까지 출력되게 하시오. '반복할 내용'printf를 이용하여 구현하면 됨.

    main() {

    int start = 1;

    int end = 10;

     

    for (int i = start; i <= end; i++) {

    printf("%d\t", i);

    }

     

     

     

    return 0;

    }

     

     

     

    2. for를 이용하여 숫자들의 합을 구하는 프로그램을 구현하시오. (1시간 소요)

      . int sumfor문 이전에 선언하고 0을 주시오.

      . '1.'를 이용하여 sum1부터 10까지의 합을 구하시오. 이를 printf 하시오. (힌트 : sum = sum+i 처럼 하면 됨.) 참고자료 https://wikidocs.net/11368

    main() {

    int sum = 0;

    for (int i = 1; i <= 10; i++) {

    sum = sum + i;

     

    }

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

     

     

     

     

    return 0;

    }

      . '1.', '1.'를 개조하여, 합을 구할 시작숫자와 끝 숫자를 scanf하시오. 시작숫자와 끝 숫자 사이에 있는 모든 값의 합을 구하시오. 이를 printf 하시오.

    main() {

    int sum = 0;

    int start = 0, end = 0;

    printf("start : ");

    scanf("%d", &start);

    printf("end : ");

    scanf("%d", &end);

     

     

    for (int i = start; i <= end; i++) {

    sum = sum + i;

     

    }

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

     

     

     

     

    return 0;

    }

     

     

     

    3. continue의 사용방법은 다음과 같다.

     

    for(초기값;종료조건;증감값)

    {

     

      if(반복문을 띄워넘을 조건)

      {

         continue;

       }

     

     }

     

    이를 암기하시오. 또한 아래 문항을 해결하시오https://wikidocs.net/11613를 참조하시오. (1.5시간 소요)

     

      . int i=1 ~ 9 까지 나오도록 for 문을 만드시오.

      . int j=1 ~ 9 까지 나오도록 ''에서 만든 for문 안에, for문을 하나 더 만드시오.

      . ,나를 이용하여 i*j를 만들고 구구단을 출력하도록 해 보시오

    main() {

    int i = 0, j = 0;

     

     

     

    for ( i = 1; i <= 9; i++) {

    for ( j = 1; j <= 9; j++) {

     

    printf("%d * %d = %d\t", i, j, i * j);

     

     

    }

     

    }

     

    return 0;

    }

      . ''에서 구구단 3단이 출력되지 않도록 continue를 사용해 보시오.

    main() {

    int i = 0, j = 0;

     

     

     

    for ( i = 1; i <= 9; i++) {

    for ( j = 1; j <= 9; j++) {

    if (i == 3) {

    continue;

    }

    printf("%d * %d = %d\t", i, j, i * j);

     

     

    }

     

    }

     

    return 0;

    }

      . 논리연산자 &&,||,! 에 대해 조사하시오. 이를 이용하여 구구단 3,5,7단이 출력되지 않도록 해보시오.
    논리연산자란 AND, OR, NOT을 표현하는 연산자이다.

    A && B : AB가 모두 참이면 연산결과로 참을 반환(AND)

    A || B : AB 둘 중 하나라도 참이면 연산결과로 참을 반환(OR)

    ! A : A가 참이면 거짓, A가 거짓이면 참을 반환(NOT)

     

    main() {

    int i = 0, j = 0;

     

     

     

    for ( i = 1; i <= 9; i++) {

    for ( j = 1; j <= 9; j++) {

    if (i == 3 || i==5 || i==7) {

    continue;

    }

    printf("%d * %d = %d\t", i, j, i * j);

     

     

    }

     

    }

     

    return 0;

    }

     

      . 구구단 4,8단만 출력되도록 continue를 사용해 보시오. (! 연산자를 사용하시오.)

     main() {

    int i = 0, j = 0;

     

     

     

    for ( i = 1; i <= 9; i++) {

    for ( j = 1; j <= 9; j++) {

    if (!(i==4 || i==8) ) {

    continue;

    }

    printf("%d * %d = %d\t", i, j, i * j);

     

     

    }

     

    }

     

    return 0;

    }

     

     4. break의 사용방법은 다음과 같다.

     

    for(초기값;종료조건;증감값)

    {

     

      if(반복문을 종료할 조건)

      {

         break;

       }

     

    }

     

    이를 암기하시오. 또한 아래 문항을 해결하시오https://wikidocs.net/11613를 참조하시오. (1시간 소요)

     

     . for문의 종료조건에 숫자1 또는 true를 주어 무한루프를 만드시오.

     . 무한루프 이전의 밖에서 char password=0을 만드시오.

     . 무한루프 안에서 passwordscanf하시오.

     . password의 값이 a가 아니면 ''를 반복하고 "입력한 값은 ~이며 암호가 틀렸습니다"를 출력하고, a 이면 break를 하여 반복문을 종료하도록 하시오. for문 뒤쪽 바깥에 "a를 입력하였으므로 종료되었습니다"를 출력하시오.

    main() {

     

    char password = 0, enter;

     

     

    for (int i=0 ; i = 1;) {

    printf("pw : ");

    scanf("%c", &password);

    scanf("%c", &enter);

     

     

     

    if (password == 'a') {

    break;

    }

     

    else {

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

    }

     

     

    }

    printf("%c를 입력하였으므로 종료합니다.", password);

     

    return 0;

    }

     

     

     

     

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

    1. 어떤 수의 모든 약수를 출력하는 프로그램을 만드시오http://tujanote.cafe24.com/bbs/board.php?bo_table=pds2&wr_id=62&sca=C 를 참조하시오.

      . num=10 을 선언하시오. 2~num 까지 i가 출력되도록 하시오. numi로 나눈 나머지가 0인지 검사하시오. 이 때, 나머지가 0이면 약수이므로 이를 출력하시오.

    main() {

     

    int num = 10;

     

    printf("%d의 약수는 1, ",num);

    for (int i = 2; i <= 10; i++) {

    if (num % i == 0) {

    printf("%d,", i);

    }

     

    }

    printf("입니다.");

    return 0;

    }

      . num=2~100까지 증가시키며 각 수의 모든 약수를 찾으시오. 이를 printf 하시오. 예를들어, "~의 약수는 ~,~,~ 입니다." 처럼 출력하시오. (힌트 : 출력문은 '~의 약수는''~,~,~''입니다'로 나뉨.  '입니다'는 루프가 끝난 후 삽입하면 됨. '~의 약수는 1,'1은 모든수의 약수이므로 항상 삽입하면 됨. )

    main() {

     

     

     

    for (int num = 2; num <= 100; num++) {

    printf("%d의 약수는 1, ", num);

    for (int i = 2; i <= num; i++) {

    if (num % i == 0) {

    printf("%d, ", i);

    }

     

    }

    printf("입니다.\n");

     

    }

     

     

    return 0;

     

     

    2. 소수를 출력하는 프로그램을 만드시오http://tujanote.cafe24.com/bbs/board.php?bo_table=pds2&wr_id=65&sca=C 를 참조하시오.

      . 특정 숫자가 소수인지 아닌지 판별하시오. 예를들어, '1.'에서 2~num까지 탐색할 때 단 한번이라도 numi로 나눈 나머지가 0이 나오면 소수가 아니다. 따라서, 단 한번이라도 0이 나오면 2~num의 루프를 break 하면 된다.

      . 2~100 까지 숫자 중 모든 소수를 출력하도록 해 보시오. 이를 printf 하시오.

    main() {

     

    int num, i, signal=1;

    printf("소수입력 : ");

    scanf("%d", &num);

     

     

     

    for (i = 2; i < num; i++) {

     

    if (num % i == 0) {

    signal = 0;

    break;

     

    }

     

     

     

    }

    if (signal == 1) {

    printf("소수 " );

    }

    else {

    printf("소수아님 ");

    }

     

     

     

     

    return 0;

    }

      . ''에서 2~num 까지 탐색하지말고 2~num/2+1 까지만 탐색하여도 결과가 같음을 보이시오. 한편그 이유를 설명하시오.

      num의 최대공약수는 num을 2로 나눈 값을 초과할 수 없고, 어떤 수를 공약수로 나눠서 소수를 판별할 때 최대공약수를 초과하는 값은 소수의 판별수가 될 수 없으므로, 2~num/2+1 까지만 탐색하여도 결과가 같다.

     

     3. 점화식 n+1 = pAn + q를 푸시오.

      . pq 입력받으시오.

      . int A=1 에서 시작하시오.

      . 항번호 n을 입력받으시오.

      . for문을 이용하여 n번까지 A = p*A + q 를 반복하여 푸시오.

    main() {

     

    int A = 1;

    int p=0, q=0, n=0;

     

    printf("p : ");

    scanf("%d", &p);

    printf("q : ");

    scanf("%d", &q);

    printf("n : ");

    scanf("%d", &n);

     

    for (int i = 1; i < n; i++) {

    A = p * A + q;

    }

    printf("A : %d",A);

     

    return 0;

    }

      . 복합산술연산자에 대해 조사하시오https://wikidocs.net/11597를 참조하시오.

    복합 산술연산자에는 *=, /=, %/, -=가 있다. a += b 등의 형태로 쓰이며, a에 저장된 값을 b만큼 증가시키는 연산식으로 a = a + b를 간략하게 표현한 연산식이다.

     

      . ''에서 A *= p, A += q 를 사용하여도 동일한 결과가 나옴을 확인하시오.

     

     

Designed by Tistory.