CONCOURS ARTS ET MÉTIERS ParisTech - ESTP - POLYTECH. Épreuve d Informatique MP. Durée 3 h. L'usage de L usage de calculatrices est interdit.

Documents pareils
Recherche dans un tableau

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

Algorithmique et Programmation, IMA

Programme Compte bancaire (code)

STAGE IREM 0- Premiers pas en Python

TP 1. Prise en main du langage Python

Présentation du langage et premières fonctions

TD3: tableaux avancées, première classe et chaînes

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e


Java Licence Professionnelle CISII,

Paginer les données côté serveur, mettre en cache côté client

OCL - Object Constraint Language

1 Recherche en table par balayage

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Cours de Programmation 2

Chapitre 10. Les interfaces Comparable et Comparator 1

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Représentation d un entier en base b

CREATION WEB DYNAMIQUE

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Objets Combinatoires élementaires

Chapitre 2 Devine mon nombre!

Classes et Objets en Ocaml.

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

length : A N add : Z Z Z (n 1, n 2 ) n 1 + n 2

Licence Sciences et Technologies Examen janvier 2010

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

Examen Médian - 1 heure 30

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Le langage C. Séance n 4

as Architecture des Systèmes d Information

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

TP3 : Manipulation et implantation de systèmes de fichiers 1

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

PARTIE NUMERIQUE (18 points)

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Initiation à la programmation en Python

Premiers Pas en Programmation Objet : les Classes et les Objets

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Le Langage De Description De Données(LDD)

Programmation en Java IUT GEII (MC-II1) 1

Langage Java. Classe de première SI

Rappels d architecture

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Introduction au langage C

Notions fondamentales du langage C# Version 1.0

Cours d Algorithmique et de Langage C v 3.0

Claude Delannoy. 3 e édition C++

Programmer en JAVA. par Tama

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Algorithmique et programmation : les bases (VBA) Corrigé

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

ALGORITHMIQUE ET PROGRAMMATION En C

ÉPREUVE COMMUNE DE TIPE Partie D

Cours d initiation à la programmation en C++ Johann Cuenin

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Découverte de Python

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Bases de données relationnelles

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

KL5121. Pour activer des sorties en fonction de la position d'un codeur

Le langage SQL (première partie) c Olivier Caron

Structurer ses données : les tableaux. Introduction à la programmation

Cours 1 : La compilation

Chapitre VI- La validation de la composition.

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Programmation C++ (débutant)/instructions for, while et do...while

Java DataBaseConnectivity

Création et Gestion des tables

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Arbres binaires de recherche

V- Manipulations de nombres en binaire

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Cours Informatique Master STEP

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Présentation Windows Azure Hadoop Big Data - BI

Historisation des données

Plan du cours. Historique du langage Nouveautés de Java 7

Cours de Probabilités et de Statistique

Machines virtuelles fonctionnelles (suite) Compilation ML Java

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

Cours de Programmation Impérative: Zones de mémoires et pointeurs

I. Introduction aux fonctions : les fonctions standards

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

UML et les Bases de Données

Peut-on tout programmer?

Transcription:

108 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 L usage de calculatrices est interdit AVERTISSEMENT L'épreuve est composée de 4 exercices, totalement indépendants L'exercice 1, sur les bases de données, demande d'écrire des requêtes SQL Les exercices suivants demandent d'écrire du code Caml 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 Il est interdit aux candidats de signer leur composition ou d y mettre un signe quelconque pouvant indiquer sa provenance Tournez la page SVP

Exercice 1 Certains prénoms sont purement masculins, ainsi Lionel et Jean-Pierre ne sont attribués qu à des garçons D autres sont purement féminins, comme Angélique et Delphine, qui ne sont attribués qu à des filles Enfin, d autres prénoms sont donnés, avec la même orthographe, à des garçons et à des filles, comme Andréa, Alix et Dominique Ces prénoms sont dits épicènes Le taux de féminité d un prénom P est la proportion de filles appelées P à la naissance sur le nombre total de bébés prénommés P Par exemple, le taux de féminité f d Alix, donné à 8217 filles françaises et 2360 garçons est donné par la formule f = 8217 0777 = 777% 2360 + 8217 Ce taux de féminité est utilisé dans le cadre d études sociologiques pour deviner le sexe quand seul le prénom est connu Par exemple, il fut utilisé par la sociologue Valérie Carasco, dans une étude pour le ministère de la justice publiée en octobre 2007, pour attribuer un genre aux PACS : féminin (deux femmes) ou masculin ou mixte Dans cet exercice, nous disposons d une base de données contenant une table baseprenoms ayant la forme suivante : prenom nombre sexe annee departement Manon 190 F 1983 Bouches-du-Rhône Zakaria 240 M 2006 Hauts-de-Seine Andrea 230 F 2001 Gironde Andrea 300 M 2004 Alpes-Maritimes Cette table indique pour chaque année, chaque département, chaque prénom et chaque sexe, le nombre de bébés nés avec ce prénom Ainsi la troisième ligne signifie qu en 2001, en Gironde, 23 bébés filles furent prénommées Andréa Dans cet exercice, chaque question demande d écrire une requête, et est suivie de quelques lignes retournées par la requête Lorsque le résultat d une requête est sauvegardé sous un nom, il peut être utilisé dans une autre requête comme n importe quelle table 1 Écrire une requête donnant la table des prénoms féminins et le nombre de filles nées avec ce prénom Écrire une requête donnant la table des prénoms masculins ainsi que le nombre de garçons nés avec ce prénom prenom nombref prenom nombrem Alix 82170 Charlie 1620 Julie 1718780 Alix 23600 Charlie 29090 Jean-Claude 1241370 2

