Exemple #1
0
        public async Task inserer(int valeur, Canvas c, Commentaire comPrincipal, Canvas Alg)
        //Insetion d'un nouvel élément dans le tableau //
        {
            int[]       tabInfo     = new int[2];
            Point[]     tab_point   = new Point[2];
            Commentaire comDecalage = new Commentaire("On décale les valeurs pour l'insertion ", Brushes.Black, this.coordX + 50, this.coordY - 50, 210, 30, Brushes.GreenYellow, Brushes.White);
            Algo        algo        = new Algo(6, coordX_Algo, coordY_Algo);
            Algo        algo1       = new Algo(27, coordX_Algo, coordY_Algo);
            int         pos;//Position d'insertion
            int         i = tailleTab;

            comPrincipal.disparaitre(0);
            if (i < tailleMaxTab)
            {
                Case nouvelleCase = new Case(valeur, coordX, this.coordY - 100, 1, heightOfcase, widthOfcase, couleurFondCase, couleurBordureCase, 1);
                if (tailleTab > 0)                                                //Si il exite au moins une case
                {
                    await recherche(valeur, tabInfo, c, true, comPrincipal, Alg); //Recherche Dichothomique de la valeur

                    comPrincipal.disparaitre(0);
                }
                if (tabInfo[0] == 0) //Si la valeur n'existe pas
                {
                    pos = tabInfo[1];
                    tabIndices[tailleTab].afficher(c); //Afficher le nouvel indice
                    nouvelleCase.afficher(c);          //Affichage de la nouvelle case crée
                    if (this.triee)
                    {
                        algo.afficher(Alg);
                        await algo.colorer(couleurAlgo, 0, 0.5 *Temps.time);

                        await algo.colorer(couleurAlgo, 1, Temps.time);

                        comDecalage.ajouterCanvas(c);          //Affichage du message d'insertion
                        for (i = this.tailleTab; i > pos; i--) //Décalage des cases pour insérer la nouvelle valeur
                        {
                            await algo.colorer(couleurAlgo, 2, Temps.time);

                            tab_point[0] = new Point(coordX + i * widthOfcase, coordY);
                            tab[i]       = tab[i - 1];         //Décalage interne des cases du tableau
                            tab[i - 1].deplacer(tab_point, 1); //Décalage graphique des cases du tableau
                            await algo.colorer(couleurAlgo, 3, Temps.time);

                            await Task.Delay(TimeSpan.FromSeconds(Temps.time));

                            await algo.colorer(couleurAlgo, 4, Temps.time);
                        }
                        await algo.colorer(couleurAlgo, 5, Temps.time);

                        comDecalage.enleverCanvas(c);
                        tab_point[0] = new Point(coordX + i * widthOfcase, coordY);
                        tab[i]       = nouvelleCase;
                        tab[i].deplacer(tab_point, 1);//Insértion graphique de la case
                        comPrincipal.Width       = 200;
                        comPrincipal.CouleurFond = couleurComPrincipal;
                        comPrincipal.Text        = "Insertion de la valeur ";
                        comPrincipal.apparaitre(0);
                        await algo.colorer(couleurAlgo, 6, Temps.time);

                        comPrincipal.disparaitre(0);
                        await algo.colorer(couleurAlgo, 7, Temps.time);

                        await algo.colorer(couleurAlgo, 8, 0.5 *Temps.time);

                        this.tailleTab++;//Incrémentation de la taille du tableau
                        algo.disparaitre(Alg);
                    }
                    else
                    {
                        algo1.afficher(Alg);
                        tab_point[0] = new Point(coordX + i * widthOfcase, coordY);
                        tab[i]       = nouvelleCase;
                        tab[i].deplacer(tab_point, 1);//Insértion graphique de la case
                        comPrincipal.Width       = 200;
                        comPrincipal.CouleurFond = couleurComPrincipal;
                        comPrincipal.Text        = "Insertion de la valeur ";
                        comPrincipal.apparaitre(0);
                        comPrincipal.disparaitre(0);
                        this.tailleTab++;//Incrémentation de la taille du tableau
                        algo1.disparaitre(Alg);
                    }
                }
                else
                {
                    comPrincipal.CouleurFond = couleurComPrincipal;
                    comPrincipal.Text        = "Insertion impossible , la valeur existe déja ";
                    comPrincipal.Width       = 320;
                    comPrincipal.apparaitre(0);
                    await Task.Delay(TimeSpan.FromSeconds(Temps.time + 1));

                    comPrincipal.disparaitre(0);
                }
            }
            else
            {
                comPrincipal.CouleurFond = couleurComPrincipal;
                comPrincipal.Text        = "Insertion impossible , taille du tableau maximum atteinte ";
                comPrincipal.Width       = 320;
                comPrincipal.apparaitre(0);
                await Task.Delay(TimeSpan.FromSeconds(Temps.time + 1));

                comPrincipal.disparaitre(0);
            }
        }
Exemple #2
0
        private async Task rechercheSeq(int val, int[] tabInfo, Canvas c, Boolean insSup, Commentaire comPrincipal, Canvas Alg)
        {
            //Effectue une recherche séquentiel dans le tableau tab
            // tabInfo[0] correspond au boolean trouv et tabInfo[1] correspond à l'indice de la valeur val si il est trouvée sinon l'indice ou devrait être insérée cette valeur .
            // inserSup est un boolean qui indique si il ya une insertion ou suppression aprés cette recherche
            int i = 0;

            tabInfo[0] = 0;
            SolidColorBrush couleurparcours = Brushes.Red;
            SolidColorBrush couleurtrouve   = Brushes.Green;
            Commentaire     com             = new Commentaire(" ", Brushes.Black, this.tab[i].CoordX - 5, this.tab[i].CoordY - 35, 50, 50, couleurparcours, couleurparcours);
            Algo            algo            = new Algo(1, coordX_Algo, coordY_Algo);

            algo.afficher(Alg);
            com.ajouterCanvas(c);
            com.opacity = 0;
            com.Height  = 30;
            com.Width   = 160;
            await algo.colorer(couleurAlgo, 0, Temps.time);

            await algo.colorer(couleurAlgo, 1, Temps.time);

            await algo.colorer(couleurAlgo, 2, Temps.time);

            while (i < this.tailleTab & tabInfo[0] == 0)
            {
                await algo.colorer(couleurAlgo, 3, Temps.time);

                this.tab[i].Forme.Opacity        = 0.7;
                this.tabIndices[i].Forme.Opacity = 0.7;
                if (this.tab[i].Valeur != val)
                {
                    com.CoordX = this.tab[i].CoordX;
                    this.tab[i].colorChamp(couleurparcours, Brushes.Black, 1);
                    this.tabIndices[i].colorChamp(couleurparcours, Brushes.Black, 0);
                    com.Text = "  " + this.tab[i].Valeur + " est différente de " + val;
                    com.apparaitre(Temps.time);
                    await Task.Delay(TimeSpan.FromSeconds(Temps.time));

                    this.tab[i].colorChamp(couleurFondCase, couleurBordureCase, 1);
                    this.tabIndices[i].colorChamp(couleurFondCase, couleurBordureCase, 0);

                    await algo.colorer(couleurAlgo, 6, Temps.time);

                    i++;
                }
                else
                {
                    tabInfo[0] = 1;
                    comPrincipal.disparaitre(1);
                    comPrincipal.Text = "La valeur " + val + " a été trouvé";
                    await algo.colorer(couleurAlgo, 4, Temps.time);

                    comPrincipal.CouleurFond  = couleurtrouve;
                    this.tab[i].Forme.Opacity = 0.7;
                    comPrincipal.apparaitre(Temps.time);
                    this.tabIndices[i].Forme.Opacity = 0.7;
                    if (insSup == false)
                    {
                        this.tab[i].colorChamp(couleurtrouve, couleurtrouve, 1);
                        this.tabIndices[i].colorChamp(couleurtrouve, couleurtrouve, 0);
                        await algo.colorer(couleurAlgo, 5, Temps.time);

                        com.disparaitre(0);
                        // this.tab[i].vibrate(4, 19);
                        await Task.Delay(TimeSpan.FromSeconds(4));
                    }
                    else
                    {
                        this.tab[i].colorChamp(couleurtrouve, couleurtrouve, 1);
                        this.tabIndices[i].colorChamp(couleurtrouve, couleurtrouve, 0);
                        await algo.colorer(couleurAlgo, 5, Temps.time);

                        com.disparaitre(0);
                    }
                    tabInfo[1] = i;
                }
            }
            if (tabInfo[0] == 0)
            {
                comPrincipal.disparaitre(2.5);
                comPrincipal.Width       = 200;
                comPrincipal.Text        = "La valeur " + val + " n'a pas été trouvé";
                comPrincipal.CouleurFond = couleurparcours;
                comPrincipal.apparaitre(Temps.time);


                com.disparaitre(0.5);
                com.enleverCanvas(c);
                i--;
            }
            await Task.Delay(TimeSpan.FromSeconds(1.5));

            for (i = 0; i < this.tailleTab; i++)
            {
                this.tab[i].colorChamp(couleurFondCase, couleurBordureCase, 1);
                this.tab[i].Forme.Opacity = 1;
                this.tabIndices[i].colorChamp(Brushes.Transparent, Brushes.Transparent, 0);
                this.tab[i].TextBLock.Foreground = Brushes.Black;
            }
            comPrincipal.disparaitre(0.5);
            com.enleverCanvas(c);
            await algo.colorer(Brushes.Red, 7, 0.5 *Temps.time);

            algo.disparaitre(Alg);
        }
Exemple #3
0
        public async Task suppression(int valeur, Canvas c, Commentaire comPrincipal, Canvas Alg)
        {
            int[] tabInfo = new int[2];                                   //Le tableau qui sera modifié par la fonction de recherche
            await recherche(valeur, tabInfo, c, true, comPrincipal, Alg); //Il retourne un entier qui décrit l'echec (0) ou la réussite (1) de la recherche ainsi que la position

            comPrincipal = new Commentaire("Suppression en cours ...", Brushes.Black, this.coordX, this.coordY - 150, 150, 70, Brushes.PaleGreen, Brushes.White);
            Algo algo = new Algo(7, coordX_Algo, coordY_Algo);

            if (tabInfo[0] == 1)
            {
                Commentaire com = new Commentaire("On décrémente la taille du tableau", Brushes.Black, this.coordX + this.tab[tabInfo[1]].Width * tabInfo[1], this.coordY - tab[0].Height, 200, 30, Brushes.GreenYellow, Brushes.White);
                com.ajouterCanvas(c);                           //On crée le commentaire qui explique l'avacncement de l'algorithme
                Point[] tabl = new Point[3];
                if (this.triee && (tabInfo[1] < tailleTab - 1)) //Cas trié, on traitera le cas où la valeur recherchée se trouve à la fin du tableau à part
                {
                    algo.afficher(Alg);
                    await algo.colorer(couleurAlgo, 0, 0.5 *Temps.time);

                    await algo.colorer(couleurAlgo, 1, Temps.time);

                    com.Text    = "On décale toutes les cases suivantes";
                    com.Width   = 200;
                    com.Height += 20;
                    com.apparaitre(0);                                              //On adapte le commentaire au contexte
                    tabl[0] = new Point(tabInfo[1] * widthOfcase + coordX, coordY); //On fait disparaître la case à supprimer
                    this.tab[tabInfo[1]].disappear(tabl, 1);
                    int i;
                    for (i = tabInfo[1]; i < this.tailleTab - 1; i++)       //On effectue les décalages
                    {
                        await algo.colorer(couleurAlgo, 2, Temps.time);

                        tabl[0] = new Point(i * widthOfcase + coordX, coordY);
                        this.tab[i + 1].deplacer(tabl, 1);
                        await algo.colorer(couleurAlgo, 3, Temps.time);

                        await Task.Delay(TimeSpan.FromSeconds(Champ.time));

                        this.tab[i] = this.tab[i + 1];
                        await algo.colorer(couleurAlgo, 4, Temps.time);
                    }
                    await algo.colorer(couleurAlgo, 5, Temps.time);

                    await algo.colorer(couleurAlgo, 6, Temps.time);

                    await algo.colorer(couleurAlgo, 7, 0.5 *Temps.time);

                    algo.disparaitre(Alg);
                }
                else if (tabInfo[1] != tailleTab - 1)     //Cas non trié, supression d'un élément au milieu
                {
                    com.Text    = "On remplace le contenu de la case\npar celui de la dernière case\net on décrémente la taille";
                    com.Width   = 200;
                    com.Height  = 70;
                    com.CoordX  = com.CoordX - this.tab[0].Width;
                    com.CoordY -= 30;
                    com.apparaitre(0);                                              //On adapte le commentaire et on l'affiche
                    tabl[0] = new Point(tabInfo[1] * widthOfcase + coordX, coordY); //La case à supprimer disparaît sur place
                    this.tab[tabInfo[1]].disappear(tabl, 1);
                    this.tab[tabInfo[1]] = this.tab[this.tailleTab - 1];            //On reemplcae la première valeur par la dernière
                    tabl[0] = new Point((tailleTab - 1) * widthOfcase + coordX, coordY - heightOfcase);
                    tabl[1] = new Point(tabInfo[1] * widthOfcase + coordX, coordY - heightOfcase);
                    tabl[2] = new Point(tabInfo[1] * widthOfcase + coordX, coordY); //On définit les points par où passe la case à déplacer
                    this.tab[tailleTab - 1].deplacer(tabl, 3);                      //Animation du remplacement
                    await Task.Delay(TimeSpan.FromSeconds(Champ.time));

                    com.disparaitre(Champ.time);
                }
                else                                                                //Cas non trié, suppression d'un élément à la fin
                {
                    tabl[0] = new Point(tabInfo[1] * widthOfcase + coordX, coordY); //Gestion de l'animation (disparition de la dernière case)
                    this.tab[tabInfo[1]].disappear(tabl, 1);
                }
                this.tailleTab--;                      //On décrémente la taille
                this.tabIndices[tailleTab].masquer(c); //On masque Le dernier indice
                await Task.Delay(TimeSpan.FromSeconds(Temps.time));

                com.enleverCanvas(c);                     //Fin de l'animation
                comPrincipal.CouleurFond = Brushes.Green; //Commentaire de réussite de la suppression
                comPrincipal.Text        = "Suppression réussie";
                comPrincipal.apparaitre(0);
                await Task.Delay(TimeSpan.FromSeconds(Temps.time));
            }
            else                                        //Cas de non suppression (élément non trouvé)
            {
                comPrincipal.CouleurFond = Brushes.Red; //Commentaire d'échec de suppression
                comPrincipal.Text        = "Suppression impossible\nélément non trouvé";
                comPrincipal.apparaitre(0);
                await Task.Delay(TimeSpan.FromSeconds(Temps.time));
            }
        }
