J-0
00m
00j
00h
00min
00s

Version interactive avec LaTeX compilé

E3A Option Informatique MP 2009

Notez ce sujet en cliquant sur l'étoile
0.0(0 votes)
Logo e3a
2025_08_29_e4c6b7c553c08add0cc9g

CONCOURS ENSAM - ESTP - ARCHIMEDE

Épreuve d'Informatique MP

Durée 3 h

Si, au cours de l'épreuve, un candidat repère ce qui lui semble être une erreur d'énoncé, d'une part il le signale au chef de salle, d'autre part il le signale sur sa copie et poursuit sa composition en indiquant les raisons des initiatives qu'il est amené à prendre.

L'usage de calculatrices est interdit.

Indiquer en tête de copie le langage de programmation, Caml ou Pascal, choisi pour l'ensemble du sujet.
Lorsqu'un programme est donné dans l'énoncé, une version en Caml et une version en Pascal sont fournies : ne considérer que celle écrite dans le langage que vous avez choisi. La présentation et la qualité de la rédaction de votre composition seront évaluées. La clarté et la concision des programmes rédigés seront également prises en compte.

1 Sommes d'entiers

Dans cet exercice, les arguments et des fonctions seront, au choix, considérés comme des tableaux ou des listes (contenant des entiers ou des couples d'entiers).
On considère des suite finies d'entiers naturels non nuls : . On s'intéresse au problème suivant : étant donné un entier , peut-on écrire :
ù
  1. On se place dans le cas où et et . Étudier le problème pour entre 10 et 14 .
  2. Écrire un programme prenant en argument et les éléments et renvoyant le booléen «vrai» si une telle décomposition existe et «faux» sinon.
  3. On ajoute la contrainte suivante : on se donne des entiers naturels non nuls et on impose d'avoir les inégalités suivantes : pour tout .
    (a) Écrire un programme prenant en argument et les couples et renvoyant le booléen «vrai» si une telle décomposition existe et «faux» sinon.
    (b) Écrire un programme prenant en argument et les couples et renvoyant le nombre de telles décompositions.

2 Autour de la racine carrée entière

On s'intéresse au problème suivant : étant donné un entier , on souhaite déterminer un entier positif de sorte que soit «proche» de . Nous étudierons différentes approches pour résoudre ce problème. On se donne les contraintes suivantes :
  1. On ne travaillera qu'avec des entiers relatifs;
  2. Les opérations arithmétiques autorisées sur les entiers sont :
    (a) l'addition de deux entiers et ;
    (b) la soustraction de deux entiers et ;
    (c) la multiplication de deux entiers et ;
    (d) la division euclidienne d'un entier positif par un entier strictement positif le reste de la division étant obtenu par et le quotient par en Caml et par a div en Pascal.
    Dans la suite, si et sont deux entiers avec , l'écriture désigne le quotient rationnel de par ; si est un réel, désigne la partie entière de et désigne le plafond de le plus petit entier supérieur ou égal à .

2.1 Algorithme naïf

Dans cette partie, étant donné un entier , on cherche à déterminer le plus grand entier tel que . Pour cela, on passe en revue les entiers jusqu'à trouver .
  1. Écrire une fonction isqrt_naif prenant en argument et renvoyant la valeur de en utilisant le principe décrit ci-dessus.
  2. Déterminer la complexité de votre programme.

2.2 Une méthode dichotomique

Dans cette partie, on reprend le problème de la partie précédente : étant donné un entier , on cherche à déterminer le plus grand entier tel que . Afin d'obtenir une méthode plus efficace, on considère les programmes suivants :
let isqrt n=
    let x=ref 1 in
        let y=ref n in
            while((!y)-(!x)>1) do
                let z=((!x)+(!y))/2 in
                    if }z*z>n then
                        y:=z
                    else
                        x:=z
            done;
    !x;;
