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

X Informatique MP 2009 — Énoncé 1/8
ÉCOLEPOLYTECHNIQUEFILIÈREMP
OPTIONINFORMATIQUE
CONCOURSD’ADMISSION2009
COMPOSITIOND’INFORMATIQUE
(Durée :4heures)
L’utilisation descalculatricesn’estpasautorisée pourcette épreuve.
Lelangagedeprogrammationchoisiparle candidatdoitêtrespécifié entêtedelacopie.
⋆ ⋆ ⋆
Cepolynôme est-il positif?
Danscertainscas, ladémonstrationassistée parordinateurdemandedevérifierdesinégalités
polynomialesdelaforme:
∀x∈[0,1],x6−42x5+120x4−140x3+75x2−15x+1≥0
Ceproblème étudieunetechniquebasée surlespolynômesdeBernstein permettantdedémontrer
ce styled’inégalitésautomatiquement.
LespartiesIetII traitentdenombresen précisionarbitraire,respectivementdesentiersrelatifs
etdesnombresdyadiques.LapartieIII traitedelistesquel’on peutmanipulerparlesdeuxbouts.
Enfin, lapartieIVintroduitlespolynômesdeBernsteinet traited’un moyen dedémontrerles
inégalités.
Lespartiespeuventêtretraitéesindépendamment.Maisattention,chaquepartieutilisedes
notationsetdesfonctionsintroduitesdanslespartiesprécédentes.L’énoncé utiliseàplusieurs
repriseslaformulation « ongarantiral’invariantPsurletypeτ».Onentend parcelaqueles
fonctionsquevousallez écrirepeuventsupposerquelapropriétéPestvraiepourleursarguments
detypeτetqu’encontrepartie ellesdoiventproduiredesrésultatsdetypeτvérifiantlapropriété
P.Si lalogiquedelafonctionconduitàidentifierdesargumentsdetypeτ«impossibles», le code
du candidatpeutéchouerenappelantlafonction(procédure enPascal)echouer quiprend une
(courte)chaîne explicative enargument.
I.Grandsentiers
Lesnombresquenousallonsmanipulernécessitentuneprécisionquidépasse celledesentiers
delamachine(typesint enCamletinteger enPascal).Nousallonsdonc commencerpardéfinir
unearithmétiquedeprécisionarbitraire.Onsedonnepourcelaunebasede calcul, parexemple
base =10000.Lavaleurdebase importepeuetonsupposeraseulementqu’elle estpaire,supérieure
ouégaleà 2 etqueson doublen’excèdepasleplusgrand entiermachine.Unentiernaturelde
précisionarbitraire estalorsreprésentéparlalistedeseschiffresen basebase, leschiffreslesmoins
significatifsétantentêtedeliste.Ainsi laliste[1;2;3]représentel’entier1+2×base +3×base2.
On définitletypenat 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,n’estpasnul.
On noteraquel’entier0est représentéparlalistevide.
Question1Définirunefonctioncons_nat quiprend enargumentun chiffrec(un entiermachine,
0≤c<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éfinirunefonctionadd_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éfinirunefonctioncmp_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éfinirunefonctionsous_nat quiprend enargumentsdeuxgrandsentiersn1etn2
etquicalculeladifférence n1−n2,ensupposantn1≥n2.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éfinirunefonctiondiv2_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,àsavoir1ou−1,etle champnat savaleurabsolue.
(* Caml *) type z = { signe: int; nat: nat };;
{ Pascal } type z = record signe: integer; nat: nat; end;
On noteraque0 admetdeuxreprésentations,ce quin’estpasgênantparlasuite.
Question6Définirunefonctionneg_z quicalculelanégation d’un grand entier relatif.
(* Caml *) neg_z : z -> z
{ Pascal } function neg_z(z : z) : z
Question7Définirunefonctionadd_z quicalculelasommededeuxgrandsentiersrelatifs.
(* Caml *) add_z : z -> z -> z
{ Pascal } function add_z(z1 : z ; z2 ; z) : z
Question8Définirunefonctionmul_puiss2_z quiprend enargumentsun entiermachine
p(p≥0),un grand entier relatifz,etquirenvoielegrand entier relatif2pz.Onse contentera
d’unesolutionsimple,sansviserparticulièrementl’efficacité.
(* Caml *) mul_puiss2_z : int -> z -> z
{ Pascal } function mul_puiss2_z(p : integer; z : z) : z
Question9Définirunefonctiondecomp_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,b∈Z.
On noteDl’ensembledesnombresdyadiques.On définitletypedya 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éfinirunefonctiondiv2_dya quidiviseun nombredyadiquepar2.
(* Caml *) div2_dya : dya -> dya
{ Pascal } function div2_dya(d : dya) : dya
Question11 Définirunefonctionadd_dya quicalculelasommededeuxnombresdyadiques.
(* Caml *) add_dya : dya -> dya -> dya
{ Pascal } function add_dya(d1 : dya ; d2 ; dya) : dya
Question12 Définirunefonctionsous_dya quicalculeladiffé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,c’est-à-dired’ajouteretdesupprimerdesélémentsà
gauche commeàdroite,etégalementde calculerefficacementl’imagemiroird’unetelleliste,c’est-
à-direlalistehxn;. . . ;x2;x1i.Lanotion usuelledelisteseprêtantmalàdetellesopérations(seule
lamanipulation del’extrémitégauchedelaliste estaisée), l’objectifde cettepartie estderéaliser
unestructurededonnéesraisonnablementefficace pour représenterunetelle«listeàdeuxbouts».
Pouréviterlesconfusions,nousutiliseronsdorénavantletermede«LDB» pourdésignerunelisteà
deuxbouts,etnouscontinueronsd’utiliserleterme«liste» pourdésignerunelisteusuelle(letype
list deCamlou uneliste chaînée traditionnelledePascal).
L’idée estd’utilisernon 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éfinitletypeldb 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èrec≥2etonimposesurletypeldb 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éfinirunefonctionldb_est_vide quidéterminesiuneLDBestvide.
(* Caml *) ldb_est_vide : ldb -> bool
{ Pascal } function ldb_est_vide(l : ldb) : boolean
Question14 Définirunefonctionpremier_g quirenvoiel’élémentleplusà gauched’uneLDB,
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éfinirunefonctioninverse_ldb qui inversel’ordredesélémentsd’uneLDB, i.e.
tellequeinverse_ldb hx1;x2;...;xni=hxn;...;x2;x1i.
(* Caml *) inverse_ldb : ldb -> ldb
{ Pascal } function inverse_ldb(l : ldb) : ldb
Question16 Définirunefonctioninvariant_ldb quivérifiesiuneLDBsatisfaitbienl’invariant
(2)etlerétablitsice n’estpasle cas.Plusprécisément, lafonctioninvariant_ldb renvoieson
argumentinchangélorsqu’il vérifiel’invariantet,dansle cascontraire,renvoieuneLDBdemême
contenu vérifiantl’invariant.Attention,dansce derniercas,on demandeun coûtdel’ordredela
tailledelaLDB. Indication:pouruneLDBcontenantℓéléments, larépartitionquirangeles⌊ℓ/2⌋
premiersélémentsdanslalistegsatisfait (2).Enfinlescandidatspourrontutiliser,sanslesdéfinir,
5
Téléchargé gratuitement sur www.Doc-Solus.fr .
1 / 8 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!