Exemple #4
0
        private async Task rechercheDicho(int val, int[] tabInfo, Canvas c, Boolean inserSupp, Commentaire comPrincipal, Canvas Alg)
        //Effectue une recherche dichotomique dans le tableau tab
        // tabInfo[0] correspond au boolean trouv et tabInfo[1] correspond à l'indice de la valeur val si il est trouvée sinon l'indice ou devrait être insérée cette valeur .
        // inserSup est un boolean qui indique si il ya une insertion ou suppression aprés cette recherche
        {
            SolidColorBrush couleurBorneSup  = Brushes.Red;
            SolidColorBrush couleurBorneInf  = Brushes.Blue;
            SolidColorBrush couleurDeCaseMed = Brushes.SeaGreen;
            SolidColorBrush couleurTrouv     = Brushes.Green;
            Algo            algo             = new Algo(2, coordX_Algo, coordY_Algo);

            algo.afficher(Alg);
            int bSup = this.tailleTab - 1, bInf = 0, med = 0, i, e = -5, d = -55;

            Point[] tabDepBSup = new Point[1], tabDepBInf = new Point[1], tabDepMedCase = new Point[1], tabDepBSupInd = new Point[1], tabDepBInfInd = new Point[1], tabDepMedCaseInd = new Point[1];
            await algo.colorer(couleurAlgo, 0, Temps.time);

            await algo.colorer(couleurAlgo, 1, Temps.time);

            await algo.colorer(couleurAlgo, 2, Temps.time);

            tabDepBSup[0]      = new Point();
            tabDepBSup[0].Y    = this.coordY;
            tabDepBInf[0]      = new Point();
            tabDepBInf[0].Y    = this.coordY;
            tabDepMedCase[0]   = new Point();
            tabDepMedCase[0].Y = this.coordY;

            tabDepBSupInd[0]      = new Point();
            tabDepBSupInd[0].Y    = this.coordY + b;
            tabDepBInfInd[0]      = new Point();
            tabDepBInfInd[0].Y    = this.coordY + b;
            tabDepMedCaseInd[0]   = new Point();
            tabDepMedCaseInd[0].Y = this.coordY + b;
            Boolean firstIteration = true;
            Champ   borneSup       = new Champ(this.coordX + widthOfcase * bSup, this.coordY, 1, heightOfcase, widthOfcase, Brushes.Transparent, couleurBorneSup, 6);
            Champ   borneInf       = new Champ(this.coordX + widthOfcase * bInf, this.coordY, 1, heightOfcase, widthOfcase, Brushes.Transparent, couleurBorneInf, 6);
            Champ   medCase        = new Champ();
            Champ   borneSupInd    = new Champ(this.coordX + widthOfcase * bSup + a, this.coordY + b, 2, 25, 25, couleurBorneSup, couleurBorneSup, 1);
            Champ   borneInfInd    = new Champ(this.coordX + widthOfcase * bInf + a, this.coordY + b, 2, 25, 25, couleurBorneInf, couleurBorneInf, 1);
            Champ   medCaseInd     = new Champ();

            borneSup.Forme.Opacity    = 0.7;
            borneInf.Forme.Opacity    = 0.7;
            borneSupInd.Forme.Opacity = 0.5;
            borneInfInd.Forme.Opacity = 0.5;
            borneSup.afficher(c);
            borneInf.afficher(c);
            borneSupInd.afficher(c);
            borneInfInd.afficher(c);
            tabInfo[0] = 0;
            Commentaire comBorneSup = new Commentaire("On positionne la borne supérieure \nà la positon du milieu -1 ", Brushes.Black, tab[bSup].CoordX + e, tab[bSup].CoordY + d, 188, 50, couleurBorneSup, couleurBorneSup);
            Commentaire comBorneInf = new Commentaire("On positionne la borne inférieure \nà la positon du milieu +1 ", Brushes.Black, tab[bInf].CoordX + e, tab[bInf].CoordY + d, 188, 50, couleurBorneInf, couleurBorneInf);
            Commentaire comMed      = new Commentaire("", Brushes.Black, tab[med].CoordX + e, tab[med].CoordY + d, 50, 50, couleurDeCaseMed, couleurDeCaseMed);

            comBorneSup.opacity = 0;
            comBorneInf.opacity = 0;
            comBorneSup.ajouterCanvas(c);
            comBorneInf.ajouterCanvas(c);

            while ((bInf <= bSup) && (tabInfo[0] == 0))
            {
                await algo.colorer(couleurAlgo, 3, Temps.time);

                med           = (bSup + bInf) / 2;
                comMed.Text   = "On positionne le \nmilieu du tableau";
                comMed.Height = 50;
                comMed.Width  = 100;
                comMed.CoordX = this.tab[med].CoordX + e;
                comMed.CoordY = this.tab[med].CoordY + d;
                if (firstIteration)
                {
                    medCase                  = new Champ(this.coordX + widthOfcase * med, this.coordY, 1, heightOfcase, widthOfcase, Brushes.Transparent, couleurDeCaseMed, 6);
                    medCaseInd               = new Champ(this.coordX + widthOfcase * med + a, this.coordY + b, 2, 25, 25, couleurDeCaseMed, couleurDeCaseMed, 1);
                    medCase.Forme.Opacity    = 0.7;
                    medCaseInd.Forme.Opacity = 0.5;
                    medCase.afficher(c);
                    medCaseInd.afficher(c);
                    firstIteration = false;
                    comMed.ajouterCanvas(c);
                    await algo.colorer(couleurAlgo, 4, Champ.time);

                    comMed.disparaitre(Champ.time);
                    await Task.Delay(TimeSpan.FromSeconds(Champ.time + 1));
                }
                else
                {
                    tabDepBSup[0].X       = this.coordX + widthOfcase * bSup;
                    tabDepBInf[0].X       = this.coordX + widthOfcase * bInf;
                    tabDepMedCase[0].X    = this.coordX + widthOfcase * med;
                    tabDepBSupInd[0].X    = this.coordX + widthOfcase * bSup + a;
                    tabDepBInfInd[0].X    = this.coordX + widthOfcase * bInf + a;
                    tabDepMedCaseInd[0].X = this.coordX + widthOfcase * med + a;
                    borneSup.deplacer(tabDepBSup, 1);
                    borneInf.deplacer(tabDepBInf, 1);
                    borneSupInd.deplacer(tabDepBSupInd, 1);
                    borneInfInd.deplacer(tabDepBInfInd, 1);
                    await Task.Delay(TimeSpan.FromSeconds(Champ.time + 1));

                    medCase.deplacer(tabDepMedCase, 1);
                    medCaseInd.deplacer(tabDepMedCaseInd, 1);
                    comMed.apparaitre(Champ.time);
                    await algo.colorer(couleurAlgo, 4, 2 *Temps.time);

                    comMed.disparaitre(Champ.time);
                    await Task.Delay(TimeSpan.FromSeconds(Champ.time + 1));

                    if (bSup != this.tailleTab)
                    {
                        for (i = bSup + 1; i < this.tailleTab; i++)
                        {
                            tab[i].colorChamp(Brushes.Gray, couleurBordureCase, 1);
                            tab[i].Forme.Opacity        = 0.2;
                            tab[i].TextBLock.Foreground = Brushes.Gray;
                        }
                    }
                    if (bInf != 0)
                    {
                        for (i = bInf - 1; i > -1; i--)
                        {
                            tab[i].colorChamp(Brushes.Gray, couleurBordureCase, 1);
                            tab[i].Forme.Opacity        = 0.2;
                            tab[i].TextBLock.Foreground = Brushes.Gray;
                        }
                    }
                    await Task.Delay(TimeSpan.FromSeconds(Temps.time));
                }

                if (tab[med].Valeur == val)
                {
                    tabInfo[0] = 1;
                }
                else
                {
                    await algo.colorer(couleurAlgo, 6, Temps.time);

                    if (tab[med].Valeur > val)
                    {
                        comMed.Text   = val + " est inférieure à la \nvaleur du milieu du tableau";
                        comMed.Height = 50;
                        comMed.Width  = 152;
                        comMed.apparaitre(Temps.time);
                        await algo.colorer(couleurAlgo, 9, 2 *Temps.time + 3);

                        await Task.Delay(TimeSpan.FromSeconds(Temps.time + 1.5));

                        comMed.disparaitre(Temps.time);
                        await Task.Delay(TimeSpan.FromSeconds(Temps.time + 1.5));

                        comBorneSup.CoordX = this.tab[bSup].CoordX + e;
                        comBorneSup.apparaitre(Temps.time);
                        await algo.colorer(couleurAlgo, 10, 2 *Temps.time);

                        comBorneSup.disparaitre(Temps.time);
                        await Task.Delay(TimeSpan.FromSeconds(Temps.time + 2));

                        bSup = med - 1;
                    }
                    else
                    {
                        comMed.Text   = val + " est supérieure à la \nvaleur du milieu du tableau";
                        comMed.Height = 50;
                        comMed.Width  = 152;
                        comMed.apparaitre(Temps.time);
                        await algo.colorer(couleurAlgo, 7, 2 *Temps.time);

                        comMed.disparaitre(Temps.time);
                        await Task.Delay(TimeSpan.FromSeconds(Temps.time + 1));

                        comBorneInf.CoordX = this.tab[bInf].CoordX + e;
                        comBorneInf.apparaitre(Temps.time);
                        await algo.colorer(couleurAlgo, 8, 2 *Temps.time);

                        comBorneInf.disparaitre(Temps.time);
                        await Task.Delay(TimeSpan.FromSeconds(Temps.time + 2));

                        bInf = med + 1;
                    }
                }
            }
            if (tabInfo[0] == 0)
            {
                tabDepBSup[0].X    = this.coordX + widthOfcase * bSup;
                tabDepBInf[0].X    = this.coordX + widthOfcase * bInf;
                tabDepBSupInd[0].X = this.coordX + widthOfcase * bSup + a;
                tabDepBInfInd[0].X = this.coordX + widthOfcase * bInf + a;
                borneSup.deplacer(tabDepBSup, 1);
                borneInf.deplacer(tabDepBInf, 1);
                borneSupInd.deplacer(tabDepBSupInd, 1);
                borneInfInd.deplacer(tabDepBInfInd, 1);
                await Task.Delay(TimeSpan.FromSeconds(Temps.time));

                if (bSup != this.tailleTab)
                {
                    for (i = bSup + 1; i < this.tailleTab; i++)
                    {
                        tab[i].colorChamp(Brushes.Gray, couleurBordureCase, 1);
                        tab[i].Forme.Opacity        = 0.2;
                        tab[i].TextBLock.Foreground = Brushes.Gray;
                    }
                }
                if (bInf != 0)
                {
                    for (i = bInf - 1; i > -1; i--)
                    {
                        tab[i].colorChamp(Brushes.Gray, couleurBordureCase, 1);
                        tab[i].Forme.Opacity        = 0.2;
                        tab[i].TextBLock.Foreground = Brushes.Gray;
                    }
                }
                await Task.Delay(TimeSpan.FromSeconds(0.5));

                tabInfo[1] = bInf;
                comPrincipal.disparaitre(Temps.time);
                await Task.Delay(TimeSpan.FromSeconds(Temps.time));

                comPrincipal.Width       = 350;
                comPrincipal.Height      = 50;
                comPrincipal.CouleurFond = Brushes.Red;
                comPrincipal.Text        = "Condition d'arrêt : Borne supérieure < Borne inférieure";
                comPrincipal.apparaitre(Temps.time);
            }
            else
            {
                await Task.Delay(TimeSpan.FromSeconds(Temps.time));

                await algo.colorer(couleurAlgo, 5, 2 *Temps.time);

                tabInfo[1] = med;
                for (i = 0; i < this.tailleTab; i++)
                {
                    this.tab[i].colorChamp(couleurFondCase, couleurBordureCase, 1);
                    this.tab[i].Forme.Opacity        = 1;
                    this.tab[i].TextBLock.Foreground = Brushes.Black;
                }
                c.Children.Remove(borneSup.Forme);
                c.Children.Remove(borneInf.Forme);
                c.Children.Remove(medCase.Forme);
                c.Children.Remove(borneSupInd.Forme);
                c.Children.Remove(borneInfInd.Forme);
                c.Children.Remove(medCaseInd.Forme);
                comPrincipal.disparaitre(Temps.time);
                await Task.Delay(TimeSpan.FromSeconds(Temps.time));

                comPrincipal.CouleurFond = couleurTrouv;
                await Task.Delay(TimeSpan.FromSeconds(0.5));

                comPrincipal.Text = "Valeur " + val + " a été trouvée";
                if (inserSupp)
                {
                    this.tab[med].colorChamp(couleurTrouv, couleurTrouv, 1);
                    this.tab[med].Forme.Opacity = 0.7;
                }
                else
                {
                    this.tab[med].colorChamp(couleurTrouv, couleurTrouv, 1);
                    this.tab[med].Forme.Opacity = 0.7;
                    // this.tab[med].vibrate(2, 19);
                }
                comPrincipal.apparaitre(Temps.time);
            }
            await Task.Delay(TimeSpan.FromSeconds(3));

            for (i = 0; i < this.tailleTab; i++)
            {
                this.tab[i].colorChamp(couleurFondCase, couleurBordureCase, 1);
                this.tab[i].Forme.Opacity        = 1;
                this.tab[i].TextBLock.Foreground = Brushes.Black;
            }
            comPrincipal.disparaitre(0.5);
            c.Children.Remove(borneSup.Forme);
            c.Children.Remove(borneInf.Forme);
            c.Children.Remove(medCase.Forme);
            c.Children.Remove(borneSupInd.Forme);
            c.Children.Remove(borneInfInd.Forme);
            c.Children.Remove(medCaseInd.Forme);
            comBorneInf.enleverCanvas(c);
            comBorneSup.enleverCanvas(c);
            comMed.enleverCanvas(c);
            await algo.colorer(couleurAlgo, 11, Temps.time);

            algo.disparaitre(Alg);
        }
        public async Task recherche_seq(int val, int[] tabInfo, Canvas c, Boolean insSup, Commentaire comPrincipal, Canvas Algo)
        {
            //recherche de la valeur val et returne indice qui se trouve dans tabInfo
            int i = 0;

            tabInfo[0] = 0;
            Algo            algo            = new Algo(15, coordX_Algo, coordY_Algo); //Création d'un algorithme de déroulement
            SolidColorBrush couleurparcours = Brushes.Red;
            SolidColorBrush couleurtrouve   = Brushes.Green;
            Commentaire     com             = new Commentaire(" ", Brushes.Black, this.coordX - 5, this.coordY - 35, 50, 50, couleurparcours, couleurparcours);

            comPrincipal.CouleurFond    = Brushes.Yellow;
            comPrincipal.CouleurBordure = Brushes.Black;
            comPrincipal.apparaitre(1);                          //Apparaitre le commentaire principale
            comPrincipal.Text = "Recherche en cours ...";
            algo.afficher(Algo);                                 //Affichage de l'algorithme
            await algo.colorer(couleurAlgo, 0, 0.5 *Temps.time); //Déroulement de l'algorithme

            await algo.colorer(couleurAlgo, 1, 0.5 *Temps.time);

            await algo.colorer(couleurAlgo, 2, 0.5 *Temps.time);

            await algo.colorer(couleurAlgo, 3, 0.5 *Temps.time);

            com.ajouterCanvas(c);
            com.disparaitre(0);
            com.opacity = 0;
            com.Height  = 30;
            com.Width   = 160;
            Fleche parcours = new Fleche(1);//Création de la fléche de parcourt

            parcours.Height      = tailleFleche;
            parcours.StrokeThick = 3;
            parcours.Color       = couleurparcours;
            parcours.L.Opacity   = 0.9;
            parcours.CoordY      = this.coordY + widthOfmaillon / 2;
            if (this.triee == false)                           //Si la liste n'est pas triée
            {
                while (i < this.list.Count && tabInfo[0] == 0) //Si on est pas arriver à la fin de la liste
                {
                    await algo.colorer(couleurAlgo, 4, 0.5 *Temps.time);

                    this.list[i].opacity = 0.7;
                    if (this.list[i].Valeur != val)//Si la valeur du maillon est différente de la valeur rechercher
                    {
                        com.CoordX = this.list[i].CoordX;
                        com.CoordY = this.list[i].CoordY - 35;
                        this.list[i].colorMaillon(couleurparcours, couleurBordureMaillon, 2);//On colorie en gris le maillon
                        this.list[i].colorCase(couleurparcours, couleurBordureMaillon, 2);
                        com.Text = "  " + this.list[i].Valeur + " est différent de " + val;
                        com.apparaitre(Temps.time);//On affiche le commantaire que la valeur du maillon est différente de la valeur rechercher
                        await algo.colorer(couleurAlgo, 7, 0.5 *Temps.time);

                        parcours.CoordX = list[i].Adr.CoordX;//On passe au coordonnée de la fléche du maillon suivant
                        parcours.bout   = new Bout(list[i].Adr.bout.coordX, list[i].Adr.bout.coordY, couleurparcours, list[i].Adr.bout.TypeBout, 2.5);
                        if (i < list.Count - 1)
                        {
                            await parcours.dessiner(Temps.time, c);                   //On dessine la fléche du partcourt
                        }
                        await algo.colorer(couleurAlgo, 8, Temps.time);

                        parcours.retirerCanvas(c);
                        com.disparaitre(0);
                        this.list[i].colorMaillon(couleurFondMaillon, couleurBordureMaillon, 2); tabInfo[1] = tabInfo[1] + 1;
                        this.list[i].colorCase(couleurFondMaillon, couleurBordureMaillon, 2);
                        await algo.colorer(couleurAlgo, 9, Temps.time);
                    }
                    else//Si on a trouver la valeur
                    {
                        await algo.colorer(couleurAlgo, 5, Temps.time);

                        tabInfo[0] = 1;//Indiquer qu'on a trouvé la valeur
                        comPrincipal.disparaitre(1);
                        comPrincipal.Text           = "La valeur " + val + " a été trouvée";
                        comPrincipal.CouleurFond    = couleurtrouve;
                        comPrincipal.CouleurBordure = couleurtrouve;
                        this.list[i].opacity        = 0.7;
                        comPrincipal.apparaitre(Temps.time);
                        await algo.colorer(couleurAlgo, 6, Temps.time);

                        if (insSup == false)//Si il n'y a pas d'insertion aprés
                        {
                            this.list[i].colorMaillon(couleurtrouve, couleurtrouve, 2);
                            this.list[i].colorCase(couleurtrouve, couleurtrouve, 2);
                            com.disparaitre(0);
                            this.list[i].clignoter(couleurtrouve, couleurtrouve, 2, 3);
                            await Task.Delay(TimeSpan.FromSeconds(4));
                        }
                        else
                        {
                            this.list[i].colorMaillon(couleurtrouve, couleurtrouve, 2);
                            this.list[i].colorCase(couleurtrouve, couleurtrouve, 2);
                            com.disparaitre(0);
                        }
                        await algo.colorer(couleurAlgo, 9, 0.5 *Temps.time);
                    }
                    await algo.colorer(couleurAlgo, 10, 0.2 *Temps.time);

                    i++;
                }
                await algo.colorer(couleurAlgo, 11, 0.2 *Temps.time);
            }
            else//Si la liste est triée
            {
                parcours.CoordX = heightOfmaillon + list[i].CoordX;
                while (i < this.list.Count && tabInfo[0] == 0 && list[i].Valeur <= val)//On s'arrete si on arrive à nil ou si on trouve une valeur supérieur à la valeur rechercher
                {
                    await algo.colorer(couleurAlgo, 4, 0.5 *Temps.time);

                    this.list[i].opacity = 0.7;
                    if (this.list[i].Valeur != val)
                    {
                        com.CoordX = this.list[i].CoordX;
                        com.CoordY = this.list[i].CoordY - 35;
                        this.list[i].colorMaillon(couleurparcours, couleurBordureMaillon, 2);
                        this.list[i].colorCase(couleurparcours, couleurBordureMaillon, 2);
                        com.Text = "  " + this.list[i].Valeur + " est différent de " + val;
                        com.apparaitre(Temps.time);//faire apparaitre le commentaire
                        await algo.colorer(couleurAlgo, 7, 0.5 *Temps.time);

                        parcours.CoordX = list[i].Adr.CoordX;
                        parcours.bout   = new Bout(list[i].Adr.bout.coordX, list[i].Adr.bout.coordY, couleurparcours, list[i].Adr.bout.TypeBout, 2.5);
                        if (i < list.Count - 1)
                        {
                            await parcours.dessiner(Temps.time, c);
                        }
                        await algo.colorer(couleurAlgo, 8, Temps.time);

                        com.disparaitre(0);//faire disparaitre le commentaire
                        parcours.retirerCanvas(c);
                        this.list[i].colorMaillon(couleurFondMaillon, couleurBordureMaillon, 2); tabInfo[1] = tabInfo[1] + 1;
                        this.list[i].colorCase(couleurFondMaillon, couleurBordureMaillon, 2);
                    }
                    else//Si on trouver la valeur
                    {
                        await algo.colorer(couleurAlgo, 5, Temps.time);

                        tabInfo[0] = 1;
                        comPrincipal.disparaitre(1);
                        comPrincipal.Text           = "La valeur " + val + " a été trouvée";
                        comPrincipal.CouleurFond    = couleurtrouve;
                        comPrincipal.CouleurBordure = couleurtrouve;
                        this.list[i].opacity        = 0.7;
                        comPrincipal.apparaitre(Temps.time);
                        await algo.colorer(couleurAlgo, 6, Temps.time);

                        if (insSup == false)//si la recherche est suivie d'une insértion/suppression
                        {
                            this.list[i].colorMaillon(couleurtrouve, couleurtrouve, 2);
                            this.list[i].colorCase(couleurtrouve, couleurtrouve, 2);
                            com.disparaitre(0);//faire disparaitre le commentaire
                            this.list[i].clignoter(couleurtrouve, couleurtrouve, 2, 4);
                            await Task.Delay(TimeSpan.FromSeconds(4));
                        }
                        else
                        {
                            this.list[i].colorMaillon(couleurtrouve, couleurtrouve, 2);
                            this.list[i].colorCase(couleurtrouve, couleurtrouve, 2);
                            com.disparaitre(0);//faire disparaitre le commentaire
                        }
                        await algo.colorer(couleurAlgo, 9, 0.5 *Temps.time);
                    }
                    await algo.colorer(couleurAlgo, 10, 0.5 *Temps.time);

                    i++;
                }
                await algo.colorer(couleurAlgo, 11, 0.5 *Temps.time);
            }
            if (tabInfo[0] == 0)//Si on a pas trouvé la valeur
            {
                comPrincipal.disparaitre(2.5);
                comPrincipal.Width          = 200;
                comPrincipal.Text           = "La valeur " + val + " n'a pas été trouvée";
                comPrincipal.CouleurFond    = couleurparcours;
                comPrincipal.CouleurBordure = couleurparcours;
                comPrincipal.apparaitre(Temps.time);
                com.enleverCanvas(c);
                if (!triee)
                {
                    tabInfo[1] = tabInfo[1] - 1;
                }
            }
            comPrincipal.disparaitre(2);
            await algo.colorer(couleurAlgo, 12, Temps.time);

            algo.disparaitre(Algo);           //faire disparaitre l'algorithme déroulant
            foreach (Maillon maillon in list) //Remettre les maillons de la liste en leurs couleurs d'origine
            {
                maillon.colorMaillon(couleurFondMaillon, couleurBordureMaillon, 2);
                maillon.colorCase(couleurFondCase, couleurBordureMaillon, 2);
            }
        }
        public async Task insert(int val, Canvas c, Commentaire comPrincipal, Canvas Algo)
        {
            //Insertion de la valeur val dans la liste
            int[] tabInfo = new int[2];
            int   pos     = 0;
            Algo  algo    = new Algo(11, coordX_Algo, coordY_Algo);

            if (list.Count != 0)//Recherche si la valeur existe dans la liste
            {
                await recherche_seq(val, tabInfo, c, true, comPrincipal, Algo);

                await Task.Delay(2000);
            }
            if (tabInfo[0] == 0)//Si la valeur n'existe pas
            {
                comPrincipal.Text           = "Insertion en cours...";
                comPrincipal.CouleurFond    = Brushes.Yellow;
                comPrincipal.CouleurBordure = Brushes.Black;
                comPrincipal.apparaitre(0); //faire apparaitre le commentaire
                algo.afficher(Algo);        //faire apparaitre l'algorithme déroulant
                await algo.colorer(couleurAlgo, 0, Temps.time);

                if (this.triee)
                {
                    pos = tabInfo[1];
                }
                Commentaire com = new Commentaire("Insertion au début de la liste", Brushes.Black, coordX + (pos) * (heightOfmaillon + tailleFleche + 5) + 10, coordY - widthOfmaillon, 200, 30, Brushes.PaleTurquoise, Brushes.White);
                if (triee && pos != 0)
                {
                    com.Text = "Insertion à la position : " + pos;
                }
                Point[] tabPoint = new Point[1];
                list.Add(new Maillon());                        //ajouter le maillon dans la liste
                /******Déroulement de l'algorithme******/
                if ((pos == this.list.Count - 1) && (pos != 0)) //insértion en fin de liste
                {
                    await algo.colorer(couleurAlgo, 4, 0.5 *Temps.time);

                    await algo.colorer(couleurAlgo, 5, 0.5 *Temps.time);
                }
                else if (list.Count - 1 == 0)//insértion en début de liste
                {
                    await algo.colorer(couleurAlgo, 1, 0.5 *Temps.time);
                }
                else//insértion au milieu de la liste
                {
                    await algo.colorer(couleurAlgo, 4, 0.5 *Temps.time);

                    await algo.colorer(couleurAlgo, 5, 0.5 *Temps.time);
                }
                for (int i = list.Count - 2; i >= pos; i--)      //Décalages des maillons pour l'insertion
                {
                    tabPoint[0] = new Point(coordX + (i + 1) * (heightOfmaillon + tailleFleche + 5) + 10, this.coordY);
                    list[i].deplacer(tabPoint, 1);
                    if (i != list.Count - 2)
                    {
                        list[i].Adr.decaler(coordX + (i + 2) * (heightOfmaillon + tailleFleche + 5) - tailleFleche + 5, coordX + (i + 2) * (heightOfmaillon + tailleFleche + 5));
                    }
                    else
                    {
                        list[i].Adr.retirerCanvas(c);
                        list[i].Adr = new Fleche(coordX + (i + 2) * (heightOfmaillon + tailleFleche + 5) - tailleFleche, list[i].Adr.CoordY, list[i].Adr.Color, (list.Count - 1) * (heightOfmaillon + tailleFleche + 5) + heightOfmaillon + 5, 5, 1);
                        list[i].Adr.dessiner(Temps.time, c);
                    }
                    list[i + 1] = list[i];
                }
                if ((pos == this.list.Count - 1) && (pos != 0))//Si le maillon a inséré est à la fin de la liste
                {
                    list[pos] = new Maillon(val, coordX + (pos) * (heightOfmaillon + tailleFleche + 5) + 10, this.coordY, widthOfmaillon, heightOfmaillon, couleurFondMaillon, couleurBordureMaillon, 2, 5, 1, (list.Count - 1) * (heightOfmaillon + tailleFleche + 5) + heightOfmaillon + 5);
                    list[pos - 1].Adr.retirerCanvas(c);
                    list[pos - 1].Adr = new Fleche(list[pos - 1].CoordX + heightOfmaillon - 5, list[pos - 1].Adr.CoordY, list[pos - 1].Adr.Color, tailleFleche, 1, 1);
                    list[pos - 1].Adr.dessiner(Temps.time, c);
                }
                else if (list.Count - 1 == 0)//Si la liste est vide
                {
                    list[pos] = new Maillon(val, coordX + (pos) * (heightOfmaillon + tailleFleche + 5) + 10, this.coordY, widthOfmaillon, heightOfmaillon, couleurFondMaillon, couleurBordureMaillon, 2, 5, 1, heightOfmaillon + 5);
                }
                else
                {
                    list[pos] = new Maillon(val, coordX + (pos) * (heightOfmaillon + tailleFleche + 5) + 10, this.coordY, widthOfmaillon, heightOfmaillon, couleurFondMaillon, couleurBordureMaillon, 2, 1, 1, tailleFleche);
                }
                list[pos].appear(c);                            //faire apparaitre le maillon à insérer
                com.ajouterCanvas(c);                           //ajouter le commentaire
                if ((pos == this.list.Count - 1) && (pos != 0)) //insértion en fin de liste
                {
                    await algo.colorer(couleurAlgo, 6, 0.5 *Temps.time);

                    await algo.colorer(couleurAlgo, 7, 0.5 *Temps.time);
                }
                else if (list.Count - 1 == 0)//insértion en début de liste
                {
                    await algo.colorer(couleurAlgo, 2, 0.5 *Temps.time);

                    await algo.colorer(couleurAlgo, 3, 0.5 *Temps.time);
                }
                else//insértion au milieu de la liste
                {
                    await algo.colorer(couleurAlgo, 6, 0.5 *Temps.time);

                    await algo.colorer(couleurAlgo, 7, 0.5 *Temps.time);
                }
                com.apparaitre(0.5);   // faire apparaitre le commentaire
                com.disparaitre(2000); //faire disparaitre le commentaire
                await Task.Delay(2000);

                await algo.colorer(couleurAlgo, 8, Temps.time);

                com.enleverCanvas(c);
            }
            else//si la valeur a été trouvée dans la liste
            {
                comPrincipal.Text           = "Insertion impossible.\nLa valeur existe déjà";
                comPrincipal.CouleurFond    = Brushes.Red;
                comPrincipal.CouleurBordure = Brushes.Red;
                comPrincipal.apparaitre(0);//faire apparaitre le commentaire
                await Task.Delay(2000);
            }
            comPrincipal.disparaitre(1); //faire disparaitre le commentaire
            algo.disparaitre(Algo);      //faire disparaitre l'algorithme déroulant
        }
