프로그래밍의 기초(의사 코드 트레이스)
요소 수 n인 배열 a에서 값 x를 찾아, 찾은 인덱스를 i에 구하는 다음 프로그램이 있다. 배열의 인덱스는 1부터 시작한다. and와 or는 왼쪽 식만으로 결과가 정해질 때는 오른쪽 식을 평가하지 않는다. 【a】에 넣을 조건식 중, x가 a 안에 없을 때 범위 밖의 a[n + 1]을 참조해 버리는 것은?
integer: i ← 1
while (【a】)
i ← i + 1
endwhile
- Aa[i] ≠ x and i ≦ n
- Bi ≦ n and a[i] ≠ x
- Cnot (i > n or a[i] = x)
정답과 해설 보기
정답: A. a[i] ≠ x and i ≦ n
x가 a 안에 없으면 i는 n + 1까지 늘어난 후 조건을 판정합니다. i ≦ n and a[i] ≠ x에서는 왼쪽의 i ≦ n이 false이므로 오른쪽의 a[i]는 평가되지 않아 범위 밖을 참조하지 않습니다. not (i > n or a[i] = x)도 i > n이 true인 시점에서 or의 결과가 정해지므로 a[i]를 평가하지 않습니다. a[i] ≠ x and i ≦ n은 범위를 확인하기 전에 a[n + 1]을 평가해 버립니다. 단락 평가에 의존할 때는 범위 확인을 왼쪽에 씁니다.