정보처리 기능사 실기 142페이지에 있는 순서도 보면 석차를 구하는 순서도 있는데요
이해가 잘 안되는 부분이 있어서 질문 드립니다.
일단 첫번째 빈칸의 i <= ( ) 이부분 에서 저의 생각으로는 i는 석차가 저장될 배열의 위치를 지정할 변수라 나오고
Rank(i)=1 이라는 말을 보아서는 각 배열의 위치마다 석차를 1로 지정해주는거 같은데 위에서 보면 CNT값이 CNT-1이 되었습니다.50명의 학생들의 석차를 다 1로 지정해주고 시작해야 하는거 아닌가요? 해설지에는 마지막 읽은 자료는 실제 자료가 아니므로 CNT에서 1을 차감한다고 적혀있는데 이해가 잘가지 않습니다
두번째 질문은 바로 다음 빈칸인 J=1이라고 적혀있는데요 이부분을 보면 CNT-1이 조금은 이해가는게 비교대상이니까 하나를 빼주는게 이해가지만 J=I+1이 더 맞지 않나 궁금합니다.i가 1이고 J도 1이면 같은 부분을 비교하는거 아닌가 헷갈리네요 이부분을 좀 알려주셨으면 좋겠습니다.
요약하면
1.CNT값에서 -1을 해주는 정확한 이유
2.I <= CNT 50명의 학생인데 49명의 학생에게만 석차를 1등으로 설정하는 이유(1번의 개념이 정확하면 해결될거같습니다.
3.J=1인 이유 J가 I값을 제외한 값이 저장된 49개의 배열이라면 이해가 되지만 제 생각에는 I배열에 1~49 개의 정보가 있고 J배열에 1~49개의 배열이 있다면 공통된 하나의 정보가 들어있지 않다면 석차에 오류가 생기지 않을까요?
말이 잘 정리가 되지 않아서 이해하기 힘드실수도 있으실텐데 지금 개념이 없는게 아니라 헷갈리는 부분이 있어서요 조금이라도 알려주시면 이해하는데 좋을거같습니다.
안녕하세요.
EOF(End Of File)로 인해 혼동이 되신것 같습니다.
EOF는 파일에서 자료를 읽어올 때 파일의 끝인지를 인식하는 예약어입니다.
CNT를 -1하는 이유는 파일의 끝인지 확인하기 위해 EOF를 검사할 때도 자료를 읽어오는 과정을 수행하기 때문입니다.
즉 학생이 50명이라면
1번부터 50번까지 자료를 읽으면서 EOF를 확인합니다. 1번부터 50번까지 자료를 읽을 때는 실제 자료이기 때문에 EOF가 아니므로 NO가 됩니다. 우리는 50번이 마지막 자료라는 것을 알지만 컴퓨터는 모르기 때문에 50번 자료를 읽고 나서 EOF 비교에서 NO가 나와 다시 자료를 읽습니다. 51번째 자료는 없지만 파일에는 마지막 자료 뒤에 눈에는 보이지 않지만 EOF 자료를 넣어두므로 그 자료가 읽혀 집니다. 그래서 EOF인지 비교할 때 YES가 되어 자료 입력을 완료하게 됩니다.
이와 같이 파일에서 자료을 읽을 때 EOF로 비교하는 경우는 본래의 자료 50개보다 1개가 더 읽혀지므로 읽는 과정을 카운트 하는 경우 실제 자료의 개수보다 1개가 더 많아집니다. 즉 현재 CNT는 51이 저장되게 된 것이죠.
그래서 실제 자료의 개수로 이후 처리를 수행하기 위해 CNT에서 -1을 수행하는 것입니다.
오늘도 즐거운 하루 되세요.
-
*2017-11-15 09:22:11
안녕하세요.
EOF(End Of File)로 인해 혼동이 되신것 같습니다.
EOF는 파일에서 자료를 읽어올 때 파일의 끝인지를 인식하는 예약어입니다.
CNT를 -1하는 이유는 파일의 끝인지 확인하기 위해 EOF를 검사할 때도 자료를 읽어오는 과정을 수행하기 때문입니다.
즉 학생이 50명이라면
1번부터 50번까지 자료를 읽으면서 EOF를 확인합니다. 1번부터 50번까지 자료를 읽을 때는 실제 자료이기 때문에 EOF가 아니므로 NO가 됩니다. 우리는 50번이 마지막 자료라는 것을 알지만 컴퓨터는 모르기 때문에 50번 자료를 읽고 나서 EOF 비교에서 NO가 나와 다시 자료를 읽습니다. 51번째 자료는 없지만 파일에는 마지막 자료 뒤에 눈에는 보이지 않지만 EOF 자료를 넣어두므로 그 자료가 읽혀 집니다. 그래서 EOF인지 비교할 때 YES가 되어 자료 입력을 완료하게 됩니다.
이와 같이 파일에서 자료을 읽을 때 EOF로 비교하는 경우는 본래의 자료 50개보다 1개가 더 읽혀지므로 읽는 과정을 카운트 하는 경우 실제 자료의 개수보다 1개가 더 많아집니다. 즉 현재 CNT는 51이 저장되게 된 것이죠.
그래서 실제 자료의 개수로 이후 처리를 수행하기 위해 CNT에서 -1을 수행하는 것입니다.
오늘도 즐거운 하루 되세요.