package sv_esc;
public class LoopExercises {
/*@ normal_behavior
@ requires x != null;
@ requires x.length >= 1;
@ ensures \result == (\forall int k; 0<k && k<x.length; x[k-1] <= x[k]);
@*/
boolean isOrdered(int[] x) {
boolean result = true;
int i = 1;
//@ loop_invariant 1 <= i && i <= x.length;
//@ loop_invariant result == (\forall int j; 1 <= j && j < i; x[j-1] <= x[j]);
//@ decreasing x.length - i;
while (result && i < x.length) {
result = x[i-1] <= x[i];
i++;
}
return result;
}
/*@ normal_behavior
@ requires x >= 0;
@ ensures \result == x*(x+1)/2;
@*/
public int gauss(int x) {
int result = 0;
int i = 1;
//@ assume i*(i+1)/2 == ((i-1)*i/2) + i;
//@ loop_invariant 1 <= i && i <= x + 1;
//@ loop_invariant i*(i+1)/2 == ((i-1)*i/2) + i;
//@ loop_invariant result == (i-1)*i/2;
//@ decreasing (x - i);
while (i <= x) {
result += i;
i++;
//@ assume i*(i+1)/2 == ((i-1)*i/2) + i;
}
return result;
}
/*@ normal_behavior
@ requires x != null;
@ ensures (\forall int i; 0 <= i && i < x.length; x[i] <= \result);
*/
//@ requires x.length > 0;
public int max(int [] x){
int max = x[0];
int i = 1;
//@ loop_invariant 1 <= i && i <= x.length;
//@ loop_invariant (\forall int j; 0 <= j && j < i; x[j] <= max);
//@ decreasing x.length - i;
while (i < x.length) {
if (x[i] > max) {
max = x[i];
};
i++;
}
return max;
}
}