WikiPrépaLivrets

E3A Option Informatique MP 2018Sujet

Pas encore noté
Faisable en Sup
  • Décidabilité et problème de l'arrêt
  • Récursivité en Caml
  • Algorithmes de calcul du pgcd
  • Complexité algorithmique
  • Représentation de graphes par matrice d'adjacence
  • Requêtes SQL (sélection, jointure, agrégation)
  • Types algébriques et structures récursives en Caml
  • Logique propositionnelle et formes normales

Téléchargements

  • Corrigé : pas encore disponible
  • Rapport du jury : non disponible

Présentation du sujet

Informatique MP option info : décidabilité, algorithmes de pgcd, graphes, SQL et logique propositionnelle
Afficher ou masquer la section

L'épreuve comporte cinq exercices totalement indépendants. Le premier explore la fonction de terminaison en Python et démontre par un raisonnement diagonal qu'un détecteur universel d'arrêt ne peut exister. Le deuxième programme en Caml plusieurs variantes de l'algorithme du pgcd par soustractions successives, dont la méthode chinoise. Le troisième traite d'un graphe et de la vérification d'un chemin. Le quatrième porte sur des requêtes SQL sur une base de données de zoos. Le cinquième étudie en Caml les formules logiques positives et un algorithme de mise sous forme normale conjonctive.

  1. 1Exercice 1 (Python) : terminaison de fonctions et problème de l'arrêtAnalyser la terminaison de fonctions Python données puis démontrer, par un raisonnement diagonal, qu'aucune fonction arret ne peut décider en général si un calcul termine.
  2. 2Exercice 2 (Caml) : valuation, résidu et algorithmes de pgcdProgrammer en Caml le calcul du résidu d'un entier puis plusieurs versions de l'algorithme du pgcd par soustractions successives, dont la méthode chinoise, avec analyse de complexité.
  3. 3Exercice 3 (Caml) : graphesÉcrire la matrice d'adjacence d'un graphe donné et une fonction vérifiant si un chemin proposé est valide dans ce graphe.
  4. 4Exercice 4 (SQL) : base de données de zoosÉcrire des requêtes SQL portant sur deux tables liant zoos et animaux, avec filtres sur le sexe, l'espèce, le continent et le pays.
  5. 5Exercice 5 (Caml) : formules logiques positives et forme normale conjonctiveReprésenter des formules propositionnelles positives en Caml, écrire des fonctions de reconnaissance de disjonctions et de formes normales conjonctives, puis démontrer la terminaison d'un algorithme de normalisation.

L'épreuve en chiffres

Moyenne 11,17 / 20 · écart-type 3,6 · 493 présents · où vous situez-vous ?
Afficher ou masquer la section
Moyenne
11,17/ 20
Écart-type
3,6
Présents
493
moyenne 11,1705101520
Deux tiers des copies environ (moyenne ± écart-type)

Votre note sur 20 à ce sujet, en conditions de concours.

Source : document officiel du concours. Notes publiées par le concours (après harmonisation le cas échéant). Courbe : estimation par une loi normale.

Ces sujets peuvent vous intéresser

Pas encore de corrigé pour ce sujet : voici des sujets proches corrigés.

Lecture du sujet en ligne

L'énoncé complet, avec les formules et les figures, sans ouvrir le PDF.
Afficher ou masquer la section

CONCOURS ARTS ET MÉTIERS ParisTech - ESTP - POLYTECH

É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.

AVERTISSEMENT

L'épreuve est composée de 5 exercices, totalement indépendants. Le langage à utiliser pour un exercice est indiqué à côté du numéro de l'exercice.
Un candidat pourra toujours admettre le résultat des questions qu'il n'a pas faites pour faire les questions suivantes.
La présentation, la lisibilité, l'orthographe, la qualité de la rédaction, la clarté et la précision des raisonnements entreront pour une part importante dans l'appréciation des copies. En particulier, les résultats non justifiés ne seront pas pris en compte. Les candidats sont invités à encadrer les résultats de leurs calculs.

