Vous êtes sur la page 1sur 6

L3Info/L3Miage/M2Crypto

examen PRG1 - 18 décembre 2019

Programmation 1 – Examen

Durée : 2 heures.
Les documents manuscrits et dactylographiés sont autorisés. Les exercices sont indépendants. La clarté
et la précision de la rédaction (en particulier les commentaires du code) seront un facteur important de
l’évaluation. Le barème est donné à titre indicatif.

Exercice 1 (11,5 points)


Nous avons les classes suivantes :

1 /**
2 * La classe représentant des cartes postales, décrites par la
3 * légende, l’éditeur et la commune représentée sur l’image (on
4 * suppose que chaque carte peut être rattachée à une commune). Une
5 * commune est identifiée par son code INSEE (un entier à 5 chiffres).
6 */
7 public class Postcard {
8 public String editor;
9 public String legend;
10 public Integer commune;
11 ...
12 }

1 /**
2 * La classe représentant les cartes postales d’un éditeur. La clef
3 * est le numéro identifiant la carte, et la valeur la carte elle-même.
4 * Le numéro est propre à l’éditeur.
5 */
6 public class EditorCatalog extends Table<Integer, Postcard>

1 /**
2 * La classe représentant une collection de cartes postales. La clef
3 * est le nom d’un éditeur, et la valeur est la table (non vide) des
4 * cartes postales de cet éditeur présentes dans la collection.
5 *
6 * N.B. Le nom de l’éditeur doit bien sûr correspondre à l’attribut
7 * editor de la classe Postcard.

examen PRG1 18 décembre 2019


L3Info/L3Miage/M2Crypto Programmation 1 – Examen

8 */
9 public class PostcardCollection extends Table<String, EditorCatalog>

Écrire les méthodes d’instance suivantes de la classe PostcardCollection :

Question 1 (1 pt)

1 /**
2 * @param editor nom de l’éditeur
3 * @param id identifiant de carte postale
4 * @return true si la carte ayant identifiant id de l’éditeur
5 * editor est présente dans this, false sinon
6 */
7 public boolean hasPostcardById(String editor, Integer id)

Question 2 (1,5 pt)

1 /**
2 * Supprimer de this toutes les cartes postales de l’éditeur
3 * editor représentant la commune de code commune.
4 *
5 * @param commune code de commune
6 * @param editor nom de l’éditeur
7 * /
8 public void sellPostcards(String editor, Integer commune)

Question 3 (3 pt)

1 /**
2 * @return nombre de communes différentes présentes dans this
3 *
4 * @post this reste inchangé
5 */
6 public int numberOfCommunes()

Question 4 (3 pt)

1 /**
2 * @param pc2 deuxième catalogue de cartes postales
3 * @post this et pc2 restent inchangés
4 * @return ensemble des éditeurs qui ont au moins une même carte
5 * postale dans this et pc2 (on suppose que deux cartes
6 * sont identiques si elles ont le même éditeur et le même

examen PRG1 2 18 décembre 2019


L3Info/L3Miage/M2Crypto Programmation 1 – Examen

7 * numéro)
8 *
9 * N.B. Il s’agit de la classe Set vue en cours.
10 */
11 public Set<String> inBothCatalogs(PostcardCollection pc2)

Question 5 (3 pt)

1 public class Triplet {


2 public String editor;
3 public String legend;
4 public Integer postcardID;
5 ...
6 }

1 /**
2 * @return la table dont les clefs sont les numéros de communes et
3 * les valeurs un ensemble de triplets <editor, postcardID,
4 * legend> tels que le quadruplet <editor, postcardID,
5 * legend, commune> appartient à this
6 *
7 * @post this reste inchangé
8 *
9 * N.B. Il s’agit de la classe Set vue en cours.
10 */
11 public Table<Integer, Set<Triplet>> createTableByCommune()

examen PRG1 3 18 décembre 2019


L3Info/L3Miage/M2Crypto Programmation 1 – Examen

Exercice 2 (10,5 points)


Nous avons les classes suivantes :

1 /**
2 * La classe représentant des langages de programmation. La fonction
3 * equals ne compare que name et creationYear.
4 */
5 public class Language implements Comparable<Language> {
6 public String name; // nom du langage
7 public int creationYear; // année de création
8 public int leftHeight; // la hauteur du sous-arbre gauche
9 // par convention, le butoir a une hauteur de -1
10 public int total; // nombre de noeuds dans l’arbre avec
11 // ce noeud comme racine
12 ...
13 public boolean equals(Object o) { ... }
14 public int compareTo(Language l) { ... }
15 ...
16 }

1 /**
2 * Les langages sont organisés pour une recherche symétrique (comme
3 * un arbre binaire de recherche) relativement à l’attribut name. La
4 * méthode compareTo(Language l) de la classe Language permet de
5 * comparer les langages dans l’ordre lexicographique.
6 * Par définition, tous les noms de langage sont différents.
7 */
8 public class LanguageCatalog extends BinaryTree<Language>

Écrire les méthodes d’instance suivantes de la classe LanguageCatalog :

(Eiffel,1986,2,10)

(C,1972,1,4) (Groovy,2003,0,5)

(Ada,1980,-1,2) (Cobol,1959,-1,1) (Fortran,1957,-1,1) (Kotlin,2011,1,3)

(Basic,1964,-1,1) (Java,1995,0,2)

(Haskell,1990,-1,1)

examen PRG1 4 18 décembre 2019


L3Info/L3Miage/M2Crypto Programmation 1 – Examen

Question 1 (1 pts)

1 /**
2 * @param language
3 * @return true si language est présent dans this, false sinon
4 */
5 public boolean search(Language language)

Question 2 (2 pts)

1 /**
2 * Afficher les langages créés en année year, dans l’ordre préfixe.
3 * @param year
4 */
5 public void printByYear(int year)

Question 3 (3,5 pts)

1 /**
2 * @pre Les attributs leftHeight et total ne sont pas remplis
3 * dans this.
4 * @post Tous les attributs leftHeight et total de this sont remplis.
5 */
6 public void fillAllFields() {
7 Iterator<Language> it = this.iterator();
8 fillAux(it);
9 }
10

11 private static Pair fillAux(Iterator<Language> it)

où la classe Pair est la suivante :

1 public class Pair {


2 public int height;
3 public int total;
4 ...
5 }

Bonus (0,5pt)
Est-il possible, avec une complexité raisonnable, de mettre à jour les attributs leftHeight et total des
nœuds de l’arbre pendant l’ajout d’une nouvelle valeur ? Vous pouvez vous limiter aux cas particuliers, par
exemple, valeur absente de l’arbre avant l’ajout.

examen PRG1 5 18 décembre 2019


L3Info/L3Miage/M2Crypto Programmation 1 – Examen

Question 4 (3,5 pts)

1 /**
2 * Pour chaque branche (chemin de la racine à une feuille),
3 * afficher la suite des noms de langages parcourus (commençant
4 * par la feuille et se terminant par la racine). L’ordre entre les
5 * branches n’est pas important.
6 *
7 * Dans l’exemple cela pourrait donner :
8 *
9 * Basic Ada C Eiffel
10 * Cobol C Eiffel
11 * Fortran Groovy Eiffel
12 * Haskell Java Kotlin Groovy Eiffel
13 */
14 public void printPaths()

examen PRG1 6 18 décembre 2019

Vous aimerez peut-être aussi