책 내용 질문하기
궁금합니다..
도서
2019 시나공 정보처리기사 실기(산업기사포함)
페이지
195
조회수
293
작성일
2019-08-22
작성자
탈퇴*원
첨부파일

1) 195쪽에 보면 플로차트에 있는 3번 빈칸에 나머지를 구하는 것 같은데, mod함수를 쓰면 안되는건가요??

2) 2번 이미지 파일에 보면 for문 끝에 ;를 붙이고 안붙이고 답이 다른데 궁금합니다. ;를 쓰면 for문을 다 반복하고 프린트하고, ;를 안쓰면 print까지 포함해서 반복하는 것까진 알겠는데 결과가 다른 이유는 모르겠네요.. ;를 붙이면 11 65 가 나오고, 안붙이면 10 54가 나와요..

답변
2019-08-23 11:45:10

안녕하세요 길벗수험서 운영팀입니다.

 

[1]

순서도 내에서 '%'나 '^'과 같은 특수 산술 기호, 함수(mod, sqrt 등)를 사용하실 때는 문제나 <처리조건> 또는 순서도 내에 이미 사용된 함수가 아닌 경우 사용이 제한됩니다.

mod 또는 %는 알고리즘에 문제가 없는 사용이지만, 미리 제시되거나 사용되지 않아 감점 또는 오답의 가능성이 있습니다. 

산업인력공단에서 명확한 채점 기준을 공개하고 있지 않아 확답드리기는 어려우나 가능한 정답에 가깝게 적기 위해서는 순서도 내 또는 <처리조건>에서 언급되지 않은 함수나 연산자의 사용은 지양해주세요. 

 

 

[2]

for문이 마지막 종료될 때 증가값을 수행하고 조건이 거짓(false)이 되면서 종료된다는 것을 아셔야합니다.

예를 들어 다음과 같은 코드가 있다고 가정하죠.

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

   hap+=i;

 

이 경우 hap은 i가 1부터 10까지 반복하는 동안 hap+=i를 수행해서 for문을 벗어난 뒤 출력해보면 55라는 결과를 나타낼 것입니다.

이제 그 때 i를 출력해보세요.

 

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

   hap+=i;

printf("%d, %d", hap, i);

 

이 때 i는 11을 출력하게 됩니다.

for문에서 1~10까지 수행한 뒤 프로세스는 다시 for(i=1;i<=10;i++)로 돌아옵니다.

증가값(i++)을 수행한 후, 조건식(i<=10)이 11<=10이 되어 거짓이 되는 것을 판단한 후 빠져나가게 되는 것이죠.

 

질문주신 문제의 코드에서도 마찬가지 입니다.

마지막에 증가값인 .. ++i, i, hap+=i ... 를 수행하고 조건을 거짓으로 만들면서 빠져나오게 되는 것이죠.

(증가값 중간에 i는 무슨 용도인가요? 아무 작업도 수행하지 않을 것 같습니다..)

 

for문에 세미콜론(;)을 제거해도 for문 종료시 한 번 더 출력하게 되면 결과는 같을 것입니다.

for(i=1;i<=10;++i, hap+=i) 

    printf("%d %d\n", i, hap);

printf("%d %d\n", i, hap); 

이렇게요.

 

