All pastes #29837 Raw Edit

Stuff

public text v1 · immutable
#29837 ·published 2005-11-21 01:38 UTC
rendered paste body
// 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;
		}