/* 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]; }; /* Affichage des chaines de caracteres */ /* contenues dans un ensemble de chaines */ /* de caracteres */ static void affichage(EnsembleDeChaines edc) { int i; for ( i = 0 ; i < edc.n ; i = i+1 ) { Ecran.afficherln(edc.s[i]); } } /* Ajout d'une chaine de caracteres */ /* a un ensemble de chaines de caracteres */ /* Retourne vrai si l'ajout a abouti */ /* Retourne faux si plus de place */ 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; } /* Test de l'appartenance d'une chaine */ /* de caracteres a un ensemble de chaines */ /* de caracteres */ /* Retourne vrai si present, faux sinon */ static boolean appartient(EnsembleDeChaines e,String s) { boolean res; int i; res = false; i = 0; while ( ( res == false ) && ( i < e.n ) ) { res = (e.s[i] == s); i = i+1; } return res; } /* Fusion de deux ensembles de chaines */ /* de caracteres en un nouvel ensemble */ /* de chaines de caracteres */ /* Retourne null si fusion impossible */ /* car pas assez de place */ static EnsembleDeChaines fusion(EnsembleDeChaines e1, EnsembleDeChaines e2) { EnsembleDeChaines e; int i; e = null; 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; } /* Retrait d'une chaine de caracteres */ /* a un ensemble de chaines de caracteres */ /* Retourne vrai si le retrait a abouti */ /* Retourne faux sinon */ static boolean retrait(EnsembleDeChaines e,String s) { boolean res; int i; res = false; 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; } /* Test si un ensemble de chaines */ /* de caracteres est vide */ 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)); } }