예제 #1
0
        /// <summary>
        /// initialisation des données pour la construction de l'arbre des lettres des mots français.
        /// </summary>
        public static void InitialiseEnvironnement()
        {
            // this.pictureBox1.Visible = true;
            // Création de l'arbre à partir du fichier texte.
            // ===================
            // initialisation du dictionnaire
            string nomDuDico = Directory.GetCurrentDirectory() + "\\MOTS TRADUITS.txt";

            string[] lignesDico;
            try
            {
                lignesDico = File.ReadAllLines(nomDuDico);

                // c'est le dictionnaire (arbre)
                NoeudRacine = WordsTree.NoeudRacineConstructionArbre(lignesDico);
            }
            catch
            {
                startAuthorization = false;
            }
        }
예제 #2
0
        /* Choix : l'abre est représenté par une liste de noeuds
         * Le noeud est une classe qui comprend
         * - Un caractère : la donnée
         * - un booléen indiquant si cette lettre constitue la fin d'un mot
         * - une liste de noeuds désignant les noeuds enfants
         * */

        /// <summary>
        /// Modélisation du dictionnaire des mots .
        /// Accesssible par NoeudRacineConstructionArbre  racine de l'arbre
        /// </summary>
        /// <param name="lignesDico"> String représentant un mot lu dans le fichier texte du dictionnnaire  francais.</param>
        /// <returns> racine : pointeur du noeud racine. </returns>
        public static Noeud NoeudRacineConstructionArbre(string[] lignesDico)
        {
            // création de la racine
            Noeud racine = new Noeud
            {
                Lettre    = ' ',
                EndOfWord = false,
                DictionnaireDesSousNoeuds = null,
            };

            // traitement des mots
            // traitement des lettres du mot
            for (int i = 0; i <= lignesDico.Length - 1; i++)
            {
                string mot = lignesDico[i];

                // Création de la branche correspondant au mot par passage du noeud racine à la prcédure récussive VerifAjouteLettre
                AddCourantLetterIfNeccesity(racine, 0, mot);
            }

            // affecte à NoeudRacineConstructionArbre accessible partout dans form1 la valeur du pointeur de Racine
            return(racine);
        }
예제 #3
0
        /// <summary>
        /// Ajoute un noeud à l'arbre si cela est nécessaire à sa construction.
        /// </summary>
        /// <param name="parentNode"> Noeud parent.</param>
        /// <param name="courantLetterIndex"> Index position de la lettre dans le mot.</param>
        /// <param name="word"> mot en traitement. </param>
        public static void AddCourantLetterIfNeccesity(Noeud parentNode, int courantLetterIndex, string word) // Création de l'arbre
        {
            // n'effectue pas le traitement pour un mot vide
            if (word.Length == 0)
            {
                return;
            }

            char courantLetter = word[courantLetterIndex];

            // si le dico n'existe pas on en crée un vierge
            if (parentNode.DictionnaireDesSousNoeuds == null)
            {
                parentNode.DictionnaireDesSousNoeuds = new Dictionary <char, Noeud>();
            }

            // le dico existe et  si la clé existe
            if (parentNode.DictionnaireDesSousNoeuds.ContainsKey(courantLetter))
            {
                // on cherche la clé (lettre)
                foreach (KeyValuePair <char, Noeud> cle in parentNode.DictionnaireDesSousNoeuds)
                {
                    // clé identifiée
                    if (cle.Key == courantLetter)
                    {
                        // (pour lettre suivante du mot)
                        courantLetterIndex++;
                        if (courantLetterIndex < word.Length)
                        {
                            // si le traitement du mot n'est pas fini on appelle récursivement la procédure
                            // en passant le noeud courant le rang incrémenté et le mot en paramètre.
                            // MessageBox.Show("Le dico du noeud père contient " + l + "du mot " + Word + " On cherche " + Word[rang]);
                            AddCourantLetterIfNeccesity(cle.Value, courantLetterIndex, word);
                        }
                    }
                }
            }
            else
            {
                // le dico existe et  clé pas trouvée => ajout noeud dans dico
                Noeud sonNode = new Noeud
                {
                    Lettre = courantLetter,
                };

                // dernière lettre du mot  : On ajoute le noeud correspondant
                if (courantLetterIndex == word.Length - 1)
                {
                    sonNode.EndOfWord = true;
                    parentNode.DictionnaireDesSousNoeuds.Add(courantLetter, sonNode);
                    return;
                }
                else
                {
                    // PAS dernière lettre du mot  : On ajoute le noeud correspondant et on incémente rang
                    // et on relance récursivement la procédure
                    sonNode.EndOfWord = false;
                    parentNode.DictionnaireDesSousNoeuds.Add(courantLetter, sonNode);
                    courantLetterIndex++;
                    AddCourantLetterIfNeccesity(sonNode, courantLetterIndex, word);
                }
            }
        }