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 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); } }