On supposera par la suite que les résultats de ces deux requêtes sont sauvegardés sous les noms respectifs feminin et masculin 2 Écrire une requête donnant la table des prénoms épicènes avec le nombre de filles et le nombre de garçons nés avec ce prénom ainsi que le taux de féminité prenom nombref nombrem TauxF Alix 82170 23600 0777 Charlie 1620 29090 0053 Dominique 2193590 1577610 0418 On supposera par la suite que cette requête est sauvegardé sous le nom epicene 3 Écrire une requête renvoyant la table des prénoms exclusivement féminins Écrire une requête renvoyant la table des prénoms exclusivement masculins prenom prenom Angélique Delphine Lionel Jean-Pierre On supposera par la suite que les résultats de ces deux requêtes sont sauvegardés sous les noms respectifs prenomfeminin et prenommasculin 4 Écrire une requête renvoyant la liste des prénoms avec leur taux de féminité prenom tauxf Alix 0777 Angelique 10 Lionel 00 Exercice 2 On considère le programme suivant, écrit en Caml : let rec pow a k = if k=0 then 1 else a* pow a (k-1);; pow a k calcule a à la puissance k 1 Quelle est la complexité en temps de pow? 2 Que dire de l occupation de la mémoire lors de l exécution de pow? Estimer la complexité en mémoire (on dit aussi en espace) de pow 3 Tournez la page SVP

Dans la suite de cet exercice, on utilise une version de Python travaillant sur des entiers illimités, et une version de Caml travaillant sur des entiers de 31 bits Les entiers représentables en Caml vont de 2 30 à 2 30 1 inclus Lorsqu une opération arithmétique dans Z renvoie un entier k qui n est pas représentable en Caml, alors Caml renvoie l unique entier représentable congru à k modulo 2 31 90000*80000;; renvoie 757549056 car 90000 80000 = 7200000000 757549056 [ 2 31] et 2 30 757549056 < 2 30 De même 99000*80000;; renvoie -669934592 car 99000 80000 = 7920000000 669934592 [ 2 31] et 2 30 669934592 < 2 30 3 Quelle valeur renvoie pow 2 3? Quelle valeur renvoie pow 2 42? Considérons les fonctions suivantes écrites en Python et Caml pour un entier n > 0 : Python def f(n): k=0 while 2**k<=n: k=k+1 return k 4 Décrire l exécution de f(3) en Python Caml let f n = let k=ref 0 in while pow 2!k <= n do k:=!k+1 done;!k;; 5 Que calcule la f(n) en Python pour n un entier strictement positif? 6 Dans cette question, nous supposons que n prend des valeurs entières, strictement positives, et représentables en Caml (a) Pour quelles valeurs de n les fonctions f en Python et en Caml renvoient le même résultat? (b) Que se passe-t-il, pour les autres valeurs de n, lors du calcul de fnen Caml? 7 Réécrire la fonction f de Caml pour qu elle renvoie le même résultat que la fonction Python sur tous les entiers strictement positifs représentables en Caml Exercice 3 On suppose disposer d une structure impérative de dictionnaire en Caml de type ('a,'b) dict avec les primitives suivantes : Primitive Type Description new unit -> ('a,'b) dict Crée un nouveau dictionnaire vide add ('a,'b) dict -> 'a -> 'b -> unit add d cl val associe, dans le dictionnaire d, la clef cl à la valeur val find ('a,'b) dict -> 'a -> 'b find d cl lit, dans le dictionnaire d, la valeur associée à la clef cl keys ('a,'b) dict -> 'a list keys d renvoie la liste (dans un ordre arbitraire) des clefs du dictionnaire d 4