Exemple #7
0
        public async Task insert(int val, Canvas c, Commentaire comPrincipal, Canvas Alg)
        {
            int[] tabInfo = new int[2];
            int   pos     = 0;
            Algo  algo    = new Algo(13, coordX_Algo, coordY_Algo);

            if (list.Count != 0)
            {
                await recherche_seq(val, tabInfo, c, true, comPrincipal, Alg); //recherche de la valeur dans la liste
            }
            if (tabInfo[0] == 0)                                               //si la valeur n'existe pas dans la liste
            {
                comPrincipal.Text           = "Insertion en cours...";
                comPrincipal.CouleurFond    = Brushes.Yellow;
                comPrincipal.CouleurBordure = Brushes.Black;
                comPrincipal.apparaitre(0); // faire apparaitre le commentaire
                algo.afficher(Alg);         // faire apparaitre l'algorithme déroulant
                await algo.colorer(couleurAlgo, 0, Temps.time);

                if (this.triee)
                {
                    pos = tabInfo[1];
                }
                Commentaire com = new Commentaire("Insertion à la tête de la liste", Brushes.Black, coordX + (pos) * (heightOfmaillon + tailleFleche + 5) + 10, coordY - widthOfmaillon, 200, 30, Brushes.PaleTurquoise, Brushes.White);
                if (triee && pos != 0)
                {
                    com.Text = "Insertion à la position : " + pos;
                }
                Point[] tabPoint = new Point[1];
                list.Add(new Maillon_bi()); //ajouter le maillon dans la liste
                if (list.Count - 1 == 0)    //si la liste est vide
                {
                    await algo.colorer(couleurAlgo, 1, Temps.time);

                    await algo.colorer(couleurAlgo, 2, Temps.time);
                }
                else if (pos == 0)//insértion à la première position
                {
                    await algo.colorer(couleurAlgo, 5, 0.5 *Temps.time);

                    await algo.colorer(couleurAlgo, 6, 0.5 *Temps.time);
                }
                else if (pos == this.list.Count - 1)//insértion à la dernière position
                {
                    await algo.colorer(couleurAlgo, 5, 0.5 *Temps.time);

                    await algo.colorer(couleurAlgo, 6, 0.5 *Temps.time);
                }
                else//insértion au milieu de la liste
                {
                    await algo.colorer(couleurAlgo, 5, 0.5 *Temps.time);

                    await algo.colorer(couleurAlgo, 6, 0.5 *Temps.time);
                }
                for (int i = list.Count - 1; i > pos; i--)//décalage des maillon pour l'insértion
                {
                    tabPoint[0] = new Point(coordX + i * (heightOfmaillon + tailleFleche) + tailleFleche, this.coordY);
                    list[i - 1].deplacer(tabPoint, 1);
                    list[i - 1].Adr.decaler(tabPoint[0].X + heightOfmaillon - 5, tabPoint[0].X + heightOfmaillon + tailleFleche - 5);
                    list[i - 1].Prec.decaler(tabPoint[0].X + 5, tabPoint[0].X - tailleFleche + 5);
                    list[i] = list[i - 1];
                }
                if (list.Count - 1 == 0)//liste vide
                {
                    list[0] = new Maillon_bi(val, coordX + tailleFleche, coordY, widthOfmaillon, heightOfmaillon, couleurFondMaillon, couleurBordureMaillon, 2, 2, 1, 3, 3, tailleFleche);
                }
                else if (pos == 0)//insértion en début de liste
                {
                    list[pos] = new Maillon_bi(val, coordX + (pos) * (heightOfmaillon + tailleFleche) + tailleFleche, this.coordY, widthOfmaillon, heightOfmaillon, couleurFondMaillon, couleurBordureMaillon, 2, 2, 1, 3, 1, tailleFleche);
                    list[1].Prec.retirerCanvas(c);
                    list[1].Prec = new Fleche(list[0].Adr.CoordX + tailleFleche + 10, list[1].Prec.CoordY, list[1].Prec.Color, tailleFleche, 2, 2);
                }
                else if (pos == this.list.Count - 1)//insértion en fin de liste
                {
                    list[pos] = new Maillon_bi(val, coordX + (pos) * (heightOfmaillon + tailleFleche) + tailleFleche, this.coordY, widthOfmaillon, heightOfmaillon, couleurFondMaillon, couleurBordureMaillon, 2, 2, 1, 2, 3, tailleFleche);
                    list[pos - 1].Adr.retirerCanvas(c);
                    list[pos - 1].Adr = new Fleche(list[pos - 1].CoordX + heightOfmaillon - 5, list[pos - 1].Adr.CoordY, list[pos - 1].Adr.Color, tailleFleche, 1, 1);
                    await list[pos - 1].Adr.dessiner(Temps.time, c);
                }
                else//insértion au milieu
                {
                    list[pos] = new Maillon_bi(val, coordX + (pos) * (heightOfmaillon + tailleFleche) + tailleFleche, this.coordY, widthOfmaillon, heightOfmaillon, couleurFondMaillon, couleurBordureMaillon, 2, 2, 1, 2, 1, tailleFleche);
                }
                list[pos].appear(c);//faire apparaitre le maillon à insérer
                if (list.Count - 1 != 0 && pos == 0)
                {
                    await list[1].Prec.dessiner(Temps.time, c);
                }
                com.ajouterCanvas(c);
                com.apparaitre(0.5);     //faire apparaitre le commentaire
                if (list.Count - 1 == 0) //liste vide
                {
                    await algo.colorer(couleurAlgo, 3, Temps.time);

                    await algo.colorer(couleurAlgo, 4, Temps.time);
                }
                else if (pos == 0)//insértion en début de liste
                {
                    await algo.colorer(couleurAlgo, 7, 0.5 *Temps.time);

                    await algo.colorer(couleurAlgo, 8, 0.5 *Temps.time);

                    await algo.colorer(couleurAlgo, 9, 0.5 *Temps.time);

                    await algo.colorer(couleurAlgo, 10, 0.5 *Temps.time);
                }
                else if (pos == this.list.Count - 1)//insértion en fin de liste
                {
                    await algo.colorer(couleurAlgo, 7, 0.5 *Temps.time);

                    await algo.colorer(couleurAlgo, 8, 0.5 *Temps.time);

                    await algo.colorer(couleurAlgo, 9, 0.5 *Temps.time);

                    await algo.colorer(couleurAlgo, 10, 0.5 *Temps.time);
                }
                else//insértion au milieu de la liste
                {
                    await algo.colorer(couleurAlgo, 7, 0.5 *Temps.time);

                    await algo.colorer(couleurAlgo, 8, 0.5 *Temps.time);

                    await algo.colorer(couleurAlgo, 9, 0.5 *Temps.time);

                    await algo.colorer(couleurAlgo, 10, 0.5 *Temps.time);
                }
                com.disparaitre(2000);//faire disparaitre le commentaire
                await Task.Delay(2000);

                await algo.colorer(couleurAlgo, 11, Temps.time);

                com.enleverCanvas(c);//faire disparaitre le commentaire
            }
            else//si la valeur a été trouvée dans la liste
            {
                comPrincipal.Text           = "Insertion impossible.\nLa valeur existe déjà";
                comPrincipal.CouleurFond    = Brushes.Red;
                comPrincipal.CouleurBordure = Brushes.Red;
                comPrincipal.apparaitre(0);// faire apparaitre le commentaire
                await Task.Delay(2000);
            }
            comPrincipal.disparaitre(1); //faire disparaitre le commentaire
            algo.disparaitre(Alg);       //faire disparaitre l'algorithme déroulant
        }
Exemple #8
0
        public async Task recherche_seq_qeue(int val, int[] tabInfo, Canvas c, Boolean insSup, Commentaire comPrincipal, Canvas Alg)
        {
            //recherche de la valeur val et returne indice qui se trouve dans tabInfo
            int i = list.Count - 1;

            tabInfo[0] = 0;
            Algo            algo            = new Algo(12, coordX_Algo, coordY_Algo); //Création d'un algorithme de déroulement
            SolidColorBrush couleurparcours = Brushes.Red;
            SolidColorBrush couleurtrouve   = Brushes.Green;
            Commentaire     com             = new Commentaire(" ", Brushes.Black, this.coordX - 5, this.coordY - 35, 50, 50, couleurparcours, couleurparcours);

            comPrincipal.CouleurFond    = Brushes.Yellow;
            comPrincipal.CouleurBordure = Brushes.Black;
            comPrincipal.apparaitre(1);
            comPrincipal.Text = "Recherche en cours ...";
            algo.afficher(Alg);                                  //Affichage de l'algorithme
            await algo.colorer(couleurAlgo, 0, 0.5 *Temps.time); //Déroulement de l'algorithme

            await algo.colorer(couleurAlgo, 1, 0.5 *Temps.time);

            await algo.colorer(couleurAlgo, 2, 0.5 *Temps.time);

            await algo.colorer(couleurAlgo, 3, 0.5 *Temps.time);

            com.ajouterCanvas(c);
            com.disparaitre(0);
            com.opacity = 0;
            com.Height  = 30;
            com.Width   = 160;
            Fleche parcours = new Fleche(1);

            parcours.Height      = -tailleFleche;
            parcours.StrokeThick = 3;
            parcours.Color       = couleurparcours;
            parcours.L.Opacity   = 0.9;
            parcours.CoordY      = this.coordY + 2 * widthOfmaillon / 3;
            if (this.triee == false)             //Si la liste n'est pas triée
            {
                while (i >= 0 & tabInfo[0] == 0) //Si on est pas arriver à la fin de la liste
                {
                    await algo.colorer(couleurAlgo, 4, 0.5 *Temps.time);

                    this.list[i].opacity = 0.7;
                    if (this.list[i].Valeur != val)//Si la valeur du maillon est différente de la valeur rechercher
                    {
                        com.CoordX = this.list[i].CoordX;
                        com.CoordY = this.list[i].CoordY - 35;
                        this.list[i].colorMaillon(couleurparcours, couleurBordureMaillon, 2);//On colorie en gris le maillon
                        this.list[i].colorCase(couleurparcours, couleurBordureMaillon, 2);
                        com.Text = "  " + this.list[i].Valeur + " est différent de " + val;
                        com.apparaitre(Temps.time);//On affiche le commantaire que la valeur du maillon est différente de la valeur rechercher
                        await algo.colorer(couleurAlgo, 7, 0.5 *Temps.time);

                        parcours.CoordX = list[i].Prec.CoordX;
                        parcours.bout   = new Bout(list[i].Prec.bout.coordX, list[i].Prec.bout.coordY, couleurparcours, list[i].Prec.bout.TypeBout, 2.5);
                        await parcours.dessiner(Temps.time, c);

                        await algo.colorer(couleurAlgo, 8, Temps.time);

                        parcours.retirerCanvas(c);
                        com.disparaitre(0);
                        this.list[i].colorMaillon(Brushes.Gainsboro, couleurBordureMaillon, 2); tabInfo[1] = tabInfo[1] + 1;
                        this.list[i].colorCase(Brushes.Gainsboro, couleurBordureMaillon, 2);
                    }
                    else//Si on a trouver la valeur
                    {
                        await algo.colorer(couleurAlgo, 5, Temps.time);

                        tabInfo[0] = 1;
                        comPrincipal.disparaitre(1);
                        comPrincipal.Text           = "La valeur " + val + " a été trouvée";
                        comPrincipal.CouleurFond    = couleurtrouve;
                        comPrincipal.CouleurBordure = couleurtrouve;
                        this.list[i].opacity        = 0.7;
                        comPrincipal.apparaitre(Temps.time);
                        await algo.colorer(couleurAlgo, 6, Temps.time);

                        if (insSup == false)
                        {
                            this.list[i].colorMaillon(couleurtrouve, couleurtrouve, 2);
                            this.list[i].colorCase(couleurtrouve, couleurtrouve, 2);
                            com.disparaitre(0);
                            // this.list[i].vibrate(4, 19);
                            this.list[i].clignoter(couleurtrouve, couleurtrouve, 2, 3);
                            await Task.Delay(TimeSpan.FromSeconds(4));
                        }
                        else
                        {
                            this.list[i].colorMaillon(couleurtrouve, couleurtrouve, 2);
                            this.list[i].colorCase(couleurtrouve, couleurtrouve, 2);
                            com.disparaitre(0);
                        }
                        await algo.colorer(couleurAlgo, 9, 0.5 *Temps.time);
                    }
                    i--;
                    await algo.colorer(couleurAlgo, 10, 0.2 *Temps.time);
                }
                await algo.colorer(couleurAlgo, 11, 0.2 *Temps.time);
            }
            else
            {
                parcours.CoordX = heightOfmaillon + list[i].CoordX;
                while (i >= 0 && tabInfo[0] == 0 && list[i].Valeur >= val)
                {
                    await algo.colorer(couleurAlgo, 4, 0.5 *Temps.time);

                    this.list[i].opacity = 0.7;
                    if (this.list[i].Valeur != val)
                    {
                        com.CoordX = this.list[i].CoordX;
                        com.CoordY = this.list[i].CoordY - 35;
                        this.list[i].colorMaillon(couleurparcours, couleurBordureMaillon, 2);
                        this.list[i].colorCase(couleurparcours, couleurBordureMaillon, 2);
                        com.Text = "  " + this.list[i].Valeur + " est différent de " + val;
                        com.apparaitre(Temps.time);
                        await algo.colorer(couleurAlgo, 7, 0.5 *Temps.time);

                        parcours.CoordX = list[i].Prec.CoordX;
                        parcours.bout   = new Bout(list[i].Prec.bout.coordX, list[i].Prec.bout.coordY, couleurparcours, list[i].Prec.bout.TypeBout, 2.5);
                        await parcours.dessiner(Temps.time, c);

                        await algo.colorer(couleurAlgo, 8, Temps.time);

                        parcours.retirerCanvas(c);
                        com.disparaitre(0);
                        this.list[i].colorMaillon(Brushes.Gainsboro, couleurBordureMaillon, 2); tabInfo[1] = tabInfo[1] + 1;
                        this.list[i].colorMaillon(Brushes.Gainsboro, couleurBordureMaillon, 2);
                    }
                    else//Si on trouver la valeur
                    {
                        await algo.colorer(couleurAlgo, 5, Temps.time);

                        tabInfo[0] = 1;
                        comPrincipal.disparaitre(1);
                        comPrincipal.Text           = "La valeur " + val + " a été trouvée";
                        comPrincipal.CouleurFond    = couleurtrouve;
                        comPrincipal.CouleurBordure = couleurtrouve;
                        this.list[i].opacity        = 0.7;
                        comPrincipal.apparaitre(Temps.time);
                        await algo.colorer(couleurAlgo, 6, Temps.time);

                        if (insSup == false)//si la recherche n'est pas suivie d'une insértion/suppression
                        {
                            this.list[i].colorMaillon(couleurtrouve, couleurtrouve, 2);
                            this.list[i].colorCase(couleurtrouve, couleurtrouve, 2);
                            com.disparaitre(0);
                            this.list[i].clignoter(couleurtrouve, couleurtrouve, 2, 3);
                            await Task.Delay(TimeSpan.FromSeconds(4));
                        }
                        else
                        {
                            this.list[i].colorMaillon(couleurtrouve, couleurtrouve, 2);
                            this.list[i].colorCase(couleurtrouve, couleurtrouve, 2);
                            com.disparaitre(0);
                        }
                        await algo.colorer(couleurAlgo, 9, 0.5 *Temps.time);
                    }
                    await algo.colorer(couleurAlgo, 10, 0.5 *Temps.time);

                    i--;
                }
                await algo.colorer(couleurAlgo, 11, 0.5 *Temps.time);
            }
            if (tabInfo[0] == 0)
            {
                comPrincipal.disparaitre(2.5);// faire disparaitre le commentaire
                comPrincipal.Text           = "La valeur " + val + " n'a pas été trouvée";
                comPrincipal.CouleurFond    = couleurparcours;
                comPrincipal.CouleurBordure = couleurparcours;
                comPrincipal.apparaitre(Temps.time);//apparition du commentaire
                com.enleverCanvas(c);
                if (!triee)
                {
                    tabInfo[1] = tabInfo[1] + 1;        //si la liste n'est pas triée
                }
            }
            comPrincipal.disparaitre(2);//faire disparaitre le commentaire
            await algo.colorer(couleurAlgo, 12, Temps.time);

            algo.disparaitre(Alg);//faire disparaitre l'algorithme déroulant
            foreach (Maillon maillon in list)
            {
                maillon.colorMaillon(couleurFondMaillon, couleurBordureMaillon, 2);
                maillon.colorCase(couleurFondCase, couleurBordureMaillon, 2);
            }
        }