Académique Documents
Professionnel Documents
Culture Documents
Prolog Examen 2007 2008
Prolog Examen 2007 2008
en e Informatique 3e année
Langages de Programmation II
1 Résolution (6 points)
Soit
(+list,?list) le prédi
at déni de la façon suivante :
([℄,[℄).
([X℄,[X℄).
([X,X|R℄,L) :- ([X|R℄,L).
([X,Y|R℄,[X|L℄):- X \= Y, ([Y|R℄,L).
1
3 Nombres pseudo-aléatoires de von Neumann (6
points)
La méthode de von Neumann pour générer des nombres pseudo-aléatoires
onsiste, à partir d'un nombre donné, à l'élever au
arré et à extraire de
e
arré
les
hires les plus
entraux, puis à re
ommen
er (
ette méthode est en fait assez
mauvaise
ar elle bou
le souvent rapidement). Par exemple, si on
onsidère des
nombres de 4
hires et qu'on part de 1111, son
arré vaut 1234321, on en
extrait 3432, dont le
arré vaut 11778624, on en extrait 7786, et
.
É
rire un prédi
at pseudo_aléatoire_vn(+int,+int,?int) qui réussit si,
le premier paramètre étant le nombre initial de quatre
hires et le deuxième
étant le nombre d'itérations, le troisième est le nombre pseudo-aléatoire généré
par la méthode de von Neumann au bout du nombre d'itérations donné. Par
exemple, pseudo_aléatoire_vn(1111,2,N) renvoie YES N=7786. Il n'est pas
interdit d'é
rire des prédi
ats supplémentaires en
as de besoin!
On pourra utiliser le prédi
at prédéni number_
hars(+number,?list) qui
réussit si la liste
ontient les
ara
tères des
hires
omposant le nombre. Ce pré-
di
at peut également être utilisé en mode (-,+). Par exemple, number_
hars(123
,L) renvoie YES L=['1','2','3'℄ et number_
hars(N,['1','2','3'℄) ren-
voie YES N=123.
Anyone who
onsiders arithmeti
al methods of produ
ing random digits, is, of
, John Von Neumann (ainsi, si vous faites
orre
tement
ourse, in a state of sin
l'exer
i
e, vous aurez 6 points, mais vous irez en enfer).
2
4 Corre
tion
Exer
i
e 1 : Résolution
adja
ents(X,Y,[X,Y|_℄):- !.
adja
ents(X,Y,[Y,X|L℄):- !.
adja
ents(X,Y,[A,B|L℄):- adja
ents(X,Y,[B|L℄).
repete([℄,[℄).
repete([X|R℄,[X,X|L℄):- repete(R,L).
liste_e(X,1,[X℄).
liste_e(X,N,[X|R℄):- N>1, M is N-1, liste_e(X,M,R).
repete_n([℄,_,[℄).
repete_n([A|B℄,N,L):- liste_e(A,N,R),repete_n(B,N,S), append(R,S,L).
extrait4([A,B,C,D,E,F|_℄,[C,D,E,F℄).
pseudo_aléatoire_vn(N,0,N).