info
info
info
INFORMATIQUE
Préliminaires :
Le sujet traite du problème du monnayeur : comment rendre la monnaie en utilisant le
plus petit nombre possible de pièces ? Les deux premières parties mettent en place le for-
malisme et les outils qui serviront pour la suite. On étudiera dans la partie III
« l’algorithme glouton ». La dernière partie présente un algorithme permettant de décider
si l’algorithme glouton est optimal pour un système de pièces donné. Cette dernière partie
utilise les résultats établis dans les parties précédentes. Il est rappelé que cette épreuve est
une épreuve d’informatique, et que l’absence de programmes sera donc sanctionnée comme
il se doit.
Les algorithmes demandés seront décrits en français ; les programmes seront rédigés en
langage Caml ou en langage Pascal. Les candidats indiqueront impérativement au
tout début de leur copie le langage de programmation qu’ils ont choisi d’utiliser.
Une approche modulaire est vivement conseillée, comme l’a indiqué René Descartes,
il convient « de diviser chacune des difficultés que j’examinerais en autant de parcelles
qu’il se pourrait, et qu’il serait requis pour les mieux résoudre ». Lorsque les candidats
choisiront d’écrire une fonction annexe non demandée, il leur est demandé avec insis-
tance d’expliquer avant les spécifications de cette fonction.
Certaines questions ou remarques sont réservées soit aux candidats ayant choisi le lan-
gage Caml, soit à ceux ayant choisi le langage Pascal. Dans ce cas, la question ou remar-
que est annoncée par un encadré, et se termine par un trait de séparation pointillé ou un
nouvel encadré.
Pour les questions de complexité, on demande d’évaluer les coûts globalement en terme
d’opérations élémentaires telles que des affectations, des opérations arithmétiques, compa-
raisons, tests... En particulier, on ne s’attachera pas à des considérations concernant la
taille des données.
Notations :
• Lorsque E est un ensemble fini, E désigne son cardinal.
• Lorsque x ∈ IR , x désigne la partie entière inférieure de x , et x sa partie
entière supérieure : ce sont les uniques entiers relatifs vérifiant
x ≤ x < x + 1 et x – 1 < x ≤ x .
• si p, q ∈ ZZ avec p ≤ q , [[ p, q]] désigne l’ensemble des entiers relatifs compris
entre p et q : [[ p, q]] = [ p, q ] ∩ ZZ .
• Si m ∈ IN∗ = IN \ { 0 } , IR
m
est muni de sa structure euclidienne canonique en
m
∑ ui vi .
m
posant, pour u, v ∈ IR : u⋅v =
i=1
Filière MP
Formalisation du problème :
Soit c = ( c i ) 1 ≤ i ≤ m un m -uplet d’entiers vérifiant c 1 > c 2 > … > c m = 1 .
Nous utiliserons le terme système pour désigner un tel m -uplet. Les c i sont les
valeurs faciales des pièces en service. Par exemple, le système utilisé en zone Euro
est ( 200, 100, 50, 20, 10, 5, 2, 1 ) .
Pour chaque, i ∈ [[1, m]] , nous disposons d’une quantité illimitée de pièces de
valeur ( c i ) . Soit x un entier (le montant à rendre). Une représentation de x dans
le système c est un m -uplet k = ( k 1, …, k m ) vérifiant :
m
x = ∑ ki ci = k ⋅ c
i=1
Nous utiliserons des listes d’entiers pour représenter aussi bien un système (liste
de valeurs de pièces) qu’une représentation d’un montant dans ce système. Par
exemple, la liste [4;1;3] est une représentation de 30 dans le système ( 6, 3, 1 ) .
La question suivante est destinée aux candidats qui ont choisi le langage Caml
Nous utiliserons des listes d’entiers pour représenter aussi bien un système (liste
de valeurs de pièces), qu’une représentation d’un montant dans ce système. Le
type utilisé est défini comme suit :
type Liste = ^Cellule;
type Cellule =
record
contenu : integer;
suivant : Liste
end ;
La liste vide est représentée par la constante nil. Pour créer des listes, nous dis-
posons d’une procédure et d’une fonction dont les en-têtes sont :
procedure pCons(x:integer; var c:Liste);
function fCons(x:integer; c:liste):Liste;
spécifiées comme suit : pCons(x,c) ajoute en tête de liste c une cellule dont le
champ contenu vaut x. fCons(x,c) rend une liste dont la première
cellule contient x dans son champ contenu, et dont le champ suivant vaut c.
Par exemple, le programme suivant construit les listes L 1 = ( 5, 2, 1 ) , L 2 = ( 5, 7, 1 )
et L 3 = ( 7, 5, 2 ) dont il sera question dans la suite .
var L1,L2,L3:Liste;
begin
L1:=nil; pCons(1,L1); pCons(2,L1) ; pCons(5,L1);
L2:=fCons(5,fCons(7,fCons(1,nil)));
L3:=fCons(7,fCons(5,fCons(2,nil)));
end;
La question suivante est destinée aux candidats qui ont choisi le langage Pascal.
II.E - Soit x > 1 ; notons s le plus petit indice i tel que c i ≤ x . Justifier l’égalité
M ( x) = 1 + min M ( x – c i) .
s≤i≤m
La question suivante est destinée aux candidats qui ont choisi le langage Caml.
La question suivante est destinée aux candidats qui ont choisi le langage Pascal.
La question suivante est destinée aux candidats qui ont choisi le langage Caml.
La question suivante est destinée aux candidats qui ont choisi le langage Pascal.
La question suivante est destinée aux candidats qui ont choisi le langage Caml.
La question suivante est destinée aux candidats qui ont choisi le langage Pascal.