Op´erations ensemblistes (1) [sr04] - Exercice
Karine Zampieri, St´ephane Rivi`ere
Unisciel algoprog Version 18 janvier 2017
Table des mati`eres
1 Op´erations ensemblistes (1) / pgltens1 2
1.1 Op´erations de base .............................. 2
1.2 Affichage et saisie d’une liste ......................... 2
1.3 Recherche dans une liste non tri´ee ...................... 3
1.4 Intersection de deux listes non tri´ees .................... 3
1.5 Fusion de deux listes ............................. 4
1.6 Union de deux listes ............................. 5
2 R´ef´erences g´en´erales 6
Java - Op´erations ensemblistes (1) (Solution)
Mots-Cl´es Structuration de l’information
Requis Axiomatique imp´erative (sauf Fichiers)
Difficult´e ••◦ (1 h 30)
Objectif
Cet exercice r´ealise les op´erations ensemblistes (intersection, fusion, union), les ensembles
´etant repr´esenes par des listes non tri´ees d’entiers.
1
Unisciel algoprog – Op´erations ensemblistes (1) [sr04], January 18, 2017 2
1 Op´erations ensemblistes (1) / pgltens1
1.1 Op´erations de base
La liste sera repr´esenee par une structure contenant un tableau m´emorisant les valeurs
de la liste et un entier m´emorisant la taille effective de la liste. Dans tout l’exercice, on
supposera que la taille du tableau est suffisamment grande pour les manipulations.
T´el´echargez le fichier suivant et mettez-le dans votre dossier.
Java @[Liste.java]
Soient la d´efinition et les op´erations de base d’une Liste :
1.2 Affichage et saisie d’une liste
´
Ecrivez une proedure afficherListe(lt) qui effectue l’affichage d’une Liste lt.
´
Ecrivez une proedure saisirListe(lt) qui effectue la saisie de valeurs dans une Liste lt
termin´ee par une sentinelle.
Validez vos proc´edures avec la solution.
Solution Java @[UtilsLTOpers.java]
static void afficherListe(Liste lt){
System.out.print("{");
if (!lt.listeVide()){
System.out.print(lt.evalElement(0));
for (int j=1;j<lt.taille; ++j){
System.out.print(","+lt.evalElement(j));
}
}
System.out.println("}");
}
static void saisirListe(Liste lt){
Scanner cin =new Scanner(System.in);
System.out.print("Valeur de la sentinelle? ");
int sentinelle =cin.nextInt();
lt.initialiserListe();
System.out.print("Valeur de l’element? ");
int valeur =cin.nextInt();
while (valeur != sentinelle && lt.taille<Liste.MAXLIST-1){
lt.ajouterElement(valeur);
System.out.print("Valeur de l’element? ");
Unisciel algoprog – Op´erations ensemblistes (1) [sr04], January 18, 2017 3
valeur =cin.nextInt();
}
}
1.3 Recherche dans une liste non tri´ee
´
Ecrivez une fonction positionElement(lt,valeur) qui recherche et renvoie la position
la plus `a gauche d’un ´el´ement valeur (entier) parmi les ´el´ements d’une Liste lt,
-1 sinon (cas o`u valeur n’est pas dans lt).
D´eduisez une fonction dansListe(lt,val) qui teste et renvoie Vrai si un ´el´ement de
valeur val (entier) est dans une Liste lt,Faux sinon.
Validez vos fonctions avec la solution.
Solution Java @[UtilsLTOpers.java]
static int positionElement(/*const*/ Liste lt,int val){
int nelems =lt.taille;
int j= 0;
while (j<nelems && lt.evalElement(j)!=val){
j+= 1;
}
return (j<nelems ?j: -1);
}
static boolean dansListe(/*const*/ Liste lt,int val){
return (positionElement(lt,val) != -1);
}
1.4 Intersection de deux listes non tri´ees
´
Ecrivez une proedure copierListe(a,b) qui recopie, ´el´ement par ´el´ement, une Liste a
dans une Liste b.
Aide simple
Initialisez la Liste b puis traversez la Liste a et ajoutez l’´el´ement courant de la Liste a
dans la Liste b en appelant la proedure ajouterElement.
´
Ecrivez une proedure intersection(a,b,c) qui r´ealise l’intersection de deux Liste a
et Liste b dans une Liste c.
Unisciel algoprog – Op´erations ensemblistes (1) [sr04], January 18, 2017 4
Aide m´ethodologique
Initialisez la Liste c. Puis pour chacun des ´el´ements de la Liste a, regardez s’il se trouve
dans la Liste b. Dans l’affirmative, ajoutez cet ´el´ement dans la Liste c et supprimez
cet ´el´ement de la Liste b. Au pr´ealable, copiez la Liste b dans une Liste b0 afin de
pouvoir supprimer les ´el´ements.
Validez vos fonctions et proc´edures avec la solution.
Solution Java @[UtilsLTOpers.java]
static void copierListe(/*const*/ Liste a,Liste b){
b.initialiserListe();
int nelems =a.taille;
for (int j=0;j<nelems; ++j){
b.ajouterElement(a.evalElement(j));
}
}
static void intersection(/*const*/ Liste a,/*const*/ Liste b,Liste c){
Liste b0 =new Liste();
b0.initialiserListe();
copierListe(b,b0);
c.initialiserListe();
int nelems =a.taille;
for (int j=0;j<nelems; ++j){
int val =a.evalElement(j);
int pos =positionElement(b0,val);
if (pos != -1){
c.ajouterElement(val);
val =b0.retirerKieme(pos);
}
}
}
´
Ecrivez une proedure test_opers qui saisit deux Liste puis en r´ealise l’intersection et
l’affiche.
Testez.
1.5 Fusion de deux listes
´
Ecrivez une proedure fusionner(a,b) qui fusionne les ´el´ements d’une Liste b dans
une Liste a. A l’issue de la proc´edure, acontiendra tous les ´el´ements de bet bsera
vide. Dans le cas o`u tous les ´el´ements n’auront pas pu ˆetre transf´er´es (faute de place),
les ´el´ements resteront dans b(et bne sera pas vide).
Validez votre proc´edure avec la solution.
Unisciel algoprog – Op´erations ensemblistes (1) [sr04], January 18, 2017 5
Solution Java @[UtilsLTOpers.java]
static void fusionner(Liste a,Liste b){
while (!(a.listePleine() || b.listeVide())){
int valeur =b.retirerElement();
a.ajouterElement(valeur);
}
}
1.6 Union de deux listes
Dans ce probl`eme, on suppose qu’un ´el´ement n’apparait qu’une seule fois dans une liste.
´
Ecrivez une proedure unionListe(a,b,c) qui r´ealise l’union des Liste a et Liste b
dans une Liste c.
Orientation
Utilisez la fonction dansListe du probl`eme [Recherche et intersection].
Validez votre proc´edure avec la solution.
Solution Java @[UtilsLTOpers.java]
static void unionListe(/*const*/ Liste a,/*const*/ Liste b,Liste c){
copierListe(a,c);
int nelems =b.taille;
for (int j=0;j<nelems; ++j){
int valeur =b.evalElement(j);
if (!dansListe(a,valeur)){
c.ajouterElement(valeur);
}
}
}
Compl´etez votre proedure de test.
Testez.
Validez votre proc´edure avec la solution.
Solution Java @[pgltens1.java]
public static void main(String[] args) {
Liste lt1 =new Liste();
Liste lt2 =new Liste();
UtilsLTOpers.saisirListe(lt1);
UtilsLTOpers.afficherListe(lt1);
1 / 6 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !