CNC Info 2018 TSI
CNC Info 2018 TSI
CNC Info 2018 TSI
Dans cette partie, le but est de modéliser une structure qui représente un arbre généalogique par une
base de données. On commence par représenter l’arbre généalogique sous forme d’un arbre n-aire
descendant :
En haut de l’arbre se situe l’ancêtre commun à tous les membres de l’arbre généalogique. Et chaque membre
de l’arbre est relié vers le bas à chacun de ses enfants. À l’exception de l’ancêtre commun, chaque membre
de l’arbre est relié vers le haut à une unique personne : son parent.
Pour plus de clarté, nous prendrons l’arbre généalogique suivant comme exemple dans toute cette partie :
Dans ce qui suit, on propose de représenter l’arbre généalogique par une base de données composée
de deux tables : la table : membres et la table : liens.
Membres Liens
genre (Texte)
generation (Entier)
Q.1- Déterminer la clé primaire de la table Membres, et la clé primaire de la table Liens.
Justifier votre réponse.
Q.2- Écrire une requête SQL, qui donne pour résultat le prénom et le genre du plus grand ancêtre des
membres.
Q.3- Écrire une requête SQL, qui donne pour résultat les prénoms et les générations, sans répétition, des
membres masculins, dont le prénom commence par 'A', et se termine par 'D', et contient 'E'.
Q.4- Écrire une requête SQL, qui donne pour résultat la hauteur de l’arbre.
Q.5- Écrire une requête SQL, qui donne pour résultat les prénoms et les genres des enfants du parent
dont l’id_parent = 15, triés dans l’ordre alphabétique des prénoms.
Q.6- Écrire une requête SQL qui donne pour résultat les identifiants, les prénoms et les générations des
membres ayant un nombre d’enfants supérieur ou égal à 3, triés dans l’ordre décroissant du nombre
d’enfants.
Q.7- Écrire une requête SQL qui crée une nouvelle table nommée Membres_1, ayant la même structure
que la table Membres.
Q.8- Écrire une requête SQL qui copie dans la table Membres_1, tous les membres de la table Membres,
qui possèdent le même prénom que celui du plus grand ancêtre.
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
Partie II :
Bioinformatique : Recherche d’un motif
Q. 1 : Quel est le nombre minimum de bits nécessaires pour coder quatre éléments ?
Q. 3 : Écrire une fonction prefixe (M, S), qui reçoit en paramètres deux chaînes de caractères M et S non
vides, et qui retourne True si la chaîne M est un préfixe de S, sinon, elle retourne False.
Q. 5 : Écrire une fonction liste_suffixes (S), qui reçoit en paramètre une chaîne de caractères S non vide, et
qui renvoie une liste de tuples. Chaque tuple de cette liste est composé de deux éléments : un suffixe de S, et
la position p de ce suffixe dans S (0 ≤ p < taille(S)). Les tuples de cette liste sont ordonnés dans l’ordre
croissant des positions des suffixes.
Exemple : S = 'TATCTAGCTA'
La fonction liste_suffixes (S) renvoie la liste :
[('TATCTAGCTA', 0), ( 'ATCTAGCTA', 1), ( 'TCTAGCTA', 2), ('CTAGCTA', 3), ('TAGCTA', 4),
('AGCTA', 5), ('GCTA', 6), ('CTA', 7), ('TA', 8), ('A', 9)]
Q. 6 : Écrire une fonction : recherche_sequentielle (M, L), qui, en utilisant le principe de la recherche
séquentielle dans L, renvoie la position du premier tuple, tel que M est un préfixe du suffixe de ce tuple, s’il
existe ; sinon, la fonction renvoie None.
NB : Dans cette fonction, on ne doit pas utiliser la méthode index().
Exemples : La liste des suffixes de la chaîne 'TATCTAGCTA' est :
L = [('TATCTAGCTA', 0), ( 'ATCTAGCTA', 1), ( 'TCTAGCTA', 2), ('CTAGCTA', 3), ('TAGCTA', 4),
('AGCTA', 5), ('GCTA', 6), ('CTA', 7), ('TA', 8), ('A', 9)]
recherche_sequentielle ('CTA', L) renvoie la position 3 ; 'CTA' est préfixe de 'CTAGCTA'
recherche_sequentielle ('TA', L) renvoie la position 0 ; 'TA' est préfixe de 'TATCTAGCTA'
recherche_sequentielle ('CAGTA', L) renvoie None. 'CAGT' n’est préfixe d’aucun suffixe
Q. 9 : Écrire une fonction recherche_dichotomique (M, L), qui utilise le principe de la recherche
dichotomique, pour rechercher le motif M dans la liste des suffixes L triée dans l’ordre alphabétique des
suffixes : Si M est un préfixe d’un suffixe dans un tuple de L, alors la fonction retourne la position de ce
suffixe. Si la fonction ne trouve pas le motif M recherché, alors la fonction retourne None.
Exemple :
La liste des suffixes de 'TATCTAGCTA', triée dans l’ordre alphabétique des suffixes est :
L = [ ('A', 9) , ('AGCTA', 5) , ('ATCTAGCTA', 1) , ('CTA', 7) , ('CTAGCTA', 3) , ('GCTA', 6) , ('TA', 8) ,
('TAGCTA', 4) , ('TATCTAGCTA', 0) , ('TCTAGCTA', 2) ]
recherche_dichotomique ('CTA', L) renvoie la position 3 ; 'CTA' est préfixe de 'CTAGCTA'
recherche_dichotomique ('TA', L) renvoie la position 0 ; 'TA' est un préfixe de 'TATCTAGCTA'
recherche_dichotomique ('CAGT', L) renvoie None. 'CAGT' n’est préfixe d’aucun suffixe
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
Puisque la tangente est proche de la courbe, on peut espérer que x1 donne une meilleure estimation d'une
solution de l'équation f(x) = 0 que x0.
9
On recommence alors le procédé à partir de x1, on obtient x2 : 9( = 9 −
9
…
9
Ainsi, on construit par récurrence une suite (xn) définie par : 9 " =9 −
9
Sous de bonnes hypothèses sur f, assez restrictives, (xn) converge vers la solution de l’équation f(x) = 0, et
la convergence est très rapide.
9
Q.1- Montrer que : 9 " = 9 − ($
9 "$ 9 $
Q.2- Écrire une fonction : newton ( f, x0, eps, h) qui reçoit en paramètres :
La fonction f ;
Le premier terme x0 de la suite (xn) ;
Le réel h strictement positif très proche de 0 ;
Le réel eps strictement positif qui représente la précision.
La fonction renvoie le premier terme xk de la suite (xn) tel que : | 9 − 9 | ≤ =%7
Dans ce qui suit, on suppose que a et n sont deux variables globales déclarées et initialisées :
a est un réel positif, et n un entier strictement positif.
Q. 3- Définir la fonction g (x), qui reçoit en paramètre un réel positif x et qui renvoie : 9 – .
Écrire le code du programme Python qui permet de tracer la courbe de la fonction g, dans l’intervalle [0 , a].
Le nombre de points générés dans la courbe est : 500
Q. 5- Écrire le code du programme Python qui utilise la fonction newton (), et qui affiche la valeur
approximative de la racine n-ème positive de a : √ , avec la précision : 10-12 et h= 0.00001.
Exemple :
Pour n=7 et a=2.0, le programme affiche la racine 7ème positive de 2 : 1.1040895136738123