Examen - Ibisc

Transcription

Examen - Ibisc
Programmation Impérative 2
Dept Informatique, Univ Evry
Examen
Tous les documents (version papier) sont autorisés
Responsable: Nguyen Kim Thang
9 Mai 2012
Les questions 15, 17, 18, 20 vous apportent 2 points et les autres vous apportent 1 point chacune.
La note totale est 24. Si vous obtenez 23/24, votre note finale sera 20/20. Si vous obtenez 10/24,
votre note finale sera 10/20.
1
Questions de cours
Pour les questions suivantes, répondez avec de courtes explications si nécessaire. Notez qu’il y a
probablement des codes qui ne marchent pas. Dans ce cas, répondez qu’il y a un problème et
expliquez pourquoi.
1. Etant donné une chaı̂ne de caractères data. Qu’est-ce que le code suivant fait?
for (int i=0; i < (data.length() / 2); i++)
data[i] = data[data.length() - 1 - i];
2. Comment nommer un constructeur dans une classe? Est-il possible d’avoir deux constructeurs
dans une même classe?
3. Qu’est-ce que fait le code suivant?
ArrayList<int> myList = new ArrayList<int>();
4. Qu’est-ce que le code suivant affichera à l’écran?
class Maison{
String proprietaire;
double prix; // millions d’euros
public Maison (String pro, double prix){
this.proprietaire = pro; this.prix = prix;
}
public static void main (String [] args){
Maison m1 = new Maison ("David", 1);
Maison m2 = new Maison ("Thomas", 2);
m1.proprietaire = "Antoine";
m2 = m1;
System.out.println(m2.proprietaire + " " + m2.prix);
m1 = m2;
System.out.println(m1.proprietaire + " " + m1.prix);
1
}
}
5. Qu’est-ce que fait ce code dans un fichier code.java suivant?
public enum SAISONS { Printemps, Ete, Automne, Hiver}
public class Saison{
private SAISONS saison;
int date;
public Saison (SAISONS s, int d){
this.saison = s; this.date = d;
}
}
6. Qu’est-ce que le code suivant affichera à l’écran?
class IKEA{
String objet;
double prix; // euros
int compteur1 = 0;
static int compteur2 = 0;
public IKEA (String s, double p){
this.objet = s; this.prix = p;
compteur1 ++;
compteur2 ++;
}
public static void main (String [] args){
IKEA m1 = new IKEA ("lit", 100);
IKEA m2 = new IKEA ("table", 50);
IKEA m3 = new IKEA ("lampe", 30);
System.out.println(m2.compteur1);
System.out.println(m3.compteur2);
}
}
7. Quelle est la différence majeure entre un tableau et un ensemble?
8. Pourquoi dans la signature de la fonction main, on met toujours static?
2
2
La classe Etudiant
Dans cette section, nous allons écrire une classe représentant les étudiants. Un étudiant est caractérisé par son nom et une note du cours. La dernière est privée.
9. Définissez les attributs nécessaires à la construction d’un étudiant.
10. Ecrivez le constructeur de la classe Etudiant qui prend en argument le nom et la note de
l’étudiant.
11. Ecrivez une méthode d’instance retournant la note de l’étudiant.
La structure de la classe ressemble au code suivant:
public class Etudiant{
// Question 9
// Question 10
public Etudiant (...){...}
// Question 11
public int note(){...}
}
3
La classe ProgImp
Dans cette section, nous allons écrire une classe représentant les étudiants dans le cours de programmation impérative. Nous allons construire un tableau dans lequel chaque élément est un étudiant.
Comme le nombre d’etudiants n’est pas définitif à la rentrée, on va utiliser ArrayList pour manipuler un tableau de taille variable. En plus, nous allons avoir besoin d’un compteur indiquant le
nombre d’etudiants du cours.
12. Définissez les attributs nécessaires à la construction. Précisez les paquetages nécessaires.
13. Ecrivez le constructeur de la classe ProgImp qui instancie un cours avec aucun étudiant.
14. Complétez la méthode addEtudiant qui ajoute un étudiant en argument au cours. Retournez
false si l’étudiant est déjà dans le tableau et true si non. Vous pouvez utiliser la méthode
add de la classe ArrayList.
15. Déterminez la signature et écrivez une méthode etudiantsNote qui prend en argument un
entier n compris entre 0 et 20 et retourne un tableau des étudiants qui ont la note supérieure
ou égale à n.
16. Déterminez la signature et écrivez une méthode affichierEtudiantsNote qui prend en argument un entier n compris entre 0 et 20 et affiche à l’écran les étudiants qui ont la note
supérieure ou égale à n.
3
17. Déterminez la signature et écrivez une méthode tauxPassable qui retourne le taux des
étudiants ayant passé le cours. Un étudiant a passé le cours s’il a une note supérieure ou
égale à 10.
La structure de la classe ressemble au code suivant:
public class ProgImp{
// Question 12
// Question 13
public ProgImp (){...}
// Question 14
public boolean addEtudiant(){...}
// Question 15
... etudiantsNote (int n){...}
// Question 16
... afficherEtudiantsNote (int n){...}
// Question 17
... tauxPassable (){...}
}
4
Mieux organiser en class ProgImpJava
Maintenant dans le cours de programmation Java, nous allons associer à chaque étudiant un numéro
entier comportant de 4 chiffres. Nous allons contruire la classe ProgImpJava en utilisant certaines
méthodes de la classe HashMap de Java dont la spéfication se trouve à la fin de l’énoncé..
18. Proposez les champs d’attributs dans lesquels chaque étudiant est associé à un numéro et il
y a toujours un entier indiquant le nombre d’étudiants. Ecrivez un constructeur pour cette
classe qui instancie le cours avec aucun étudiant initialement.
19. Complétez la méthode addEtudiant qui prend un étudiant et son numéro d’étudiant en
argument et ajoute cet étudiant au cours.
20. Le système informatique a été affecté par un virus qui transforme un liste des numéros
d’étudiants en une chaı̂ne de caractères en concaténant les numéros l’un après l’autre sans rien
modifier. Les ingénieurs de système ont pu récupérer cette chaı̂ne. Comment les ingénieurs
peuvent alerter les étudiants dont le numéro est dans la chaı̂ne de vérifier son compte?
Implémentez une méthode qui prend une chaı̂ne de caractère en argument et affiche à l’écran
les noms de ces étudiants.
La structure de la classe ressemble au code suivant:
4
public class ProgImpJava{
// Question 18
...
public ProgImpJava (){...}
// Question 19
public boolean addEtudiant(){...}
// Question 20
... alerter (String s){...}
}
Spécification
Classe HashMap
• HashMap<K,V>(): constructeur pour créer les couples dont une clé de type K est associée à
une valeur de type V. Le constructeur instancie un ensemble vide.
• boolean containsKey (K elt): renvoie true si l’élément elt est présent en tant que clé.
• boolean containsValue (V elt): renvoie true si l’élément elt est présent en tant que
valeur.
• void put (K cle, V valeur): ajoute l’élément valeur associé à la clé cle.
• void add (K cle, V valeur): même fonctionalité que put
• V get (K cle): renvoie la valeur associée à la clé cle
• Set<K> keySet(): renvoie la liste des clés
• Collection<V> values(): renvoie la liste des valeurs.
5