본문 바로가기

프로그래밍, 쉽게 배워보자

무한루프와 반복의 중첩(네스트)

무한루프
'오후 1시까지 크리스마스카드를 쓴다.' 는 명령을 실행한다고 가정해 봅시다. 여기에서 크스리스마스카드를 쓰는 행위는 반복(루프) 명령에 해당합니다. 그런데 반복 횟수가 정해지지 않는 명령에 해당합니다. 이럴때 조건문은 '오후 1시까지'가 됩니다.

무한루프 반복의 중첩반복의 중첩을 나타낸 흐름도


논리 흐름도를 만들어 보면 위 그림처럼 만들어질텐데, 앞의 것을 '선조건판단', 뒤의 것을 '후조건판단'이라 합니다.

그런데 조건판단문을 만들 때  주의할 점이 있습니다. 반복하는 횟수가 정해져 있을 때, 반복횟수를 세는 카운터를 "카운터의 값이 □□에서 □□사이" 라는 횟수를 지정해 조건문을 달게 됩니다. 보통은 카운터 횟수를 한 번 실시할 때마다 숫자가 하나씩 올라가는 것이 일반적이지만,

프로그래밍언어 중에는 카운터 횟수를 세는 숫자가 하나씩 증가하는 것도 있지만, 반대로 하나씩 감소하게끔 지정된 것도 있습니다. 즉 '1회, 2회, 3회, 4회, 5회'가 아닌, '-1회, -2회, -3회, -4회, -5회'가 되버립니다. 그러므로 카운터의 증가분과 종료값에 주의를 기울일 필요가 있습니다.  이럴 땐, 반복 처리에서 빠져 나올 수 없게 됩니다. 이런 상태를 무한 루프라고 합니다.

이런 경우도 무한 루프에 빠지게 됩니다. 첫째, '카운터 값이 0부터 5까지, 단 카운터회수는 하나씩 감소'라고 잘못된 명령을 내릴 때. 왜냐하면 역시 '-1회, -2회, -3회, -4회, -5회'처럼 되버리기 때문이죠.
둘째, '오후 1시'라고 지정했지만 시계가 작동을 멈췄거나 즉, 반복 회수를 세는 카운터가 갱신되지 않을 때.

반복의 중첩(네스트)
반복 구조안에 또 반복구조가 있는 경우. 예를 들어, 사탕 알 세개씩 한 상자에 담아 사탕봉지 다섯개를 만든다. 즉 사탕이 세개씩 들어간 상자가 담긴, 다섯개의 사탕봉지를 만든다.'라는 명령을 수행한다고 가정해 봅시다. 이에 대한 논리 구조의 흐름도를 만들어 본다면 아래와 같습니다.

반복의중첩(네스트)반복의중첩(네스트)

사탕 세개를 상자에 담는 내부반복 구조와, 그 상자를 사탕봉지에 담는 외부 반복가 중첩되어 있습니다. 일반적으로 프로그램을 작성할 때는 외부카운터에 'i', 내부 카운터에 'j'라고 이름 붙입니다!