Tom Kelliher, CS23
Feb. 12, 1997
Determine pre- and post- conditions and loop invariants for the following:
Note: I assume that you'll be fine with the pre- and post-conditions. I'll just give the loop invariants here.
int fibSum(int n)
{
int fib1 = 0; // First number in Fibonacci sequence.
int fib2 = 1; // Second number in Fib. sequence.
int fib3;
int i;
int sum = 1;
for (i = 2; i < n; ++i)
{
fib3 = fib2 + fib 1; // Generate next number in sequence.
fib1 = fib2; // "Move up" one sequence number.
fib2 = fib3;
sum += fib3;
}
return sum;
}
The invariant:
sum is the sum of the first i members of the Fibonacci sequence.Upon exit from the loop, sum is the sum of the first n elements of the Fibonacci sequence.
int sumFive(int array[], int n)
{ int count; // # of positive elements found
int i; // loop counter
int sum // sum of positive elements
for (count = i = sum = 0; i < n && count < 5; i++)
if (array[i] > 0)
{
count++;
sum += array[i];
}
if (count == 5)
return sum;
else
return -1; // Return garbage value if we can't find five
// positive values.
}
The invariant:
sum is the sum of the first count positive values in array.
int binSearch(int data[], int n, int item)
{
int first = 0;
int last = n - 1;
int mid
while (first < last)
{
mid = (first + last) / 2;
if (data[mid] == item)
return mid;
else if (data[mid] < item)
first = mid + 1;
else
last = mid - 1;
}
return -1;
}
The invariant:
If item is in data then:
.