Examen de Java IFIPS 3 année – Informatique Industrielle 2004
Transcription
Examen de Java IFIPS 3 année – Informatique Industrielle 2004
IFIPS 3ième
Examen de Java
année – Informatique Industrielle
2004-2005 – Solutions
Université de Paris Sud
Seule les solutions pour les deux permiers exercices sont données.
Solution de l’ex. 1 Opérations sur des Ensembles d’entiers naturels
en local
Voici une solution possible :
class EnsNaturels {
public static final int N_MAX = 100;
// capacite de l’ensemble
public static final int CASE_LIBRE = -1; // constante marqueur d’une case libre
private int donnees[];
private int nbElts;
// donnees de l’ensemble
// nombre reel d’elts de l’ensemble
public EnsNaturels() {
donnees = new int[N_MAX];
for(int i = 0; i < N_MAX; i++)
donnees[i] = CASE_LIBRE;
nbElts = 0;
}
public boolean ajouter(int e) {
int i = 0;
for(i = 0; i < N_MAX; i++)
if(donnees[i] == CASE_LIBRE) {
donnees[i] = e;
nbElts++;
break;
}
if (i == N_MAX - 1)
return false;
else
return true;
}
public boolean supprimer(int e) {
int i = 0;
for(i = 0; i < N_MAX; i++)
if(donnees[i] == e) {
donnees[i] = CASE_LIBRE;
nbElts--;
1
2 — Examen de JavaIFIPS 3ième année – Informatique Industrielle2004-2005 – Solutions
break;
}
if (i == N_MAX - 1)
return false;
else
return true;
}
public int cardinal() {
return nbElts;
}
public String toString() {
String res = "{";
for(int i = 0; i < N_MAX; i++)
if(donnees[i] != CASE_LIBRE)
res += donnees[i] + ", ";
res = res.substring(0, res.length()-2);
res += "}";
return res;
}
public boolean contient(int e) {
for(int i = 0; i < N_MAX; i++)
if(donnees[i] == e)
return true;
return false;
}
}
public class EnsNaturelsMain {
public static void main(String args[]) {
EnsNaturels ens = new EnsNaturels();
ens.ajouter(1);
ens.ajouter(45);
ens.ajouter(2);
ens.ajouter(20);
ens.ajouter(3);
ens.ajouter(10);
System.out.println(ens);
ens.supprimer(20);
ens.supprimer(10);
ens.supprimer(45);
System.out.println(ens);
}
}
Solution de l’ex. 2 Variations sur des Ensembles d’entiers naturels
en local
Voici une solution possible :
// Exception
Solution de l’ex. 2. Variations sur des Ensembles d’entiers naturels en local
class OperationImpossible extends Exception
{
public OperationImpossible (String e)
{
super("Operation impossible: "+e);
}
}
// Classe avec tri et variante de gestion des ajouts et suppression
class EnsNaturelsTri
{
public static final int N_MAX = 100;
public static final int CASE_LIBRE = -1;
private int donnees[];
private int nbElts;
// cree un ensemble vide de capacite N_MAX elts et l’initialis
// (affecte chaque case de donnees a CASE_VIDE
public EnsNaturelsTri()
{
donnees=new int[N_MAX];
nbElts=0;
}
// ajoute l’element e a l’ensemble
public void ajouter(int e) throws OperationImpossible
{
if(nbElts>N_MAX-1)
throw new OperationImpossible("ajout dans un ensemble plein");
donnees[nbElts++]=e;
}
// supprime la 1ere occurence de l’element e de l’ensemble.
public void supprimer(int e) throws OperationImpossible
{
boolean trouve = false;
for(int i=0; i<nbElts && !trouve; i++)
if(donnees[i]==e) {
trouve = true;
for(int j=i; j<nbElts; j++)
donnees[j]=donnees[j+1];
nbElts--;
}
if(nbElts==0)
throw new OperationImpossible("suppression dans un ensemble vide");
if(!trouve)
throw new OperationImpossible("suppression d’un élément non trouvé: "+e);
}
// renvoie le nombre d’elements dans l’ensemble
public int cardinal()
{
return nbElts;
}
3
4 — Examen de JavaIFIPS 3ième année – Informatique Industrielle2004-2005 – Solutions
// renvoie une vue en String de l’ensemble au format
// {e1, e2, eN}
public String toString()
{
String out = new String("{");
for(int i=0; i<nbElts; i++) {
out+=donnees[i];
if(i!=nbElts-1)
out+=", ";
}
out+="}";
return out;
}
// renvoie true si l’ensemble contient l’element e
public boolean contient(int e)
{
for(int i=0; i<nbElts; i++)
if(donnees[i]==e)
return true;
return false;
}
// tri les éléments à l’aide de l’algorithme de tri par insertion
public void trier()
{
int cle, i;
for(int j=2; j<nbElts; j++) {
cle=donnees[j];
i=j-1;
while(i>0 && donnees[i]>cle) {
donnees[i+1]=donnees[i];
i=i-1;
}
donnees[i+1]=cle;
}
}
// renvoie l’intersection de this et de ens
public EnsNaturelsTri intersection(EnsNaturelsTri ens)
{
EnsNaturelsTri res = new EnsNaturelsTri();
for(int i=0; i<nbElts; i++)
for(int j=0; j<ens.nbElts; j++)
if(donnees[i]==ens.donnees[j])
try {
res.ajouter(donnees[i]);
} catch(OperationImpossible e) {
}
return res;
}
// renvoie l’union de ens et de this
Solution de l’ex. 2. Variations sur des Ensembles d’entiers naturels en local
public EnsNaturelsTri union(EnsNaturelsTri ens) throws OperationImpossible
{
EnsNaturelsTri res = new EnsNaturelsTri();
for(int i=0; i<nbElts; i++)
res.ajouter(donnees[i]);
for(int j=0; j<ens.nbElts; j++)
res.ajouter(ens.donnees[j]);
return res;
}
}
// classe de test
public class EnsNaturelsTriMain {
public static void main(String[] args) {
EnsNaturelsTri ens = new EnsNaturelsTri();
try {
ens.ajouter(1);
ens.ajouter(45);
ens.ajouter(2);
ens.ajouter(21);
ens.ajouter(3);
ens.ajouter(61);
} catch(OperationImpossible e) {}
System.out.println("Ensemble1 de départ: "+ens);
EnsNaturelsTri ens2 = new EnsNaturelsTri();
try {
ens2.ajouter(1);
ens2.ajouter(54);
ens2.ajouter(2);
ens2.ajouter(12);
ens2.ajouter(3);
ens2.ajouter(16);
} catch(OperationImpossible e) {}
System.out.println("Ensemble2 de départ: "+ens2);
System.out.println("Intersection des 2: "+ens.intersection(ens2));
try {
EnsNaturelsTri r = ens.union(ens2);
System.out.println("Union des 2: "+r);
r.trier();
System.out.println("Union des 2 triee: "+r);
} catch(OperationImpossible e) {
System.err.println("Union des 2 impossible: "+e);
}
try {
ens.supprimer(21);
ens.supprimer(61);
ens.supprimer(45);
} catch(OperationImpossible e) {}
System.out.println("Ensemble1 avec éléments supprimés: "+ens);
}
}
5
6 — Examen de JavaIFIPS 3ième année – Informatique Industrielle2004-2005 – Solutions
Solution de l’ex. 3 Opérations sur des Ensembles d’entiers naturels
en client/serveur
Solution de l’ex. 4
(Optionnel) Pour aller plus avant