행복한 하루되세요 :)

  • 관리자
    2019-08-23 11:45:10

    안녕하세요 길벗수험서 운영팀입니다.

     

    [1]

    순서도 내에서 '%'나 '^'과 같은 특수 산술 기호, 함수(mod, sqrt 등)를 사용하실 때는 문제나 <처리조건> 또는 순서도 내에 이미 사용된 함수가 아닌 경우 사용이 제한됩니다.

    mod 또는 %는 알고리즘에 문제가 없는 사용이지만, 미리 제시되거나 사용되지 않아 감점 또는 오답의 가능성이 있습니다. 

    산업인력공단에서 명확한 채점 기준을 공개하고 있지 않아 확답드리기는 어려우나 가능한 정답에 가깝게 적기 위해서는 순서도 내 또는 <처리조건>에서 언급되지 않은 함수나 연산자의 사용은 지양해주세요. 

     

     

    [2]

    for문이 마지막 종료될 때 증가값을 수행하고 조건이 거짓(false)이 되면서 종료된다는 것을 아셔야합니다.

    예를 들어 다음과 같은 코드가 있다고 가정하죠.

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

       hap+=i;

     

    이 경우 hap은 i가 1부터 10까지 반복하는 동안 hap+=i를 수행해서 for문을 벗어난 뒤 출력해보면 55라는 결과를 나타낼 것입니다.

    이제 그 때 i를 출력해보세요.

     

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

       hap+=i;

    printf("%d, %d", hap, i);

     

    이 때 i는 11을 출력하게 됩니다.

    for문에서 1~10까지 수행한 뒤 프로세스는 다시 for(i=1;i<=10;i++)로 돌아옵니다.

    증가값(i++)을 수행한 후, 조건식(i<=10)이 11<=10이 되어 거짓이 되는 것을 판단한 후 빠져나가게 되는 것이죠.

     

    질문주신 문제의 코드에서도 마찬가지 입니다.

    마지막에 증가값인 .. ++i, i, hap+=i ... 를 수행하고 조건을 거짓으로 만들면서 빠져나오게 되는 것이죠.

    (증가값 중간에 i는 무슨 용도인가요? 아무 작업도 수행하지 않을 것 같습니다..)

     

    for문에 세미콜론(;)을 제거해도 for문 종료시 한 번 더 출력하게 되면 결과는 같을 것입니다.

    for(i=1;i<=10;++i, hap+=i) 

        printf("%d %d\n", i, hap);

    printf("%d %d\n", i, hap); 

    이렇게요.

     

    행복한 하루되세요 :)

  • 관리자
    2019-08-26 10:24:02

    안녕하세요 길벗수험서 운영팀입니다.

     

    음.. 제가 조금 다른 부분을 설명드린 것 같습니다.

    hap+=i 부분이 증가값 부분에 포함되어 있는 경우와 for의 본문에 포함되어 있는 경우를 설명드렸네요. 마저 설명드리자면 다음과 같습니다.

     

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

       hap+=i;

     

    위 식에 번호를 매겨보죠. 아래와 같이요.

     

    for(①; ②; ③)

       ④;

     

    위 for문을 수행한다면

    1회 : ①, ②(조건 참), ④

    2회 : ③, ②(조건 참), ④

    3회 : ③, ②(조건 참), ④

    4회 : ③, ②(조건 참), ④ 

    5회 : ③, ②(조건 참), ④ 

    6회 : ③, ②(조건 참), ④ 

    7회 : ③, ②(조건 참), ④ 

    8회 : ③, ②(조건 참), ④ 

    9회 : ③, ②(조건 참), ④ 

    10회 : ③, ②(조건 참), ④ 

    종료 : ③, ②(조건 거짓) <탈출> 

    이렇게 될 것입니다.

    이 때 i는 1부터 11까지 변화하고, hap은 1~10까지 더해 55의 결과를 내겠죠.

     

    이제 이것을 두 번째 for문에 적용해보죠.

    for (i = 1; i <= 10; ++i, hap += i); 

           ↓

    for(①; ②; ③, ④);

     

    1: , (조건 참)

    2: , , (조건 참)

    3: , , (조건 참)

    4: , , (조건 참)

    5: , , (조건 참)

    6: , , (조건 참)

    7: , , (조건 참)

    8: , , (조건 참)

    9: , , (조건 참)

    10: , , (조건 참)

    종료 : , , (조건 거짓) <탈출>

     

    위의 식에서 i는 동일하게 1~11까지 변화합니다. 다만 hap은 i가 증가한 이후부터 더해지니 2~11까지의 합인 65가 됩니다.

     

    --------------

    2.png 답변

     

    첨부하신 이미지 파일의 코드를 정확히 이해하시려면 출력문의 위치를 이해하셔야 합니다.

    세미콜론이 없는 전자의 경우 printf문이 for문 내에 포함되어 있습니다.

     

    for(①; ②; ③)

       ④;

     

    이 형태에서 ④번의 위치에 있는 꼴이죠.

    반면 후자의 코드의 경우

     

    for(①; ②; ③)

       ④;

    ⑤;

     

    ⑤번의 위치에 있는 꼴이 되는데, 이렇게 for문을 벗어나 for문이 종료된 이후에 출력되는 형태이다보니, ④번에서는 고려되지 않는 ③번의 증가값을 한 번 더 수행한 결과를 출력하게 되는 것이죠.

     

    (hap은 전혀 고려할 필요가 없습니다.)

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

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

    위 코드를 수행하게 되면 1~10까지 출력하게 되죠.

    반면

     

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

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

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

    위 코드를 수행하게 되면 1~11까지 출력하게 됩니다.

    회원님의 이미지는 단순히 이 차이일 뿐이죠.

     

    행복한 하루되세요 :)

  • *
    2019-08-23 13:49:37

    2번이 이해가 안가네요 ㅠㅠ... 같은 조건문인데 왜 세미콜론이 붙었다고 답이 달라지는걸까요?

    조건문은 똑같은데 이해가 안가요.. 11이 돼야 거짓이 돼서 탈출이 되는건 알겠는데, 왜 세미콜론을 떼면 10이 나오는거죠...?(2번 jpg)

    그리고 

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

       hap+=i;

    ====================

    for(i=1;i<=10;++i, hap+=i)  

    ====================

    위의 두 개의 식으로 설명을 해주셨는데 답이 다른게 맞는건가요?? 밑에는 첫번째 반복할때 (hap+=1을 무시해야해서?) 답이 달라야 하는게 맞는건가요??

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.