Exercice 1 (Python)

On dit qu'une fonction termine si elle renvoie une valeur ou si elle lève une exception (par exemple ZeroDivisionError). Une fonction peut terminer ou continuer à calculer à l'infini. Ainsi, la fonction fun1 (voir ci-dessous), pour un entier n , termine pour n inférieur ou égal à 10 (elle renvoie None) et ne termine pas pour n strictement plus grand que 10. En outre, cette fonction termine pour une chaîne de caractères n (en levant l'exception TypeError).
  1. Pour quelles valeurs de n dans ℤ la fonction fun2 termine-t-elle? Même question pour fun3.
def fun1 (n): def fun2 (n): def fun3 (n):
    while n != 10: if n % 2 == 0: S = 0
        n = n + 1 return 0 while n != 0 :
            else : S = S + n
                while True: n = n - 2
                    n = n + 1 return S
  1. Détailler l'exécution de fun3(10).
  2. Écrire en Python une fonction ForEver (n) qui ne termine jamais.
Le module dis permet, à partir du nom d'une fonction, de trouver quel est le bytecode Python qu'elle exécute, et d'analyser ce bytecode. On se demande quelles propriétés sur la fonction peuvent être déduites de cette analyse. Plus précisément, nous souhaitons répondre au problème suivant.

Problématique

Est-il possible d'écrire en Python une fonction arret, qui termine toujours, et telle que arret ( f, x ) renvoie True si le calcul de f(x) termine et False sinon?
4. Dans cette question, nous supposons qu'une telle fonction arret existe.
(a) Écrire en Python une fonction strange ( f, x ) qui termine si et seulement si le calcul de f(x) ne termine pas.
(b) Écrire en Python une fonction paradox (f) qui termine si et seulement si le calcul de f(f) ne termine pas.
5. Le calcul de paradox(paradox) termine-t-il ? Qu'en déduire quant à l'existence de arret?

Exercice 2 (Caml)

Tout entier naturel non nul n s'écrit de manière unique n = 2^v k avec v un entier naturel (qui peut valoir zéro) et k un entier naturel impair. Dans la suite de cet exercice, nous appelons valuation de n l'entier v et résidu de n l'entier k. Par convention, le résidu de zéro est zéro.
  1. Expliquer succintement comment, à partir de l'écriture en base deux de n ∈ ℕ^⋆, on peut lire la valuation et le résidu de n.
  2. L'entier 192 s'écrit en base deux 11000000 . Donner sa valuation et son résidu.
  3. Écrire en Caml une fonction residu : int -> int qui prend en argument un entier positif ou nul et renvoie son résidu.
Pour calculer le pgcd (plus grand commun diviseur) de deux entiers, nous pouvons utiliser l'algorithme des soustractions successives décrit ci-après.
1 Entrées : deux entiers naturels non nuls a et b
2 Tant que b est non nul :
3 Remplacer b par |a − b|.
4 Remplacer a par le minimum de a et de l'ancienne valeur de b.
5 Fin du "Tant que".
6 Renvoyer a
4. Écrire en Caml une fonction pgcd1 : int -> int -> int qui calcule le pgcd de deux entiers naturels non nuls en utilisant cet algorithme et pas un autre. Cette fonction ne doit pas être récursive ni faire appel à une ou des fonctions auxiliaires récursives.
5. Écrire en Caml une fonction récursive pgcd2 : int → int → int qui calcule le pgcd de deux entiers naturels non nuls en utilisant la méthode des soustractions successives.
6. Estimer (en justifiant) la complexité de cet algorithme en fonction de n = max(a, b).
La méthode chinoise, mentionnée dans Les Neuf Chapitres sur l'art mathématique écrit aux débuts de la dynastie Han, consiste à remplacer la ligne 3 par la ligne suivante :
3 Remplacer b par le résidu de |a − b|.
On admet que cette méthode permet de calculer le pgcd de a et b si a ou b est impair. Ce résultat peut notamment être utilisé pour répondre à la question suivante.
7. Que calcule la méthode chinoise lorsque a et b sont pairs ? Le démontrer laconiquement.
Indication : On peut distinguer le cas a = b du cas a ≠ b.
8. Estimer (en justifiant) la complexité de cette méthode en fonction de n = max(a, b), dans le cas où a et b sont tous les deux impairs.
9. En déduire une fonction pgcd_chinois : int -> int -> int qui calcule le pgcd de deux entiers (pairs ou impairs) avec une complexité du même ordre de grandeur que la complexité calculée la question précédente. Justifier la complexité de pgcd_chinois.

Exercice 3 (Caml)

  1. Écrire la matrice d'adjacence du graphe ci-dessus.
  2. Écrire en Caml une fonction chemin : int vect vect -> int list -> bool qui prend en entrée la matrice d'adjacence d'un graphe et un chemin (une liste de sommets du graphe) et qui vérifie si ce chemin est possible dans le graphe. Par exemple, sur le graphe ci-dessus, avec le chemin [ 2; 1; 0; 4 ] la fonction chemin doit renvoyer false car les sommets 1 et 0 ne sont pas connectés. Avec le chemin [ 1; 2; 3 ] la fonction chemin doit renvoyer true car les sommets 1 et 2 sont connectés, ainsi que les sommets 2 et 3.

Exercice 4 (SQL)

Nous nous intéressons à une base de données des zoos qui contient deux tables. La première table, zoos, a quatre colonnes dont id, un identifiant unique pour chaque zoo. Quelques lignes sont données ci-après.
id nom pays continent
FR42 Zoo de La Flèche France Europe
RU12 Parc zoologique de Novossibirsk Russie Asie
RU5 Parc zoologique de Saint-Pétersbourg Russie Europe
⋮ ⋮ ⋮ ⋮
La seconde table, animaux, a 6 colonnes, notamment un identifiant unique pour chaque animal (id) et l'identifiant du zoo qui héberge l'animal (zoo).
id nom espece sexe naissance zoo
ke860 Kaiko Chameau F 2013 FR42
ic431 Jeffrey Python royal M 2016 RU12
gz599 Antaeus Annaconda vert M 2016 RU12
⋮ ⋮ ⋮ ⋮ ⋮ ⋮
Les questions suivantes demandent d'écrire des requêtes SQL. À chaque fois quelques lignes de la table attendue sont données en exemple.
  1. Écrire une requête SQL renvoyant la table des chamelles (chameaux femelles).
id nom naissance zoo
ke860 Kaiko 2013 FR42
md375 Aimy 2012 CG01
⋮ ⋮ ⋮ ⋮
  1. Écrire une requête SQL renvoyant la table des bonobos mâles vivant en Asie.
id nom naissance zoo
yv919 Finn 2008 CN33
qv139 Proteus 2013 KR08
⋮ ⋮ ⋮ ⋮
  1. Écrire une requête renvoyant la liste des pays ayant des zoos sur plusieurs continents.
pays
Russie
⋮

Exercice 5 (Caml)

Une formule positive est une formule propositionnelle n'utilisant comme connecteurs logiques que "ou" et "et". Ces connecteurs sont notés, respectivement, ∨ et ∧. On représente les formules positives en Caml par le type suivant :
type fp = OU of fp∗fp|ET of fp∗fp|VAR of string ;;
  1. Considérons la formule " X ∨ (Y ∧ Z) " et notons-la φ_0.
    (a) Dessiner l'arbre correspondant à φ_0.
    (b) Écrire φ_0 en Caml en utilisant le type fp.
On définit par récurrence les disjonctions de variables propositionnelles (DVP) ainsi :
  • Si X est une variable propositionnelle, alors X est une DVP.
  • Si φ et ψ sont des DVP alors φ ∨ ψ est aussi une DVP.
  1. Écrire en Caml une fonction dvp : fp -> bool prenant en argument une formule positive f et renvoyant true si et seulement si f est une DVP.
On appelle forme normale conjonctive positive (FNCP) une conjonction de DVP. Ainsi (X ∨ U) ∧ (X ∨ Y ∨ Z) ∧ T est une forme normale conjonctive positive, mais pas (X ∧ U) ∨ (X ∧ (Y ∨ Z)). Plus précisément, on définit les FNCP par récurrence comme suit :
  • Si φ est une DVP alors φ est une FNCP.
  • Si φ et ψ sont des FNCP, alors φ ∧ ψ aussi.
  1. Écrire en Caml une fonction fncp de type fp -> bool prenant en argument une formule positive f et renvoyant true si et seulement si f est une FNCP.
On définit la fonction norm qui, étant donné une formule positive f, renvoie une FNCP logiquement équivalente à f.
let rec norm f = match f with 0
    VAR _ -> f
    1
    | OU ET (norm a, norm b) -> E)
    | | | | | | | | | | (a,c) ) ) , norm (OU }
    | OU (a,b) -> let c = OU( norm a, norm b) in 5
        if f=c
        else norm c;; 8
  1. Expliquer brièvement pourquoi si f est une FNCP alors norm f termine et renvoie f.
  2. Montrer que si norm f termine, alors elle renvoie une FNCP.
  3. Exhiber, sans démonstration, une fonction simple λ de l'ensemble des formules dans ℕ telle que pour toutes formules a, b, c et d :
  • λ(a ∨ b) = λ(a ∧ b) > max(λ(a), λ(b)),
  • λ((a ∧ b) ∨ c) = λ(c ∨ (a ∧ b)) > max(λ(a ∨ c), λ(b ∨ c)),
  • Si λ(a) ⩾ λ(c) et λ(b) ⩾ λ(d) alors λ(a ∨ b) ⩾ λ(c ∨ d).
