Le barème est donné à titre indicatif. A) QCM [5 POINTS] Choisir la
Transcription
Le barème est donné à titre indicatif. A) QCM [5 POINTS] Choisir la
L1I1 / 12 juin 2007 Initiation à la Programmation – session 2 Durée : 2h00 – Seuls les deux polycopiés de cours sont autorisés. Le barème est donné à titre indicatif. A) QCM [5 POINTS] Choisir la ou les réponses correctes. Il y a toujours au moins une réponse correcte. 1 Comment obtient-on le nombre d’éléments [longueur] d’un tableau tab ? a) tab.longueur b) tab.length c) length(tab) d) tab.length() e) Array.length(tab) 2 Pour déclarer un tableau d’entiers tab dont les éléments sont dans l’ordre 3, 6, 9, 12, je peux écrire : a) b) c) d) int tab = [3,6,9,12] ; int[] tab = new int({3,6,9,12}) ; int[] tab; tab[0]=3; tab[1]=6; tab[2]=9; tab[3]=12; int[] tab = {3,6,9,12}; e) tab[] = new int(3,6,9,12); f) int[] tab = new int[4]; for (int i=1;i<5;i++) tab[i]=3*i ; 3 Dans la classe ArrayList : 3.1- Quel est le coût d’accès à l’élément d’indice k ? a) constant b) linéaire c) quadratique d) ça dépend 3.2- Quel est le nom de la méthode permettant d’avoir le nombre d’éléments d’une liste ? a) size() b) getSize() c) length() 3.3- Quel est le coût de la méthode d’ajout add ? a) constant b) linéaire c) quadratique d) getLength() d) ça dépend 4 On considère la méthode statique suivante : static int truc(int a, int b) { int tmp = a; a = b; b = tmp; return a; } Supposons que les variables entières x et y valent respectivement 2 et 3. Quel est l’affichage produit par l’exécution des deux instructions suivantes : int z = truc(x,y); System.out.println(”x=” + x + ”,y=” + y + ”,z=” + z); a) x=2,y=3,z=2 b) x=3,y=2,z=2 c) x=2,y=3,z=3 d) x=3,y=2,z=3 e) Erreur de compilation dans la méthode truc f) Erreur lors de l’exécution des deux instructions 5 Quelle(s) instruction(s) permet(tent) de transformer une chaîne de caractères en entier : String chaine ; a) b) c) d) e) int int int int int v v v v v = = = = = parseInt(chaine); (int)chaine ; java.lang.Integer.parseInt(chaine) ; new Integer(chaine).intValue() ; chaine; B) Trois méthodes statiques sur les tableaux d’entiers [6 points] 6 Programmez une méthode sommeImpairs prenant en argument un tableau tab d’entiers, et retournant la somme des éléments impairs de ce tableau. Par exemple, si tab contient les éléments 0, 1, 6, -3, 9, le résultat serait 7 (Note : 7=1 + (-3) + 9). 7 On s’intéresse à la suite (un) définie par u0 = 2 et un+1 = 2un - 3 si n ≥ 0. Programmez une méthode termes prenant un entier n ≥ 0 en argument et retournant un tableau d’entiers contenant les n+1 premiers termes de cette suite. Par exemple, pour n=5, le résultat serait un tableau de longueur 6 contenant les entiers 2, 1, -1, -5, -13. On n’utilisera pas et on ne programmera pas de méthode externe calculant le terme un de rang n de cette suite. 8 Programmez une méthode verifier sans résultat, prenant en argument un tableau tab d’entiers et affichant un message qui exprime si le tableau contient ou ne contient pas de nombre négatif. Par exemple, si tab est constitué des éléments 0, 1, 6, -3, 9, on verrait s’afficher un message à l’écran disant Attention, le tableau contient au moins un nombre négatif ! C) Des objets de type Livre [7 points] Une association prête des livres à ses membres. Le responsable décide de programmer en Java la gestion de cette bibliothèque, il rédige pour cela une classe Livre et vous allez l’y aider. • Un objet de cette classe est muni de deux champs privés : o Un champ nommé titre de type String contenant le titre du livre. o Un champ nommé emprunteur de type String, contenant le nom de l’emprunteur si le livre est actuellement emprunté, et contenant la référence null sinon. • Cette classe admet un constructeur prenant en argument une chaîne de caractères ch et construisant un livre dont le titre est ch et non emprunté. • Cette classe comporte cinq méthodes : o Un accesseur permettant de récupérer le contenu du champ titre o Un accesseur permettant de récupérer le contenu du champ emprunteur o Une méthode sans résultat sortir(String nom) exprimant que le livre vient d’être emprunté par une personne se nommant nom. o Une méthode sans résultat rentrer() exprimant que le livre vient d’être rendu par son emprunteur, peu importe le nom de ce dernier. o Une méthode toString retournant une représentation du livre sous forme de chaîne de caractère, par exemple : Livre[titre=”Le langage JAVA”,emprunteur=”Jean Doe”] 9 Programmez cette classe complète ! D) Fichiers et listes de livres [4 points] Les livres de la bibliothèque sont organisés en plusieurs fichiers suivant leur thème. Un fichier comporte un nombre pair de lignes. En effet, chaque livre est répertorié sur deux lignes, la première donnant le titre du livre, et la seconde le nom de l’emprunteur [elle est vide s’il n’y a pas d’emprunteur]. Par exemple, le fichier ci-dessous sur la guerre sous-marine comprend trois livres dont le premier et le troisième sont empruntés et le second ne l’est pas : Programmer un sonar avec JAVA Jean Doe Architecture des sous-marins Le Loch Lomond Archibald Haddock Dans ce qui suit, le mot liste fait référence à la classe générique ArrayList<E> de Java, où E est la classe des objets de la liste. 10 Écrire une méthode lireFichier qui prend en argument une chaîne de caractères représentant le nom d’un fichier de livres [dont on ne connaît pas à l’avance le nombre de lignes], et qui renvoie une liste d’objets de type Livre représentant les livres de ce fichier. La lecture du fichier ci-dessus retournerait donc une liste de 3 objets. 11 Écrire une méthode statique estDisponible qui prend en argument une chaîne de caractères ch représentant le titre d’un livre ainsi qu’une liste list de livres, et qui renvoie le nom de l’emprunteur s’il est emprunté, ou bien la chaîne ”### LIBRE” s’il n’est pas emprunté. Vous trouverez dans votre polycopié du cours les primitives utiles sur les listes et les fichiers. Certaines sont résumées dans l’annexe de la page suivante. Classe Math Classe Integer boolean hasNextLine() static int abs(int x) Integer(int n) boolean hasNextInt() static double abs(double x) static int parseInt(String) String nextLine() static double sqrt(double x) int intValue() int nextInt() void close() static double sin(double x) Classe java.awt.Point static double cos(double x) Point(int x, int y) Classe Exception Classe String boolean equals(Object o) String getMessage() String(char[] tab) int getX() String substring(int i, int j) // [ i, j [ int getY() Classe java.io.FileWriter int length() void translate(int x, int y) FileWriter(String nomFichier) int indexOf(String str) Classe java.util.ArrayList Classe java.io.PrintWriter int indexOf(char c) ArrayList() PrintWriter(FileWriter fw) String toLowerCase() int size() void print(...) String toUpperCase() boolean isEmpty() void println(...) char[] toCharArray() Object get(int index) void close() char charAt(int index) Object set(int index, Object Classe Character element) Classe boolean isUpperCase(char c) boolean add(Object obj) java.io.InputStreamReader boolean isLowerCase(char c) Object remove(int index) InputStreamReader(System.in) boolean isLetter(char c) Iterator iterator() Classe java.io.BufferedReader boolean isDigit(char c) Classe java.util.Scanner BufferedReader(InputStreamRe Classe java.util.Random Scanner(System.in) ader isr) Random() Scanner(Writer flot) String readLine() int nextInt(int n) // dans [0,n-1] Scanner(String chaine) void close() assert (propriété) : "message d'erreur"; assert (propriété) ; try { ...} catch (Exception e) { ... } static public void main(String[] args)