CS1950Y Lecture #5 Code, Part 2
2/1/2019
// Mixing and matching languages; just be sure you know which you're using
function method sumzeroton_math(n: int): int
requires n >= 0
{
(n * (n+1)) / 2
}
method sumzeroton(n: int) returns (r: int)
requires n >= 1
ensures r == sumzeroton_math(n)
{
r := 0;
var i := 1;
while(i <= n)
decreases n-i
// invariant r == sumzeroton_math(n) // BAD INVAR
//invariant r == sumzeroton_math(i)// BAD INVAR (better)
invariant r == sumzeroton_math(i-1)
//invariant r + i == sumzeroton_math(i)
invariant 1 <= i <= n+1
{
r := r + i;
i := i + 1;
}
}
method Main() {
var i := 1;
while(i <= 10)
decreases 10-i
{
var v := sumzeroton(i);
print v," ",sumzeroton_math(i),"\n";
i := i + 1;
}
}