Function isqrt(n: longint) : longint;
Var x,y,z : longint;
Begin
    x:=1;y:=n;
    While (y-x>1) Do
    begin
        z:=(x+y) div 2;
        if }\textrm{z}*\textrm{z}>\textrm{n}\mathrm{ then
            y:=z
        else
            x:=z
    end;
    isqrt:=x;
LEnd;
Si , on note et les valeurs des variables et à la fin de la -ième itération de la boucle while. On convient que et .
  1. Expliciter les exécutions du programme ci-dessus sur l'entier 15. (On donnera en particulier les valeurs successives des variables et .)
  2. Démontrer la terminaison du programme.
  3. Justifier la correction du programme.
  4. (a) Prouver l'inégalité suivante :
(b) En déduire une majoration de la complexité du programme.
5. Réécrire la fonction isqrt en utilisant de la récursivité.

2.3 Circuit logique

On se donne un entier dont le développement binaire est . Par exemple, l'entier 7 s'écrit 0111. Le développement binaire de l'entier s'écrit alors .
  1. Pour les deux questions suivantes, on veillera à donner un résultat le plus simple possible.
    (a) Donner une formule booléenne exprimant en fonction de et .
    (b) Donner une formule booléenne exprimant en fonction de et .
  2. On souhaite construire des circuits logiques implémentant ces deux fonctions. On dispose seulement de porte de type «ou» et de type «non» représentées dans la figure 1.
    (a) Proposer un circuit implémentant la fonction .
    (b) Proposer un circuit implémentant la fonction n'utilisant au plus que quatre portes de type «ou» et quatre portes de type «non».
Figure 1 - Portes «ou» et «non»

2.4 Une méthode Babylonienne

On se donne un entier et on considère la suite, définie par et, pour :
On admet que la suite ( ) est correctement définie et qu'elle converge vers l'unique entier le plus proche de . Par exemple, l'entier le plus proche de est 1 et l'entier le plus proche de est 3 .
  1. Écrire une fonction prenant supposé supérieur ou égal à 1 et calculant l'entier le plus proche de . On détaillera la manière dont est effectué le calcul des parties entières et des plafonds.
  2. Déterminer les valeurs de la suite ( ) lorsque vaut 13 et donner la valeur de l'unique entier le plus proche de .

3 Coefficients binomiaux

Dans cet exercice, on supposera que le type int permet de représenter des entiers arbitrairement grands.
On se donne deux entiers et . Le coefficient binomial associé à ces deux entiers est :
On a alors la formule de Pascal :
  1. Dans cette question, on n'utilisera ni liste, ni tableau et la seule opération arithmétique autorisée est l'addition; on n'effectuera donc aucune multiplication. Écrire une fonction récursive simple calculant le coefficient .
  2. On pose et on souhaite construire un tableau de longueur tel que si contient la valeur du coefficient .
    (a) Expliquer brièvement pourquoi il n'est pas possible d'utiliser la fonction de la question précédente.
    (b) Écrire un programme renvoyant le tableau convenablement rempli.
  3. Cette question est indépendante des questions précédentes. Il est demandé de ne pas utiliser de tableau et de ne pas calculer . Un théorème de Lucas assure que si et sont des entiers naturels, alors, en écrivant et en base 2 :
on a:
Écrire un programme prenant en argument deux entiers et supposés naturels et renvoyant le booléen «vrai» si est pair et le booléen «faux» sinon.

4 Minimisation d'automates

Dans cette partie, on considère l'alphabet . On rappelle les définitions suivantes:
  • un automate déterministe sur l'alphabet est un quadruplet où :
  • est un ensemble fini d'états
  • est une application appelée fonction de transition
  • est l'état initial et
  • est l'ensemble des états finals.
  • un automate sur l'alphabet est un quadruplet où :
  • est un ensemble fini d'états
  • est l'ensemble des transitions
  • est l'ensemble des états initiaux et
  • est l'ensemble des états finals.
Le terme «automate» désigne dans la suite un automate pouvant être non déterministe. Si est un automate, on note l'automate déterministe obtenu à partir de par l'algorithme habituel de déterminisation. Si est un automate, l'automate miroir de est l'automate défini par : ( ) où :
  • ;
  • est défini par : ;
  • et
  • .
Finalement, si désigne un automate et si est un état de , le langage reconnu par l'état est le langage reconnu par l'automate .
Dans la suite désigne l'automate suivant:
On pose et .
  1. Donner une expression rationnelle du langage reconnu par l'automate .
  2. (a) Représenter graphiquement l'automate .
    (b) Représenter graphiquement l'automate . (Indication : l'automate a quatre états.)
  3. Si est un langage, on définit le langage miroir de par :
(a) Si est un langage reconnaissable, montrer que est également reconnaissable.
(b) Prouver que si est un automate, alors l'automate est un automate déterministe qui reconnaît le même langage que l'automate .
4. (a) Démontrer que les états de l'automate reconnaissent des langages distincts.
(b) Déduire de ce qui précède qu'il n'existe aucun automate déterministe reconnaissant le même langage que et ayant strictement moins d'états que .
E3A Option Informatique MP 2009 - Version Web LaTeX | WikiPrépa | WikiPrépa