Automne 1998
Automne 1998
liste ::= Nil | Cons nat liste
Définissons les fonctions suivantes:
inc :: liste -> liste inc(Nil) = Nil inc(Cons x l) = Cons (x+1) inc(l) somme :: liste -> nat somme(Nil) = 0 somme(Cons x l) = x + somme(l) long :: liste -> nat long(Nil) = 0 long(Cons x l) = 1 + long(l) dupl :: liste -> liste dupl(Nil) = Nil dupl(Cons x l) = Cons x (Cons x dupl(l))
Prouvez les propriétés suivantes, pour n'importe quelle l de type liste:
Prouvez (par induction) les propriétés suivantes, pour tout entier n de type nat:


.
.
et f2(n) est
, alors
est
.
PROCEDURE sc( n: nat ) somme: nat
DEBUT
somme <- 0
TANTQUE n > 0 FAIRE
somme <- somme + (n MOD 10)
n <- n / 10 // Division entiere
FIN
RETOURNER somme
FIN
PROCEDURE sc_r( n: nat ): nat
DEBUT
SI n = 0 ALORS
RETOURNER 0
SINON
RETOURNER (n MOD 10) + sc_r(n / 10)
FIN
Algorithme fs( s: sequence{sequence{nat}} )
// PRE
// s != [],
// ALL( i: nat SUCH THAT i IN domain(s) :: en_ordre(s) )
r <- []
pq <- filePrioriteVide()
k <- length(s)
n <- SUM( i: nat SUCH THAT i IN domain(s) :: length(s[i]) )
POUR i <- 0 A k-1 FAIRE
pq.insertItem( s[i][0], i )
POUR i <- 1 A n FAIRE
j <- pq.removeMinElement()
r <- r || [ s[j][0] ]
s[j] <- s[j][1..length(s[j])-1]
SI s[j] != [] ALORS
pq.insertItem( s[j][0], j )
FIN
RETOURNER r
FIN
CONCEPT en_ordre( s: sequence{nat} ) VALUE( b: boolean )
WHERE b <=> ALL( i: nat SUCH THAT 0 <= i < lenght(s)-1 :: s[i] <= s[i+1] )
Supposons alors une classe Arbre partiellement définie comme suit:
public class Arbre implements SimpleTree {
private Noeud racine;
private int taille;
...
}
[] a) Écrivez (en Java) la méthode
replace(v, e) qui remplace l'élément associé à v
par e et qui retourne comme résultat l'ancien élément.
[] b) Écrivez (en Java) la méthode
isRoot permettant de déterminer, pour un noeud donné, s'il
s'agit de la racine ou non.
[] c) Écrivez (en Java) la méthode
positions permettant, pour l'arbre dans son ensemble, de
produire une Enumeration préfixe de toutes les
positions (noeuds) de l'arbre, y compris les noeuds externes. Vous
devez évidemment aussi définir la classe locale appropriée.