private void GeneriereGleichungen_Click(object sender, RoutedEventArgs e) { SaeureEingabeTextBox.TextDocument.GetText(Windows.UI.Text.TextGetOptions.UseObjectText, out string saeureFormel); if (String.IsNullOrEmpty(saeureFormel)) { // Suche nun in der DropDown if (SaeureAuswahlComboBox.SelectedIndex == -1) { return; } saeureFormel = (string)((ComboBoxItem)SaeureAuswahlComboBox.SelectedValue).Tag; } LaugeEingabeTextBox.TextDocument.GetText(Windows.UI.Text.TextGetOptions.UseObjectText, out string laugeFormel); if (String.IsNullOrEmpty(laugeFormel)) { // Suche nun in der DropDown if (LaugeAuswahlComboBox.SelectedIndex == -1) { return; } laugeFormel = (string)((ComboBoxItem)LaugeAuswahlComboBox.SelectedValue).Tag; } saeureLaugeReaktionsResultat.Clear(); Lauge lauge = null; if (laugeFormel.Equals("NH₃")) { lauge = new Ammoniak(); } else { lauge = new Lauge(laugeFormel); } Saeure saeure = new Saeure(saeureFormel); SaeureLaugeReaktion reaktion = new SaeureLaugeReaktion(saeure, lauge); reaktion.BeginneReaktion(); ReaktionsgleichungenControl.ItemsSource = new List <Object>(); ReaktionsgleichungenControl.ItemsSource = reaktion.ReaktionsResultate; }
public override void BeginneReaktion() { // Erhalte die ionisierten Saeurevarianten der Saeure. Die Anzahl der Protonen // in der Saeure gibt die Anzahl der Varianten an, da jeweils Protonen im // Saeurerest sich anlagern koennen List <(Kation wasserstoffIon, Anion saeurerestIon)> saeureVariationen = ReagierendeSaeure.ErhalteIonisierteSaeurevarianten(); // Generiere fuer jede Saerevariante eine Reaktionsgleichung foreach ((Kation wasserstoffIon, Anion saeurerestIon)saeureVariation in saeureVariationen) { // Definiere die benoetigten Komponenenten, damit ihrer Anzahl gesezt werden kann Reaktionsstoff laugeKomponente = new Reaktionsstoff(ReagierendeLauge); Reaktionsstoff saeureKomponente = new Reaktionsstoff(ReagierendeSaeure); Salz salz = null; // UeberprUefe, ob es sich bei der Lauge um Ammoniak handelt if (ReagierendeLauge is Ammoniak) { // Es handelt sich bei der Lauge um Ammoniak Ammoniak ammoniak = ReagierendeLauge as Ammoniak; // Erstelle das Ammonium-Ion Kation ammonium = new Kation(new Molekuel(new Atombindung("NH₄", "Ammonium"), 1), 1); // Erstelle das Salz aus dem Ammonium-Ion und dem Saeurerest-Ion salz = new Salz(ammonium, saeureVariation.saeurerestIon); // Setze die Anzahl der Lauge gleich der Anzahl der Ammonium-Moeluele laugeKomponente.Anzahl = salz.Kation.Molekuel.Anzahl; // Erstelle die restlichen Reaktionsstoffe Reaktionsstoff salzKomponente = new Reaktionsstoff(salz); // Setze die Anzahl der restlichen Komponenten gleich eins saeureKomponente.Anzahl = 1; salzKomponente.Anzahl = 1; // Fuege der Liste der Reaktionen diese Reaktion hinzu ReaktionsResultate.Add(new SaeureLaugeReaktionsResultat(saeureKomponente, laugeKomponente, salzKomponente, null)); } else { // Es handelt sich bei der Lauge um ein Metallhydroxid Metall metall = ReagierendeLauge.Metall.Atombindung.ErhalteElement() as Metall; // Erstelle das Metall-Ion Kation metallIon = new Kation(new Molekuel(new Atombindung(metall, 1), 1)); // Erstelle das Salz aus dem Metall-Ion und dem Saeurerest-Ion salz = new Salz(metallIon, saeureVariation.saeurerestIon); // Erstelle die Wasserstoffbindung Atombindung wasser = new Atombindung("H₂O", "Wasser"); // Erstelle die restlichen Reaktionsstoffe Reaktionsstoff wasserKomponente = new Reaktionsstoff(wasser); Reaktionsstoff salzKomponente = new Reaktionsstoff(salz); //Falls die Anzahl der Metall-Atome in der Lauge gleich dem im Salz sind if (ReagierendeLauge.Metall.AnzahlAtomeInMolekuel() == salz.Kation.Molekuel.AnzahlAtomeInMolekuel()) { // Die Anzahl der Metall-Atome in der Lauge, sowie im Salz sind identisch // => Anzahl Lauge und Salz auf 1 setzen laugeKomponente.Anzahl = 1; salzKomponente.Anzahl = 1; } //Falls die Anzahl der Metall-Atome in der Lauge groeßer dem im Salz sind else if (ReagierendeLauge.Metall.AnzahlAtomeInMolekuel() > salz.Kation.Molekuel.AnzahlAtomeInMolekuel()) { // Die Anzahl der Metall-Atome in der Lauge sind groeßer als die im Salz // => Anzahl Lauge auf 1 setzen und die Anzahl des Salzes berechnen laugeKomponente.Anzahl = 1; salzKomponente.Anzahl = ReagierendeLauge.Metall.AnzahlAtomeInMolekuel() / salz.Kation.Molekuel.AnzahlAtomeInMolekuel(); } //Falls die Anzahl der Metall-Atome in der Lauge kleiner dem im Salz sind else { // Die Anzahl der Metall-Atome in der Lauge sind geringer als die im Salz // => Anzahl Lauge berechnen und die Anzahl des Salzes auf 1 setzen laugeKomponente.Anzahl = salz.Kation.Molekuel.AnzahlAtomeInMolekuel() / ReagierendeLauge.Metall.AnzahlAtomeInMolekuel(); salzKomponente.Anzahl = 1; } // Die Anzahl der Saeure entspricht die Anzahl des Saeurerest-Ions // => Saeure um die Anzahl des Saeurerestions multiplizieren saeureKomponente.Anzahl = salzKomponente.Anzahl * salz.Anion.Molekuel.Anzahl; // Erhalte die Anzahl der Wasserstoffatome in der Saeure double wasserstoffAtomeInSaeure = saeureKomponente.Anzahl * ReagierendeSaeure.Wasserstoff.AnzahlAtomeInMolekuel(); // Erhalte die Anzahl der Wasserstoffatome im Salz double wasserstoffAtomeInSalz = salzKomponente.Anzahl * salz.Anion.Molekuel.Anzahl * ((saeureKomponente.Molekuel as Saeure).Wasserstoff.AnzahlAtomeInMolekuel() - saeureVariation.wasserstoffIon.Molekuel.AnzahlAtomeInMolekuel()); // Erhalte die Anzahl der Wasserstoffatome in der Lauge double wasserstoffAtomeInLauge = laugeKomponente.Anzahl * ReagierendeLauge.Hydroxid.Anzahl; // Subtrahiere die Wasserstoffatome im Salz von der Saeure + Lauge und // teile es durch zwei, da H20 gleich zwei Wasserstoffatome pro Molekuel besitzt wasserKomponente.Anzahl = (wasserstoffAtomeInSaeure + wasserstoffAtomeInLauge - wasserstoffAtomeInSalz) / 2; // Fuege der Liste der Reaktionen diese Reaktion hinzu ReaktionsResultate.Add(new SaeureLaugeReaktionsResultat(saeureKomponente, laugeKomponente, salzKomponente, wasserKomponente)); } } }