• Aucun résultat trouvé

Examen de Java IFIPS 3ième année – Informatique Industrielle 2004-2005 – Solutions

N/A
N/A
Protected

Academic year: 2022

Partager "Examen de Java IFIPS 3ième année – Informatique Industrielle 2004-2005 – Solutions"

Copied!
6
0
0

Texte intégral

(1)

IFIPS 3 ième 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[]; // donnees de l’ensemble

private int nbElts; // 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)

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

(3)

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;

}

(4)

// 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

(5)

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);

} }

(6)

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

Références

Documents relatifs

3 Optionnel : classification par multi listes Le code solution est le suivant :.

L’h´eritage est une relation entre les classes dont l’une partage la structure ou le com- portement d´efini dans une (h´eritage simple) ou plusieurs (h´eritage multiple)

Le code fourni doit être court et doit être obligatoirement placé dans le fichier source

4 Question sur les langages orientés objet Aller voir dans une bonne référence (par exemple

- La m´ ethode jouerCoup() fait jouer l’utilisateur ; elle est identique ` a la m´ ethode humainJouerCoup() de l’exercice pr´ ec´ edent ; elle doit tester si le coup entr´ e est

Ecrire un programme de test qui ajoute dans une collection de 5 nombres entiers donnés (lus par une fonction lire() à valeur entière existant dans une classe.. maClasse dans

2.2. Interactions entre écosystèmes benthiques et écosystèmes pélagiques, ou entre compartiments benthique et pélagique) en milieu marin (noté sur 5). Quelles sont

Génétique des populations et biologie de la conservation : présentez de manière synthétique et argumentée quels sont, du point de vue de la génétique des populations, les