/* Manipulations sur un ensemble */ /* de chaines de caracteres */ public class EnsembleDeChainesDeCaracteres { ///////////////////////////////////////////////// /* Type agrege de stockage d'un ensemble */ /* d'au maximum 20 chaines de caracteres */ static class EnsembleDeChaines { final int MAX = 20; int n = 0; String [] s = new String[MAX]; }; /* Fonction d'affichage des chaines */ /* de caracteres contenues dans un ensemble */ /* de chaines de caracteres */ /* edc : L'EnsembleDeChaines à afficher */ static void affichage(EnsembleDeChaines edc) { int i; for ( i = 0 ; i < edc.n ; i = i+1 ) { Ecran.afficherln(edc.s[i]); } } /* Fonction d'ajout d'une chaine de caracteres */ /* a un ensemble de chaines de caracteres */ /* Retour de true si l'ajout a abouti */ /* Retour de false si plus de place */ /* e : L'EnsembleDeChaines où l'ajout */ /* est effectué */ /* s : La chaine ajoutée */ static boolean ajout(EnsembleDeChaines e,String s) { boolean res; if ( e.n < e.MAX ) { e.s[e.n] = s; e.n = e.n+1; res = true; } else { res = false; } return res; } /* Fonction de test de l'appartenance */ /* d'une chaine de caracteres a un ensemble */ /* de chaines de caracteres */ /* Retour de true si présent, false sinon */ /* e : L'EnsembleDeChaines où la recherche */ /* est effectuée */ /* s : La chaine recherchée */ static boolean appartient(EnsembleDeChaines e,String s) { boolean res = false; int i = 0; while ( ( res == false ) && ( i < e.n ) ) { res = (e.s[i] == s); i = i+1; } return res; } /* Fonction de fusion de deux ensembles */ /* de chaines de caracteres en un nouvel */ /* ensemble de chaines de caracteres */ /* Retour de l'ensemble obtenu */ /* Retour de null si fusion impossible */ /* car pas assez de place */ /* e1 : Le premier EnsembleDeChaines */ /* e2 : Le premier EnsembleDeChaines */ static EnsembleDeChaines fusion(EnsembleDeChaines e1, EnsembleDeChaines e2) { EnsembleDeChaines e = null; int i; if ( e1.n+e2.n <= e1.MAX ) { e = new EnsembleDeChaines(); for ( i = 0 ; i < e1.n ; i = i+1 ) { ajout(e,e1.s[i]); } for ( i = 0 ; i < e2.n ; i = i+1 ) { ajout(e,e2.s[i]); } } return e; } /* Fonction de retrait d'une chaine */ /* de caracteres à un ensemble de chaines */ /* de caracteres */ /* Retour de true si le retrait a abouti */ /* Retour de false sinon */ /* e : L'EnsembleDeChaines où le retrait */ /* est réalisé */ /* s : La chaine retirée */ static boolean retrait(EnsembleDeChaines e,String s) { boolean res = false; int i = 0; while ( ( res == false ) && ( i < e.n ) ) { res = (e.s[i] == s); i = i+1; } if ( res ) { for ( ; i < e.n ; i = i+1 ) { e.s[i-1] = e.s[i]; } e.n = e.n-1; } return res; } /* Fonction de test si un ensemble de chaines */ /* de caracteres est vide */ /* Retour de true si c'est le cas, false sinon */ /* e : L'EnsembleDeChaines testé */ static boolean estVide(EnsembleDeChaines e) { return (e.n == 0); } ///////////////////////////////////////////////// /* Programme principal */ public static void main(String [] args) { EnsembleDeChaines ec1 = new EnsembleDeChaines(); EnsembleDeChaines ec2 = new EnsembleDeChaines(); EnsembleDeChaines ec; Ecran.afficherln(appartient(ec1,"abc")); ajout(ec1,"abc"); Ecran.afficherln(appartient(ec1,"abc")); Ecran.afficherln(appartient(ec1,"xyz")); Ecran.sautDeLigne(); ajout(ec1,"123 456 789"); affichage(ec1); Ecran.sautDeLigne(); ajout(ec2,"azerty"); affichage(ec1); Ecran.sautDeLigne(); ec = fusion(ec1,ec2); affichage(ec); Ecran.sautDeLigne(); Ecran.afficherln(retrait(ec,"123")); Ecran.afficherln(retrait(ec,"abc")); affichage(ec); Ecran.sautDeLigne(); Ecran.afficherln(estVide(ec)); retrait(ec,"123 456 789"); retrait(ec,"azerty"); Ecran.afficherln(estVide(ec)); } }