2017-01-31 16:02:44 +01:00
|
|
|
|
|
|
|
|
from random import randint
|
|
|
|
|
|
|
|
|
|
n = 42
|
|
|
|
|
a = [0] * n
|
2017-10-09 13:32:25 +02:00
|
|
|
#@ assert len(a) == n
|
2017-01-31 16:02:44 +01:00
|
|
|
|
|
|
|
|
a[0] = randint(0, 100)
|
2017-10-09 13:32:25 +02:00
|
|
|
for i in range(1, n):
|
2017-01-31 16:02:44 +01:00
|
|
|
#@ invariant forall i1, i2. 0 <= i1 <= i2 < i -> a[i1] <= a[i2]
|
|
|
|
|
a[i] = a[i-1] + randint(0, 10)
|
|
|
|
|
|
|
|
|
|
#@ assert forall i1, i2. 0 <= i1 <= i2 < len(a) -> a[i1] <= a[i2]
|
|
|
|
|
|
|
|
|
|
print(a)
|
2017-01-31 18:47:28 +01:00
|
|
|
v = int(input("quelle valeur cherchez-vous : "))
|
2017-01-31 16:02:44 +01:00
|
|
|
|
|
|
|
|
l = 0
|
|
|
|
|
u = n-1
|
|
|
|
|
r = -1
|
2017-01-31 17:00:25 +01:00
|
|
|
while l <= u:
|
2017-01-31 16:02:44 +01:00
|
|
|
#@ invariant 0 <= l and u < n
|
2017-01-31 17:00:25 +01:00
|
|
|
#@ invariant r == -1
|
|
|
|
|
#@ invariant forall i. 0 <= i < n -> a[i] == v -> l <= i <= u
|
2017-01-31 22:08:15 +01:00
|
|
|
#@ variant u-l
|
2017-01-31 16:02:44 +01:00
|
|
|
m = (l + u) // 2
|
|
|
|
|
if a[m] < v:
|
|
|
|
|
l = m+1
|
|
|
|
|
elif a[m] > v:
|
|
|
|
|
u = m-1
|
|
|
|
|
else:
|
|
|
|
|
r = m
|
|
|
|
|
break
|
|
|
|
|
|
2017-01-31 18:57:40 +01:00
|
|
|
if r == -1:
|
2017-01-31 22:08:15 +01:00
|
|
|
#@ assert forall i. 0 <= i < n -> a[i] != v
|
2017-01-31 18:57:40 +01:00
|
|
|
print("valeur absente")
|
|
|
|
|
else:
|
2017-01-31 22:08:15 +01:00
|
|
|
#@ assert a[r] == v
|
2017-01-31 18:57:40 +01:00
|
|
|
print("position", r)
|
|
|
|
|
|