Université Abdelhamid Ibn Badis – Mostaganem 2022-2023
FSEI, Master ISI Durée : 1h30
Matière : TPA
Examen de la matière : TPA
Exercice 01 : (6 pts)
1. Qu’est ce qu’une exception Java ? Comment traiter et propager une exception en Java ?
Citer 3 types d’exceptions prédéfinies en Java.
2. Comment instancier une collection de type Set ?
3. Quel est le rôle de ces méthodes retainAll(), et containsAll() ? Donner le pseudo-code qui
correspond à ces méthodes.
4. Quels sont les principaux types de flux qu’on peut avoir sous Java ?
5. Comment remédier aux problèmes posés par les accès concurrents ? Expliquer brièvement
chaque principe.
6. Citer 2 modèles d'échange de données concurrentiel ?
Exercice 02 : (4 pts)
1. Écrire une classe Java « ShowRoomAutomobile» qui permet de créer une collection
de données nommée « ListVoituresExposees » de type ArrayList pour stocker
l’ensemble des marques de voitures suivantes :
[BMW, Renault, Mercedes, Citroën, Audi, Peugeot, Ford, Ferrari,
Volkswagen].
2. Ecrire une méthode TriMarque() qui permet de trier la liste crée précédemment par
ordre alphabétique.
Sortie prévue: Liste après le tri: [Audi, BMW, Citroën, Ferrari, Ford,
Mercedes, Peugeot, Renault, Volkswagen]
3. Écrire une méthode InverserList() pour inverser l’ensemble les éléments de la liste
triée précédemment.
4. Ecrire une méthode ElementIndiceImpairList() qui permet de retourner et d’afficher
les éléments de la liste aux indices impairs de la liste passée en argument
(ListVoituresExposees).
5. Supprimer le premier et le dernier élément de la liste qui contient les éléments à
indice pair.
6. Stocker la dernière liste manipulée dans un fichier « Marques.txt ».
Exercice 03 : (3 pts)
La suite de Fibonacci est définie par :
𝑓! = 1,
𝑓! = 1,
𝑓! = 𝑓!!! + 𝑓!!!
1. Ecrire une fonction calculant le Nième nombre de la suite.
2. L'entier saisi doit être impérativement supérieur à 0.
1
Université Abdelhamid Ibn Badis – Mostaganem 2022-2023
FSEI, Master ISI Durée : 1h30
Matière : TPA
3. Créer une classe d'exception adaptée à cette erreur pour la traiter.
Exercice 04 : (7 pts)
1. Donner le schéma qui récapitule le cycle de vie d’un thread en Java.
2. Quelles sont les politiques d’ordonnancement possibles sous Java. Donner le schéma
de la politique qui combine deux autres.
3. Utilisez les sémaphores à compteur pour implanter le système producteur-
consommateur le producteur produit 10x plus vite que le consommateur ne
consomme. Ecrire le code du producteur, et celui du consommateur.
2
Université Abdelhamid Ibn Badis – Mostaganem 2022-2023
FSEI, Master ISI Durée : 1h30
Matière : TPA
Corrigé de l’examen de la matière : TPA
Exercice 01 : (6 pts)
1. Les exceptions représentent le mécanisme de gestion des erreurs intégré au langage Java.
Ø Il se compose d'objets représentant les erreurs et d'un ensemble de trois mots clés qui
permettent de détecter et de traiter ces erreurs (try, catch et finally ) mais aussi de les
lever ou les propager (throw et throws).
Ø Parmi les exceptions prédéfinies dans Java :
o ArithmeticException : par exemple, division d’un nombre par 0.
o ClassCastException : par exemple, tentative de transformer un objet String en
Integer.
o IndexOutOfBoundsException : par exemple, appeler un index de tableau qui
n’existe. tab[10] alors que la variable tab n’a que 9 éléments par exemple.
o NullPointerException : appel d’une variable non-existante ou d’un fichier non-
existant par exemple.
o FileNotFoundException : exemple, tentative d’ouverture d’un fichier inexistant
en lecture
2. Une collection de type Set peut être instanciée comme suit :
• Set <Type> s1 = new HashSet<Type>();
• Set <Type> s2 = new LinkedHashSet<Type>();
• Set <Type> s3 = new TreeSet<Type>();
3. Le rôle des méthodes retainAll(), et containsAll() :
Ø retainAll(Collection<? extends T> collection) : permet de retirer tous les
éléments de la collection qui ne se trouvent pas dans la collection passée en
paramètre. Cette opération réalise l'intersection des deux collections.
Ø ContainsAll(Collection<? extends T> collection) : retourne true si tous les
éléments de la collection passée en paramètre se trouvent dans la collection
courante. Cette opération teste l'inclusion.
4. Les principaux types de flux qu’on peut avoir sous Java sont :
Ø Des flux basés sur des caractères : XxxReader/XxxWriter
Ø Des flux basés sur des octets : XxxInputStream/XxxOutputStream
5. On peut traiter les problèmes posés par les accès concurrents en utilisant soit :
a. Les sémaphores : Un sémaphore est constitué d'un entier s signé pouvant
prendre des valeurs positives, négatives ou nulles et d'une file d'attente
mémorisant les contextes des tâches suspendues. L'accès à la variable s est
atomique.
b. Les verrous : Les verrous sont implémentés via l'interface Lock. Cette
dernière fournit les méthodes permettant de verrouiller une section critique.
6. Parmi les modèles d'échange de données concurrentiel, on a :
Ø Le modèle producteur-consommateur.
Ø Le modèle lecteur-rédacteur.
3
Université Abdelhamid Ibn Badis – Mostaganem 2022-2023
FSEI, Master ISI Durée : 1h30
Matière : TPA
Exercice 02 : (4 pts)
import java.util.* ;
public class ShowRoomAutomobile {
static ArrayList TriMarque(ArrayList L)
{
Collections.sort(L);
System.out.println("Le contenu de la liste des marques après le tri: "+L);
return L;
}
ArrayList InverserList(ArrayList L)
{
Collections.reverse(L);
return L;
}
static ArrayList ElementIndiceImpairList(ArrayList L)
{
ArrayList ListIndImpair = new ArrayList<String>();
for (int i = 0; i < L.size(); i++)
{
if (i % 2 != 0)
{
ListIndImpair.add(L.get(i));
}
System.out.println("La liste des éléments à indice impair est : "+ListIndImpair);
return ListIndImpair;
}
static LinkedList ElementIndiceImpairList(LinkedList L)
{
LinkedList ListIndImpair = new LinkedList<String>();
for (int i = 0; i < L.size(); i++)
{
if (i % 2 != 0)
{
ListIndImpair.add(L.get(i));
4
Université Abdelhamid Ibn Badis – Mostaganem 2022-2023
FSEI, Master ISI Durée : 1h30
Matière : TPA
System.out.println("La liste des éléments à indice impair est : "+ListIndImpair);
return ListIndImpair;
}
public static void main(String[] args) {
ArrayList<String> ListVoituresExposees = new ArrayList<String>();
//[BMW, Renault, Mercedes, Citroën, Audi, Peugeot, Ford, Ferrari, Volkswagen]
ListVoituresExposees.add("BMW");
ListVoituresExposees.add("Renault");
ListVoituresExposees.add("Mercedes");
ListVoituresExposees.add("Citroën");
ListVoituresExposees.add("Audi");
ListVoituresExposees.add("Peugeot");
ListVoituresExposees.add("Ford");
ListVoituresExposees.add("Ferrari");
ListVoituresExposees.add("Volkswagen");
System.out.println("Le contenu de la liste des marques avant le tri:
"+ListVoituresExposees);
ArrayList<String> ListMarquesTriee = new ArrayList<String>
(ListVoituresExposees);
ListMarquesTriee = TriMarque(ListMarquesTriee);
LinkedList<String> ListIndImpair = new LinkedList<String>();
ListIndImpair.addAll(ListVoituresExposees);
ListIndImpair = ElementIndiceImpairList(ListIndImpair);
// supprimer le premier et le dernier élément de ListIndPair
ListIndImpair.removeFirst();
ListIndImpair.removeLast();
System.out.println("Le contenu de la liste des marques après la suppression du premier
et dernier élément : "+ListIndImpair);
try {
PrintWriter File = new PrintWriter("Marques.txt");
File.println(ListIndImpair);
File.close();
} catch (FileNotFoundException ex) {
Logger.getLogger(ShowRoomAutomobile.class.getName()).log(Level.SEVERE,
null, ex);
}
}
}
5
Université Abdelhamid Ibn Badis – Mostaganem 2022-2023
FSEI, Master ISI Durée : 1h30
Matière : TPA
Exercice 03 : (3 pts)
import java.util.Scanner;
public class FiboException extends Exception {
public FiboException(String msg) {
super(msg);
}
}
class Fibo {
public static int fibo(int n) throws FiboException {
if (n < 0)
throw new FiboException("n < 0");
if (n == 0 || n == 1)
return 1;
return fibo(n - 1) + fibo(n - 2);
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("Donner un entier");
int n = sc.nextInt();
try {
System.out.println("fibo(" + n + ") = " + fibo(n));
break;
} catch (FiboException e) {
System.out.println(e.getMessage());
System.out.println("Donnez une valeur supérieure à 0");
}
}
}
6
Université Abdelhamid Ibn Badis – Mostaganem 2022-2023
FSEI, Master ISI Durée : 1h30
Matière : TPA
Exercice 04 : (7 pts)
1. le schéma qui récapitule le cycle de vie d’un thread en Java.
2. Les politiques d’ordonnancement possibles sous Java sont :
Ø Politiques d'ordonnancement à priorité circulaire.
Ø Politiques d'ordonnancement à priorité pure
Ø Politiques d'ordonnancement à priorité mixte
Ø Politiques d'ordonnancement à priorité mixte et vieillissement des tâches.
Politiques d'ordonnancement à priorité mixte
7
Université Abdelhamid Ibn Badis – Mostaganem 2022-2023
FSEI, Master ISI Durée : 1h30
Matière : TPA
3. Code du système producteur-consommateur :
public class Consumer extends Thread {
Tampon zone;
public Consumer(Tampon t) {
zone = t;
}
public void run() {
int i = 0;
while (true) {
zone.consomme();
try {
System.out.println("C(message " + i + ")");
this.sleep(50);
} catch (InterruptedException e) {
};
}
}
}
class Producer extends Thread {
Tampon zone;
public Producer(Tampon t) {
zone = t;
}
public void run() {
int i = 0;
while (true) {
zone.produit("message " + i);
try {
this.sleep(5);
} catch (InterruptedException e) {
};
i++;
}
}
}
class Tampon {
8
Université Abdelhamid Ibn Badis – Mostaganem 2022-2023
FSEI, Master ISI Durée : 1h30
Matière : TPA
int taille;
int free = 0;
int n;
int next = 0;
Object[] values;
public Tampon(int max) {
n = max;
taille = max;
values = new Object[n];
}
public synchronized void produit(Object b) {
if (n == 0) {
try {
wait();
} catch (InterruptedException ex) {
};
}
values[free] = b;
free = (free + 1) % taille;
n--;
System.out.println("P(" + b + ")");
notify();
}
public synchronized Object consomme() {
if (n == taille) {
try {
wait();
} catch (InterruptedException ex) {
};
}
Object o = values[next];
next = (next + 1) % taille;
n++;
System.out.println("P(" + o + ")");
notify();
return o;
}
}
class test {
public static void main(String[] argv) {
Tampon t = new Tampon(5);
Producer p = new Producer(t);
9
Université Abdelhamid Ibn Badis – Mostaganem 2022-2023
FSEI, Master ISI Durée : 1h30
Matière : TPA
Consumer c = new Consumer(t);
p.start();
c.start();
}
}
10