// Méthode permettant de retourner le poids atomique // d'un composé chimique. public double CalculerPoids() { // Pile servant à faire le calcul. Stack unePile = new Stack(); // Variables de manipulations pour faciliter la // compréhension. string unJeton; double nombre=0; double nombreDépiler=0; double résultat=0; // Permet de parcourir chacun des jetons d'un composé // chimique et pour effectuer le calcul. foreach (string jeton in this) { // On vérifie si le jeton est une lettre (abréviation). // On conserve l'élément et on ajoute le poids dans // la pile. if(Char.IsLetter(jeton,0)) { if(tabPériode[jeton] != null) { élément = tabPériode[jeton]; unePile.Push(élément.PoidsAtomique); } else { throw new NullReferenceException("Erreur: Élément " + "chimique inexistant"); } } // On vérifie si le jeton est une parenthèse fermante. // On empile la parenthèse. if(jeton[0] == '(') { unJeton = jeton[0].ToString(); unePile.Push(unJeton); } // On vérifie si le jeton est un nombre. On dépile un // nombre que l'on place dans une variable. On envoie // le jeton actuel dans une autre variable et on multiplie // les deux variables entre elles. Ensuite, on empile le // résultat. if(Char.IsNumber(jeton,0)) { nombreDépiler = (double)unePile.Pop(); nombre = Double.Parse(jeton); résultat = nombre * nombreDépiler; unePile.Push(résultat); } // On vérifie si le jeton est une parenthèse fermante. // On dépile tant que l'on ne dépile pas une parenthèse // ouvrante. Ensuite, on fait la somme des éléments dépilés // et on empile le résultat de cette somme. if(jeton[0] == ')') { while (jeton[0] != '(') { unJeton= unePile.Pop().ToString(); nombreDépiler = Double.Parse(unJeton); unJeton = jeton[0].ToString(); nombre = Double.Parse(unJeton); résultat = nombre + nombreDépiler; } unePile.Push(résultat); } } // On fait la somme des éléments restant dans la pile tant que cela // est nécessaire. On obtient ainsi le résultat soit le poids // atomique du composé chimique. while(unePile.Count > 0) { résultat += (Double)unePile.Pop(); } return résultat; }