Vous êtes sur la page 1sur 10

Informatique T4

Solutions au Test
du 18 octobre

Peter Van Roy


Département d’Ingénierie Informatique, UCL

pvr@info.ucl.ac.be

18/10/2004 P. Van Roy, InfoT4, S5 1


Conditions du test
 Le test a une durée d’une heure, à livre fermé
 Le test est sur 20 points, réparti sur quatre
questions
 Q1: 8 pts, Q2: 4 pts, Q3: 4 pts, Q4: 4 pts
 Le test est donné après deux séances du
cours et compte pour 1/3 du score final
 On prend le maximum entre (1/3 * test + 2/3 *
examen) et (examen)

18/10/2004 P. Van Roy, InfoT4, S5 2


Question 1 (8 points)
 Définissez la fonction récursive sc(n) qui prend un entier n et
qui rend un entier qui est la somme des chiffres de n. Par
exemple, sc(999)=27 et sc(10101)=3. Pour l’efficacité, votre
solution doit utiliser un accumulateur. Pour vous aider à
écrire la fonction qui utilise l’accumulateur, on vous conseille
d’utiliser l’invariant suivant:
sc(n) = sc(i) + a
Vous pouvez utiliser les fonctions div et mod dans votre
solution. Quelles sont les valeurs initiales de i et a?
Comment est-ce qu’on peut réduire i et augmenter a dans
l’appel récursif? La fonction qui utiliser l’accumulateur doit
être une fonction locale dans le corps de la fonction SC qui,
elle, ne prend qu’un seul argument N.

18/10/2004 P. Van Roy, InfoT4, S5 3


Réponse
declare
fun {SC N}
fun {SC2 I A}
if I==0 then A
else {SC2 (I div 10) (I mod 10)+A}
end
end
in
{SC2 N 0}
end

Valeurs initiales de I et A: N et 0
Calcul avec l’invariant:
sc(n) = sc(i) + a = sc(i div 10) + ((i mod 10) + a)
Le i devient (i div 10) et le a devient (i mod 10)+a
Quand i est 0, parce que sc(0)=0 alors le a donne le résultat final
18/10/2004 P. Van Roy, InfoT4, S5 4
Question 2 (4 points)
 Donnez une définition précise des concepts
“identificateur” et “identificateur libre”.
Donnez un exemple d’un petit fragment de
programme qui illustre ces deux concepts et
expliquez comment.

18/10/2004 P. Van Roy, InfoT4, S5 5


Réponse
 Identificateur = une chaine de caractères dans le
code source d’un programme qui fait référence
pendant l’exécution à une variable en mémoire
 Exemple: local X in X=2+2 end
 X est un identificateur dans ce fragment
 Identificateur libre = une occurrence d’un
identificateur dans un fragment de programme
donné qui n’est pas déclarée dans ce fragment
 Exemple: local X in X=Y+2 end
 Y est un identificateur libre dans ce fragment
 X n’est pas libre parce qu’il est déclaré dans ce fragment

18/10/2004 P. Van Roy, InfoT4, S5 6


Question 3 (4 points)
 Définissez la fonction OnesList qui prend une
liste d’entiers et qui rend le nombre de fois
que l’entier 1 apparaît dans la liste. Il n’est
pas nécessaire que votre définition utilise un
accumulateur.

18/10/2004 P. Van Roy, InfoT4, S5 7


Réponse
declare
fun {OnesList L}
if L==nil then 0
elseif L.1==1 then 1+{OnesList L.2}
else {OnesList L.2}
end
end

18/10/2004 P. Van Roy, InfoT4, S5 8


Question 4 (4 points)
 Le modèle déclaratif est caractérisé par une grande
restriction : les variables ne peuvent être affectées
qu’à une valeur. Cette restriction a de grandes
conséquences sur la manière d’écrire les
programmes dans ce modèle. Pour cette question,
expliquez l’avantage majeur de cette restriction. A
votre avis, est-ce qu’on puisse exploiter cet
avantage dans d’autres langages de programmation
tels que Java?

18/10/2004 P. Van Roy, InfoT4, S5 9


Réponse
 La conséquence majeure de cette restriction est qu’un programme ou une
partie de programme, une fois écrit, ne changera jamais son comportement.
Un programme ne se souvient pas de ses appels précédents.
 L’avantage majeur de cette propriété est dans le domaine du génie logiciel:
la maintenance du programme est grandement facilitée, parce qu’il ne faut
pas tenir compte de l’historique des appels des composants. Une fois écrit,
on peut “oublier” le composant. Il y a d’autres avantages, par exemple le
raisonnement sur l’exactitude du composant est facilité.
 L’avantage majeur peut être exploité dans n’import quel langage de
programmation, y compris le Java. Le style déclaratif de programmation
peut être plus ou moins soutenu par le langage (par exemple, par les
attributs “final” en Java), mais le programmeur est toujours libre de suivre ce
style pour en tenir les avantages, même si le langage n’offre pas de soutien
particulier. Par exemple, un serveur sans état (“stateless server”) peut être
écrit dans n’importe quel langage. Le propre du modèle déclaratif de ce
cours est que les programmes sont toujours déclaratifs. On voit donc
l’extrême limite du style déclaratif.
18/10/2004 P. Van Roy, InfoT4, S5 10