print(), debug로 출력이나 프로그램 상태를 확인한다.
assert로 조건을 입력한다.
입력 개수, 출력 개수, 수행 시간, 시간 복잡도 등 확인
pow(a: int, b: int):
x = a
y = b
z = 1
while y > 0:
z = z * x
y = y - 1
return z
여기서 시작조건 Q는 x = a, y = b, z = 1이다.
Loop invariant는 k번째 루프를 시작하기 전에
를 만족한다.
만약 z = 0이었다면, Loop invariant에서 z가 언제나 0이므로, 만족하지 않는다.
sum(m: int, n: int):
z = 0
k = m
while k <= n:
z = z + k
k = k + 1
return z
precondition Q는 이다
branch condition B 는 이다.
Loop invariant는 에 대한 루프가 동작할 때, 에는 의 합을 가지고 있는 것이다. (는 이다.)
postcondition R은 까지 합
arrange(a: List(int)):
h = 0
j = len(a) - 1
while h < j:
if a[h] <= 0:
h = h + 1
else:
a[h], a[j] = a[j], a[h]
j = j - 1
return a
시작 조건 Q : 배열이 있다,
분기 조건 B :
Loop invariant P : 음수는 배열 왼쪽, 양수는 배열 오른쪽으로 이동한다. 그래서 k번째 반복문이 시작할 때는 k개의 숫자가 우리가 원하는 위치에 있다.
종료 조건 R : h를 기준으로, 왼쪽에는 음수, 오른쪽에는 양수가 있다.