• Aucun résultat trouvé

Informatique tronc commun TP 11

N/A
N/A
Protected

Academic year: 2022

Partager "Informatique tronc commun TP 11"

Copied!
2
0
0

Texte intégral

(1)

Informatique tronc commun TP 11

30 mars 2014

Note : après la séance, vous devez rédiger un compte-rendu de TP et le faire parvenir à votre enseignant, au plus tard une semaine après la séance de TP.

Ce compte-rendu sera pour cette séance le fichier python contenant le code demandé (avant chaque question, on reportera en commentaire le numéro de la question),

Le nom de votre fichier python sera impérativement forme dupont_jean_tp11.py, où dupont est à remplacer par votre nom et jean par votre prénom, les deux étant en minuscules (même la première lettre) et sans caractère accentué.

Dans la mesure du possible, on justifiera le code demandé par des invariants.

1 Problème considéré

On s’intéresse à la manipulation d’une base de données cinématographique.

Comme dans le cours, on modélisera cette base de données par quatre tables : une table représentant les films, une les personnes, une les personnages et une la relation « joue ».

On représentera donc une base de données par un tel quadruplet.

Pour avoir un code plus explicite, on introduira et on utilisera les fonctions suivantes :

# r e t o u r n e l a b a s e form é e d e s q u a t r e t a b l e s p a s s é e s en argument def cree_base(film, personne, personnage , joue) :

return (film, personne, personnage , joue)

# r e t o u r n e l a t a b l e f i l m de l a b a s e b def film(b) :

return b[ 0 ]

# r e t o u r n e l a t a b l e p e r s o n n e de l a b a s e b def personne(b) :

return b[ 1 ]

# r e t o u r n e l a t a b l e p e r s o n n a g e de l a b a s e b def personnage(b) :

return b[ 2 ]

# r e t o u r n e l a t a b l e de l ’ a s s o c i a t i o n " j o u e " de l a b a s e b def joue(b) :

return b[ 3 ]

On rappelle qu’il n’est pas nécessaire de connaître l’ordre des arguments de la fonction cree_base pour l’utiliser. Étant données des tables f, p, p2, j, les trois appels suivants rendent en effet le même quadruplet :

cree_base(f, p, p2, j)

cree_base(film=f, personne=p, personnage=p2, joue=j)

1

(2)

cree_base(personne=p, joue=j, film=f, personnage=p2) On évitera donc d’utiliser la première forme, peu explicite.

Chaque table sera représentée comme une liste de lignes, chaque ligne étant une liste. La première ligne contiendra les noms des différents champs de la table, les suivantes les données.

On vous fournit quatre fichiers contenant des données pour les tables : – film.csvcontenant les données pour la table des films ;

– personne.csv contenant les données pour la table des personnes ; – personnage.csv contenant les données pour la table des personnages ; – joue.csvcontenant les données pour la table de l’association joue.

Ces fichiers contiennent les données représentées de la façon suivante : chaque ligne de la table est représentée par une ligne de texte. Les champs sont séparés par un caractère de tabulation, représenté en python par "\t". Les lignes sont terminées par un caractère retour chariot ("\n"). La première ligne contient le nom des champs. Pour en examiner le contenu, on pourra ouvrir la table avec un éditeur de texte aussi bien qu’avec un tableur comme LibreOffice.

2 Travail demandé

1. Écrire une fonctionlit_table(f) lisant la table contenue dans le fichier f et la retournant.

2. Écrire une fonctionest_cle_primaire_entiere(t,c) prenant en argument une tablet, un nom de champ c et retournant un booléen indiquant si les valeurs du champ c dans la table t sont toutes de type int et que ce champ constitue une clé primaire de la table, c’est-à-dire que ses valeurs sont toutes distinctes. NB : l’expression isinstance(x,int) indique si la variablex contient un entier.

3. Écrire une fonctionest_cle_etrangere(t1,c1,t2,c2) retournant un booléen indiquant si le champ c1 de la tablet1 est une clé étrangère référençant le champc2de la table t2.

4. Écrire une fonction est_coherente(b) prenant en argument une base b et retournant un booléen True indiquant si les conditions suivantes sont vérifiées :

a) Les champsiddes tables film,personne,personnagesont des clés primaires de ces tables.

b) Le champ idrealisateur de la table film est une clé étrangère vers le champ id de la table personne.

c) Les champsidacteur,idfilm,idpersonnage de jouesont des clés étrangères vers les champs id respectivement des tablespersonne,film,personnage.

d) Les champsidacteur,idfilm,idpersonnageconstituent une clé primaire composée de la table joue.

5. Écrire une fonctionacteurs(b) retournant la liste des acteurs de la base b. On fera en sorte que les éléments de la liste soient tous distincts et triés par ordre croissant.

6. Écrire une fonctiondate_prem_film(b) retournant l’année du premier film de la base b.

7. Écrire une fonction nb_films(b) retournant la liste des couples (n, k), où n est le nom d’un acteur etk le nombre de films dans lequel cet acteur a joué.

8. Écrire une fonction acteurs_realisateurs(b) retournant la liste des couples (n, p) où n etp sont les noms et prénoms des personnes de la base b qui sont des acteurs et des réalisateurs.

9. Écrire une fonction acteurs_post(b,d) retournant la liste des personnes (n, p) où n et p sont les noms et prénoms des personnes de la base b qui sont des acteurs de la base b nés après la date d, représentée comme une chaîne de caractères AAAA-MM-JJ.

10. Écrire une fonction a_joue_avec(b,n1,p1) retournant la liste des couples (n, p) où n etp sont les noms et prénoms des personnes de la base b qui sont des acteurs ayant joué dans au moins un film où jouait l’acteur dont le nom est n1et le prénom estp1.

11. Écrire une fonction directeurs(b,n,p) retournant la liste des couples(n0, p0) oùn0 est le nom etp0 le prénom d’un réalisateur ayant dirigé l’acteur dont le nom est net le prénom p.

2

Références

Documents relatifs

Vérifiez que vous pouvez créer un nouveau répertoire TP1 dans /home/tux et un fichier texte.txt dans TP1 (créer un fichier texte vide à partir de l’explorateur de fichier,

En cliquant alors sur «Go» dans la fenêtre de débogage, on peut exécuter le programme jusqu’au point d’arrêt?. Cliquer de nouveau sur «Go» permet de poursuivre l’exécution

Écrire une procédure fizzbuzz prenant en argument un entier n et affichant successi- vement la suite des entiers de 1 avec la règle suivante : les nombres multiples de 3 sont

Plus précisément, f doit être une fonction prenant ses valeurs dans range ( k ) et les éléments de la liste résultat sont triés par ordre croissant de leurs images par f.. De plus,

choisie pour cette image (intensité de gris représentant le blanc), puis toutes les valeurs de la matrice représentant l’image, dans l’ordre où on les lirait normalement si la

Sachant qu’une division en base 10 a un « coût » proportionnel au nombre de chiffres, estimer le temps de calcul nécessaire pour connaître le nombre exact de chiffre dans

Ce compte-rendu sera pour cette séance le fichier python contenant le code demandé (avant chaque question, on reportera en commentaire le numéro de la question),.. Le nom de

Votre programme doit manipuler une base de données comportant plusieurs tables et certaines des requêtes que vous ferez sur cette base de données doivent être non-triviales..