/* 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 */ /* edc : L'EnsembleDeChaines où l'ajout */ /* est effectué */ /* s : La chaine ajoutée */ static boolean ajout(EnsembleDeChaines edc,String s) { boolean res; if ( edc.n < edc.MAX ) { edc.s[edc.n] = s; edc.n = edc.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 */ /* edc : L'EnsembleDeChaines où la recherche */ /* est effectuée */ /* s : La chaine recherchée */ static boolean appartient(EnsembleDeChaines edc,String s) { boolean res = false; int i = 0; while ( ( res == false ) && ( i < edc.n ) ) { res = (edc.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 true si la fusion est possible */ /* Retour de false si la fusion est impossible */ /* car pas assez de place */ /* edc1 : Le premier EnsembleDeChaines */ /* edc2 : Le second EnsembleDeChaines */ /* edc : L'EnsembleDeChaines à remplir */ static boolean fusion(EnsembleDeChaines edc1, EnsembleDeChaines edc2, EnsembleDeChaines edc) { int i; boolean res; if ( edc1.n+edc2.n <= edc.MAX ) { edc.n = 0; for ( i = 0 ; i < edc1.n ; i = i+1 ) { ajout(edc,edc1.s[i]); } for ( i = 0 ; i < edc2.n ; i = i+1 ) { ajout(edc,edc2.s[i]); } res = true; } else { res = false; } return res; } /* 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 */ /* edc : L'EnsembleDeChaines où le retrait */ /* est réalisé */ /* s : La chaine retirée */ static boolean retrait(EnsembleDeChaines edc,String s) { boolean res = false; int i = 0; while ( ( res == false ) && ( i < edc.n ) ) { res = (edc.s[i] == s); i = i+1; } if ( res ) { for ( ; i < edc.n ; i = i+1 ) { edc.s[i-1] = edc.s[i]; } edc.n = edc.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 */ /* edc : L'EnsembleDeChaines testé */ static boolean estVide(EnsembleDeChaines edc) { return (edc.n == 0); } ///////////////////////////////////////////////// /* Programme principal */ public static void main(String [] args) { EnsembleDeChaines ec1 = new EnsembleDeChaines(); EnsembleDeChaines ec2 = new EnsembleDeChaines(); EnsembleDeChaines ec = new EnsembleDeChaines(); 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(); fusion(ec1,ec2,ec); 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)); } }