1/8 COMPOSITION D`INFORMATIQUE Ce polynôme est

X Informatique MP 2009 — Énoncé 1/8
ÉCOLEPOLYTECHNIQUEFILIÈREMP
OPTIONINFORMATIQUE
CONCOURSDADMISSION2009
COMPOSITIONDINFORMATIQUE
(Durée :4heures)
Lutilisation descalculatricesnestpasautorisée pourcette épreuve.
Lelangagedeprogrammationchoisiparle candidatdoitêtrespécié entêtedelacopie.
⋆ ⋆
Cepolynôme est-il positif?
Danscertainscas, ladémonstrationassistée parordinateurdemandedevérierdesinégalités
polynomialesdelaforme:
x[0,1],x642x5+120x4140x3+75x215x+10
Ceproblème étudieunetechniquebasée surlespolynômesdeBernstein permettantdedémontrer
ce styled’inégalitésautomatiquement.
LespartiesIetII traitentdenombresen précisionarbitraire,respectivementdesentiersrelatifs
etdesnombresdyadiques.LapartieIII traitedelistesquel’on peutmanipulerparlesdeuxbouts.
Enn, lapartieIVintroduitlespolynômesdeBernsteinet traitedun moyen dedémontrerles
inégalités.
Lespartiespeuventêtretraitéesindépendamment.Maisattention,chaquepartieutilisedes
notationsetdesfonctionsintroduitesdanslespartiesprécédentes.Lénonutiliseàplusieurs
repriseslaformulation « ongarantiral’invariantPsurletypeτ».Onentend parcelaqueles
fonctionsquevousallez écrirepeuventsupposerquelapropriétéPestvraiepourleursarguments
detypeτetquencontrepartie ellesdoiventproduiredesrésultatsdetypeτvériantlapropriété
P.Si lalogiquedelafonctionconduitàidentierdesargumentsdetypeτ«impossibles», le code
du candidatpeutéchouerenappelantlafonction(produre enPascal)echouer quiprend une
(courte)chaîne explicative enargument.
I.Grandsentiers
Lesnombresquenousallonsmanipulernécessitentuneprécisionquidépasse celledesentiers
delamachine(typesint enCamletinteger enPascal).Nousallonsdonc commencerpardénir
unearithmétiquedeprécisionarbitraire.Onsedonnepourcelaunebasede calcul, parexemple
base =10000.Lavaleurdebase importepeuetonsupposeraseulementquelle estpaire,supérieure
ouégaleà 2 etqueson doublenexdepasleplusgrand entiermachine.Unentiernaturelde
précisionarbitraire estalorsreprésentéparlalistedeseschiresen basebase, leschireslesmoins
signicatifsétantentêtedeliste.Ainsi laliste[1;2;3]représentel’entier1+2×base +3×base2.
On dénitletypenat suivantpourdetelsentiers:
Téléchargé gratuitement sur www.Doc-Solus.fr .
X Informatique MP 2009 — Énoncé 2/8
(* Caml *) { Pascal }
let base = ... ; ;
type nat == int list ; ;
const base : integer = ... ;
type nat = ˆcellule ; cellule = record
valeur : integer ; suite : nat ; end ;
Danslasuite,ongarantiral’invariantsuivantsurletypenat :
toutélémentdelaliste estcomprisentre0etbase 1,ausenslarge;
ledernierélémentdelaliste, lorsqu’il existe,nestpasnul.
On noteraquel’entier0est représentéparlalistevide.
Question1Dénirunefonctioncons_nat quiprend enargumentun chirec(un entiermachine,
0c<base)etun grand entiern,etquirenvoielegrand entierc+base×n.Lafonctioncons_nat
peutaiderà garantirl’invariantdu typenat.
(* Caml *) cons_nat : int -> nat -> nat
{ Pascal } function cons_nat(c : integer ; n : nat) : nat
Question2Dénirunefonctionadd_nat quicalculelasommededeuxgrandsentiers.Indica-
tion:on pourracommencerparécrireunefonction prenantégalementuneretenue enargumentet
appliquerl’algorithmetraditionnelenseignéàl’écoleprimaire.
(* Caml *) add_nat : nat -> nat -> nat
{ Pascal } function add_nat(n1 : nat ; n2 : nat) : nat
Question3Dénirunefonctioncmp_nat quiprend enargumentsdeuxgrandsentiersn1etn2,
etquirenvoieun entiermachinevalant,1sin1<n2,1sin1>n2,et0sin1=n2.
(* Caml *) cmp_nat : nat -> nat -> int
{ Pascal } function cmp_nat(n1 : nat ; n2 : nat) : integer
Question4Dénirunefonctionsous_nat quiprend enargumentsdeuxgrandsentiersn1etn2
etquicalculeladiérence n1n2,ensupposantn1n2.Indication:commepourl’addition,on
pourracommencerparécrireunefonction prenantégalementuneretenue enargument.
(* Caml *) sous_nat : nat -> nat -> nat
{ Pascal } function sous_nat(n1 : nat ; n2 : nat) : nat
Question5Dénirunefonctiondiv2_nat quiprend enargumentun grand entiernetquicalcule
lequotientetlerestedeladivisioneuclidiennedenpar2.Lequotientestun grand entieretle
resteun entiermachinevalant0 ou1.Onrappellequelaconstantebase estpaire.
(* Caml *) div2_nat : nat -> nat * int
{ Pascal } procedure div2_nat(n : nat ; var q : nat ; var r : integer)
Téléchargé gratuitement sur www.Doc-Solus.fr .
X Informatique MP 2009 — Énoncé 3/8
Àpartirde cesgrandsentiersnaturels,onvamaintenantconstruiredegrandsentiersrelatifs.
Pourcela,onintroduitletype enregistrementzsuivant,oùle champsigne contientlesignede
l’entier relatif,àsavoir1ou1,etle champnat savaleurabsolue.
(* Caml *) type z = { signe: int; nat: nat };;
{ Pascal } type z = record signe: integer; nat: nat; end;
On noteraque0 admetdeuxreprésentations,ce quinestpasgênantparlasuite.
Question6Dénirunefonctionneg_z quicalculelanégation dun grand entier relatif.
(* Caml *) neg_z : z -> z
{ Pascal } function neg_z(z : z) : z
Question7Dénirunefonctionadd_z quicalculelasommededeuxgrandsentiersrelatifs.
(* Caml *) add_z : z -> z -> z
{ Pascal } function add_z(z1 : z ; z2 ; z) : z
Question8Dénirunefonctionmul_puiss2_z quiprend enargumentsun entiermachine
p(p0),un grand entier relatifz,etquirenvoielegrand entier relatif2pz.Onse contentera
dunesolutionsimple,sansviserparticulièrementl’ecacité.
(* Caml *) mul_puiss2_z : int -> z -> z
{ Pascal } function mul_puiss2_z(p : integer; z : z) : z
Question9Dénirunefonctiondecomp_puiss2_z quiprend enargumentun grand entier relatif
znon nul, etquirenvoieun grand entier relatifuimpairetun entiermachineptelsquez=2pu.
Cettefonctioncalculedonclaplusgrandepuissance de2quidivisezet renvoieladécomposition
correspondante.Comme ci-dessus,onviseralasimplicité etonsupposeraquezest telquepest
bienreprésentableparun entiermachine.
(* Caml *) decomp_puiss2_z : z -> z * int
{ Pascal } procedure decomp_puiss2_z(z : z ; var u : z ; var p : integer)
II.Nombresdyadiques
Un nombredyadique estun nombrerationnelquipeutsécriresouslaforme
a×2bavec a,bZ.
On noteDl’ensembledesnombresdyadiques.On dénitletypedya suivantpour représenterles
nombresdyadiques:
3
Téléchargé gratuitement sur www.Doc-Solus.fr .
X Informatique MP 2009 — Énoncé 4/8
(* Caml *) { Pascal }
type dya = { m : z ; e : int } ; ; type dya = record m : z ; e : integer ;
end ;
Sidestunevaleurdu typedya,onl’interprètedonc commelenombrerationneld.m×2d.e,oùd.m
estparfoisappelémantisse,etd.eexposant.
Ongarantiral’invariantsuivantsurletypedya : lavaleurdu champmestsoitnulle,soitimpaire.
Onsupposeraparailleursquelacapacitédesentiersmachinesneserajamaisdépassée dansle calcul
desexposants.
Question10 Dénirunefonctiondiv2_dya quidiviseun nombredyadiquepar2.
(* Caml *) div2_dya : dya -> dya
{ Pascal } function div2_dya(d : dya) : dya
Question11 Dénirunefonctionadd_dya quicalculelasommededeuxnombresdyadiques.
(* Caml *) add_dya : dya -> dya -> dya
{ Pascal } function add_dya(d1 : dya ; d2 ; dya) : dya
Question12 Dénirunefonctionsous_dya quicalculeladiérence dedeuxnombresdyadiques.
(* Caml *) sous_dya : dya -> dya -> dya
{ Pascal } function sous_dya(d1 : dya ; d2 ; dya) : dya
III.Listesàdeuxbouts
Onconsidèremaintenantdeslistesdenombresdyadiques.Siunetelleliste contientlesnéléments
x1,x2,...,xn,danscetordre,onlanotehx1;x2;...;xni.DanslapartieIV,nousauronsbesoin de
manipulerdetelleslistesauxdeuxextrémités,cest-à-diredajouteretdesupprimerdesélémentsà
gauche commeàdroite,etégalementde calculerecacementl’imagemiroirdunetelleliste,cest-
à-direlalistehxn;. . . ;x2;x1i.Lanotion usuelledelisteseprêtantmalàdetellesopérations(seule
lamanipulation del’extrémitégauchedelaliste estaisée), l’objectifde cettepartie estderéaliser
unestructurededonnéesraisonnablementecace pour représenterunetelle«listeàdeuxbouts».
Pouréviterlesconfusions,nousutiliseronsdorénavantletermede«LDB» pourdésignerunelisteà
deuxbouts,etnouscontinueronsdutiliserleterme«liste» pourdésignerunelisteusuelle(letype
list deCamlou uneliste chaînée traditionnelledePascal).
L’idée estdutilisernon pasunelistemaisdeuxpour représenteruneLDB, lapremièreliste
représentantlapartiegauchedelaLDBetlasecondelistesapartiedroite.Ainsi l’ensembledes
deuxlistesg=[1;2]etd=[5;4;3]représenteralaLDBh1;2;3;4;5i.Lalistegcontientlespremiers
élémentsdelaLDB, danslebonordre,etlatêtede cetteliste coïncidedoncavec l’extrémitégauche
Téléchargé gratuitement sur www.Doc-Solus.fr .
X Informatique MP 2009 — Énoncé 5/8
delaLDB;symétriquement, lalistedcontientlesderniersélémentsdelaLDB, enordreinverse,
etlatêtede cetteliste coïncidedoncavec l’extrémitédroitedelaLDB.
On dénitletypeldb suivantpour représenterlesLDB:
(* Caml *) {Pascal }
type ldb = {
lg : int ; g : dya list ;
ld : int ; d : dya list } ; ;
type liste_dya = ˆcell_ld ; cell_ld = record
dya : dya ; suite_ld : liste_dya ; end ;
type ldb = record
lg : integer ; g : liste_dya ;
ld : integer ; d : liste_dya ; end ;
Onsedonneune constante entièrec2etonimposesurletypeldb lesdeuxinvariants suivants:
Le champlg contientlalongueurdelalisteg,etle champld celledelalisted.(1)
lg c×ld +1etld c×lg +1(2)
Touteslesquestionsde cettepartiegarantirontlesinvariantsausensprécisédansl’introduction du
problème, laquestion16 étantun peu particulière.
Question13 Dénirunefonctionldb_est_vide quidéterminesiuneLDBestvide.
(* Caml *) ldb_est_vide : ldb -> bool
{ Pascal } function ldb_est_vide(l : ldb) : boolean
Question14 Dénirunefonctionpremier_g quirenvoiel’élémentleplusà gaucheduneLDB,
i.e.tellequepremier_g hx1;x2;...;xni=x1.OnsupposeraquelaLDBcontientaumoinsun
élément.
(* Caml *) premier_g : ldb -> dya
{ Pascal } function premier_g(l : ldb) : dya
Question15 Dénirunefonctioninverse_ldb qui inversel’ordredesélémentsduneLDB, i.e.
tellequeinverse_ldb hx1;x2;...;xni=hxn;...;x2;x1i.
(* Caml *) inverse_ldb : ldb -> ldb
{ Pascal } function inverse_ldb(l : ldb) : ldb
Question16 Dénirunefonctioninvariant_ldb quivériesiuneLDBsatisfaitbienl’invariant
(2)etlerétablitsice nestpasle cas.Plusprécisément, lafonctioninvariant_ldb renvoieson
argumentinchangélorsqu’il vériel’invariantet,dansle cascontraire,renvoieuneLDBdemême
contenu vériantl’invariant.Attention,dansce derniercas,on demandeun coûtdel’ordredela
tailledelaLDB. Indication:pouruneLDBcontenantéléments, larépartitionquirangeles/2
premiersélémentsdanslalistegsatisfait (2).Ennlescandidatspourrontutiliser,sanslesdénir,
5
Téléchargé gratuitement sur www.Doc-Solus.fr .
1 / 8 100%

1/8 COMPOSITION D`INFORMATIQUE Ce polynôme est

La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !