Le barème est donné à titre indicatif. A) QCM [5 POINTS] Choisir la

publicité
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)
Téléchargement