On introduit la fonction μ de l'ensemble des formules dans ℕ.μ(φ) est la profondeur minimale d'un nœud ET dans la formule φ. Plus précisément, μ est définie comme suit :
  • μ(X) = 0 si X est une variable propositionnelle,
  • μ(φ ∧ ψ) = 1 pour toutes formules φ et ψ,
  • μ(φ ∨ ψ) = min(μ(φ), μ(ψ)) pour toutes formules φ et ψ.
  1. On considère une formule f telle que :
  • f correspond au cas de filtrage (pattern matching en anglais) de la ligne 5 mais ne correspond à aucun des cas des lignes 1 à 4,
  • Le calcul de c à la ligne 5 termine.
    (a) Montrer que si f ≠ c alors μ(f) > μ(c).
    (b) Montrer que λ(f) ⩾ λ(c).
  1. Démontrer soigneusement que norm termine sur toutes les formules positives.

Questions fréquentes

4 questions
Sur quels chapitres porte l'épreuve d'informatique option info e3a MP 2018 ?
Afficher ou masquer la section

Sur quels chapitres porte l'épreuve d'informatique option info e3a MP 2018 ?

Elle couvre la décidabilité (problème de l'arrêt), les algorithmes de pgcd en Caml, les graphes, les requêtes SQL et la logique propositionnelle.

Les cinq exercices sont-ils indépendants ?

Oui, l'énoncé précise que les cinq exercices sont totalement indépendants, chacun dans un langage précisé (Python, Caml ou SQL).

Ce sujet demande-t-il de programmer en Python ou en Caml ?

Les deux : l'exercice 1 se programme en Python, les exercices 2, 3 et 5 en Caml, et l'exercice 4 en SQL.

Le sujet aborde-t-il la théorie de la calculabilité ?

Oui, l'exercice 1 conduit à démontrer, par un argument diagonal, qu'il ne peut exister de fonction décidant en général si un calcul termine.

Pas de description pour le moment