'a est le type des clefs, et 'b le type des valeurs associées aux clefs On suppose disposer d une structure persistante d ensemble d entiers de type set avec les primitives suivantes : Primitive Type Description empty set L ensemble vide union set -> set -> set L union de 2 ensembles inter set -> set -> set L intersection de 2 ensembles card set -> int Le cardinal d un ensemble equal set -> set -> bool Teste l égalité de 2 ensembles mem int -> set -> bool mem i s renvoie true si l entier i appartient à l ensemble s et false sinon singleton int -> set singleton i renvoie l ensemble à un élément ne contenant que i On représente un automate non-déterministe en Caml par le type suivant type auto = {etats : set; init: set; trans: (int * char, set) dict ; final: set};; Étant donné un automate m, metats représente l ensemble des états de m, minit représente l ensemble des états initiaux de m ; mfinal l ensemble de ses états finaux, mtrans sa fonction de transition qui à chaque couple q,x associe l ensemble des états accessibles à partir de l état q en lisant le caractère x Par exemple, considérons l automate M 1 suivant : a a a, b 0 1 2 Si m1 représente l automate M 1 en Caml alors m1final est l ensemble {2} et find m1trans (1,`a`) est l ensemble {1; 2} Un automate déterministe est un automate non-déterministe ayant un unique état initial et tel que pour tout état q et toute lettre a, en lisant a à partir de l état q on peut aller dans au plus un état 1 L automate M 1 est-il déterministe? 2 Écrire une fonction max_card : ('a, set) dict -> int qui étant donné un dictionnaire d ensembles, renvoie le cardinal maximal des ensembles stockés dans le dictionnaire 5 Tournez la page SVP

3 Écrire une fonction est_deterministe : auto -> bool qui renvoie true si l automate donné en argument est déterministe et false sinon 4 Considérons le code incomplet suivant : let etats_suivants m s x = let rec parcours_clefs clefs acc = match clefs with [] -> acc (etat,y)::r -> if then else in parcours_clefs (keys mtrans) empty;; 1 2 3 4 5 6 7 Compléter le code de sorte que etats_suivants m s x renvoie l ensemble des états accessibles à partir d un état de l ensemble s en lisant x dans l automate m 5 Écrire une fonction reconnu : auto -> string -> bool qui, étant donné un automate et une chaîne de caractères, renvoie true si l automate reconnaît la chaîne et false sinon 6 Si au lieu d une structure impérative de dictionnaire nous avions une structure persistante de dictionnaire, quel serait le type de la primitive add? Si nous avions une structure impérative d ensemble d entiers et non pas une structure persistante, pourquoi le type de empty devrait-il être changé? Exercice 4 Nous souhaitons classer les fromages français dans un arbre : les fromages les plus proches seront sur des branches voisines de l arbre Dans ce but est défini un type d arbre étiqueté : type arbre = Fromage of int N of arbre * arbre * float;; Pour chaque fromage nous disposons d un ensemble de mesures : apport énergétique, teneur en calcium, en protéines, Nom Apport énergétique (en kj/100g) Calcium (en mg/100g) Camembert 1150 333 Maroilles 348 335 Roquefort 374 601 Le tableau précédent est représenté en Caml par une matrice globale fromages de flottants Par exemple, fromages(0)(1) donne 3330, la teneur en calcium (colonne numéro 1) du camembert (fromage numéro 0) Chaque fromage f est alors représenté par une ligne [ f 0 ; ; f q ] de la matrice fromages Étant donné un tableau global ponderation= [ α 0 ; ; α q ] de flottants strictement positifs on définit la distance d(a, b) entre deux fromages a = [ x 0 ; ; x q ] et b = 6

[ y 0 ; ; y q ] par d(a, b) = q α k x k y k, puis on définit la distance d(a, B) entre deux k=0 ensembles de fromages A et B par d(a, B) = min d(a, b) a A et b B Enfin, on définit la distance entre deux arbres a 1 et a 2 comme la distance entre l ensemble des fromages présents dans a 1 et l ensemble des fromages présents dans a 2 1 Écrire une fonction distance : int -> int -> float distance i j calcule la distance entre les fromages de numéros i et j 2 Définir en Caml une matrice globale dist, telle que, pour tous fromages i et j, dist(i)(j) est égal à la distance entre les fromages i et j 3 Écrire une fonction dist_arbr : arbre -> arbre -> float qui étant donné deux arbres de fromages, calcule la distance entre ces deux arbres 4 La fusion de deux arbres a 1 et a 2 est un arbre de la forme ci-après où la racine est étiquetée par x, la distance entre a 1 et a 2 x a 1 a 2 On appelle forêt une liste d arbres Un dendrogramme est un arbre construit de la manière suivante (a) On crée une forêt contenant un arbre de la forme Fromage(i) par fromage (b) Tant qu il y a plusieurs arbres dans la forêt, on cherche deux arbres séparés par la plus petite distance possible, puis on les fusionne (c) Lorsqu il ne reste plus qu un seul arbre, on renvoie celui-là Écrire une fonction dendrogramme : unit -> arbre qui crée le dendrogramme de tous les fromages référencés dans la matrice globale fromages 7

IN CHOISY 16 1108 D après documents fournis