finish Frama-C homework
This commit is contained in:
parent
97a81f159a
commit
0bbf6ffde1
8 changed files with 142 additions and 24 deletions
31
content/conception_formelle/99-DM_framac/code/test.c
Normal file
31
content/conception_formelle/99-DM_framac/code/test.c
Normal file
|
@ -0,0 +1,31 @@
|
|||
#include <limits.h>
|
||||
#include "abs.h"
|
||||
/*@
|
||||
requires 0 < n < INT_MAX;
|
||||
requires \valid_read(tab+(0..n-1));
|
||||
requires \forall integer a,b; 0 <= a < b < n ==> tab[a] - tab[b] <= INT_MAX;
|
||||
ensures \forall integer a,b; 0 <= a < b < n ==> \result >= abs(tab[a]-tab[b]);
|
||||
*/
|
||||
int max_dist ( int *tab, int n)
|
||||
{
|
||||
int max = tab[0];
|
||||
int min = tab[0];
|
||||
unsigned int i = 1;
|
||||
/*@
|
||||
loop assigns i, max, min;
|
||||
loop invariant I1: \at(i, LoopEntry) <= i <= n;
|
||||
loop invariant I2: min <= max;
|
||||
loop invariant I3: \forall integer j; (\at(i, LoopEntry) <= j < i ==> max >= tab[j] >= min);
|
||||
loop variant n - i;
|
||||
*/
|
||||
|
||||
while ( i < n)
|
||||
{
|
||||
if ( tab[i] > max) max = tab[i];
|
||||
if ( tab[i] < min) min = tab[i];
|
||||
i++;
|
||||
}
|
||||
//@ assert INT_MIN <= max <= INT_MAX;
|
||||
//@ assert INT_MIN <= min <= INT_MAX;
|
||||
return max - min;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue