public Kation(Molekuel molekuel) : base(molekuel) { // Ladung kann aus dem Element herausgelesen werden if (molekuel.Atombindung.IstElementbindung()) { Element element = molekuel.Atombindung.ErhalteElement(); if (element is Metall) { Metall metall = element as Metall; _PositiveLadung = metall.Hauptgruppe; } else { Nichtmetall nichtmetall = element as Nichtmetall; if (nichtmetall.Symol.Equals("H")) { _PositiveLadung = 1; } else { _PositiveLadung = 8 - nichtmetall.Hauptgruppe; } } } }
static Converter() { GportionSumm = new double[21]; Gscrap = new double[5001]; GizvPortion = new double[21]; GizkPortion = new double[21]; GdolPortion = new double[21]; GvldolPortion = new double[21]; GimfPortion = new double[21]; GkoksPortion = new double[21]; GpesPortion = new double[21]; GrudaPortion = new double[21]; GokalPortion = new double[21]; GokatPortion = new double[21]; GaglPortion = new double[21]; GshpPortion = new double[21]; Metall = new Metall(); }
public Lauge(Metall metall) { // Erstelle das Hydroxid Oxid hydroxid = new Oxid("OH"); // Berechne die Anzahl der Moleküle (int anzahlMetall, int anzahlHydroxid) = MolekuelHelfer.BerechneAnzahlDerMolekuele(metall.Hauptgruppe, -1); // Füge die Moleküle als Bestandteil der Lauge hinzu AddBestandteil(metall, anzahlMetall); AddBestandteil(hydroxid, anzahlHydroxid); // Setze die Bestandteile Metall = ErhalteMolekuel(metall); Hydroxid = ErhalteMolekuel(hydroxid); // Generiere die chemische Formel und den Namen Name = Metall.Atombindung.ErhalteElement().Name + "hydroxid"; ChemischeFormel = GeneriereChemischeFormelAusBestandteilen(fuerAnzeige: false); }
/// <summary> /// Erstellt ein standart Metalloxid /// </summary> /// <param name="metall"></param> public Oxid(Metall metall) { // Erhalte das Nichtmetall-Saeuerstoff Nichtmetall sauerstoff = Periodensystem.Instance.FindeNichtmetallNachAtomsymbol("O"); if (sauerstoff != null) { // Berechne die Anzahl der benötigen Atome (int anzahlMetall, int anzahlSauerstoff) = MolekuelHelfer.BerechneAnzahlDerMolekuele(metall, sauerstoff); // Füge die Elemente den Bestandteilen hinzu AddBestandteil(metall, anzahlMetall); AddBestandteil(sauerstoff, anzahlSauerstoff); } Sauerstoff = ErhalteMolekuel(sauerstoff); Bindungspartner = ErhalteMolekuel(metall); Name = GeneriereNameErsterOrdnung(); ChemischeFormel = GeneriereChemischeFormelAusBestandteilen(); }
private void GeneriereGleichungen_Click(object sender, RoutedEventArgs e) { MetallEingabeTextBox.TextDocument.GetText(Windows.UI.Text.TextGetOptions.UseObjectText, out string metallSymbol); if (String.IsNullOrEmpty(metallSymbol)) { // Suche nun in der DropDown if (MetallAuswahlComboBox.SelectedIndex == -1) { return; } metallSymbol = (string)((ComboBoxItem)MetallAuswahlComboBox.SelectedValue).Tag; } 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; } metallSäureReaktionResultate.Clear(); Saeure säure = new Saeure(saeureFormel); Metall metall = Periodensystem.Instance.FindeMetallNachAtomsymbol(metallSymbol); MetallSaeureReaktion reaktion = new MetallSaeureReaktion(metall, säure); reaktion.BeginneReaktion(); ReaktionsgleichungenControl.ItemsSource = new List <Object>(); ReaktionsgleichungenControl.ItemsSource = reaktion.ReaktionsResultate; }
public void Aluminiumhydroxid() { // Überprüfe, ob aus den Bestandteilen die chemische Formel generiert werden kann Metall aluminium = Periodensystem.Instance.FindeMetallNachAtomsymbol("Al"); // Kreiere die Lauge Lauge aluminiumhydroxid = new Lauge(aluminium); // Überprüfe ob identisch Assert.AreEqual("Al(OH)₃", aluminiumhydroxid.GeneriereChemischeFormelAusBestandteilen()); aluminiumhydroxid = new Lauge("Al(OH)₃"); aluminiumhydroxid.Bestandteile = aluminiumhydroxid.GeneriereBestandteileAusChemischerFormel(); // Erhalte die Moleküle aus den Bestandteilen Molekuel aluminiumMolekuel = aluminiumhydroxid.ErhalteMolekuel(aluminium); Molekuel hydroxidMolekuel = aluminiumhydroxid.ErhalteMolekuel(new Oxid("OH")); Assert.AreEqual(1, aluminiumMolekuel.AnzahlAtomeInMolekuel()); Assert.AreEqual("Al", aluminiumMolekuel.Atombindung.ErhalteElement().Symol); Assert.AreEqual(3, hydroxidMolekuel.Anzahl); Assert.AreEqual("OH", hydroxidMolekuel.Atombindung.ChemischeFormel); }
private static BaseDocument GetBaseDocumentById(string dbName, int id) { Func <BaseDocument, bool> func; BaseDocument current; Func <BaseDocument, bool> func1 = null; Func <BaseDocument, bool> func2 = null; Func <BaseDocument, bool> func3 = null; Func <BaseDocument, bool> func4 = null; Func <BaseDocument, bool> func5 = null; string str = dbName; if (str == "DbConcrete") { Concrete.LoadAllDocument(); ICollection <BaseDocument> documentCollection = Concrete.DocumentCollection; Func <BaseDocument, bool> func6 = func1; if (func6 == null) { Func <BaseDocument, bool> func7 = baseDocument => baseDocument.Id.Equals(id); func = func7; func1 = func7; func6 = func; } using (IEnumerator <BaseDocument> enumerator = documentCollection.Where(func6).GetEnumerator()) { if (enumerator.MoveNext()) { current = enumerator.Current; return(current); } } } else if (str == "DbMetall") { Metall.LoadAllDocument(); ICollection <BaseDocument> baseDocuments = Metall.DocumentCollection; Func <BaseDocument, bool> func8 = func2; if (func8 == null) { Func <BaseDocument, bool> func9 = baseDocument => baseDocument.Id.Equals(id); func = func9; func2 = func9; func8 = func; } using (IEnumerator <BaseDocument> enumerator1 = baseDocuments.Where(func8).GetEnumerator()) { if (enumerator1.MoveNext()) { current = enumerator1.Current; return(current); } } } else if (str == "DbWood") { Wood.LoadAllDocument(); ICollection <BaseDocument> documentCollection1 = Wood.DocumentCollection; Func <BaseDocument, bool> func10 = func3; if (func10 == null) { Func <BaseDocument, bool> func11 = baseDocument => baseDocument.Id.Equals(id); func = func11; func3 = func11; func10 = func; } using (IEnumerator <BaseDocument> enumerator2 = documentCollection1.Where(func10).GetEnumerator()) { if (enumerator2.MoveNext()) { current = enumerator2.Current; return(current); } } } else if (str == "DbMaterial") { Material.LoadAllDocument(); ICollection <BaseDocument> baseDocuments1 = Material.DocumentCollection; Func <BaseDocument, bool> func12 = func4; if (func12 == null) { Func <BaseDocument, bool> func13 = baseDocument => baseDocument.Id.Equals(id); func = func13; func4 = func13; func12 = func; } using (IEnumerator <BaseDocument> enumerator3 = baseDocuments1.Where(func12).GetEnumerator()) { if (enumerator3.MoveNext()) { current = enumerator3.Current; return(current); } } } else if (str == "DbOther") { Other.LoadAllDocument(); ICollection <BaseDocument> documentCollection2 = Other.DocumentCollection; Func <BaseDocument, bool> func14 = func5; if (func14 == null) { Func <BaseDocument, bool> func15 = baseDocument => baseDocument.Id.Equals(id); func = func15; func5 = func15; func14 = func; } using (IEnumerator <BaseDocument> enumerator4 = documentCollection2.Where(func14).GetEnumerator()) { if (enumerator4.MoveNext()) { current = enumerator4.Current; return(current); } } } current = null; return(current); }
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)); } } }
public static (int anzahlMetall, int anzahlNichtmetall) BerechneAnzahlDerMolekuele(Metall metall, Nichtmetall nichtmetall) { // Berechne deren Ladungen (Elektronenabgabe sowie Elektronenaufnahme) int ladungMetall = metall.Hauptgruppe; int ladungNichtmetall = (nichtmetall.Symol.Equals("H")) ? nichtmetall.Hauptgruppe : 8 - nichtmetall.Hauptgruppe; return(BerechneAnzahlDerMolekuele(ladungMetall, ladungNichtmetall)); }
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) { // Erhalte das Metallelement aus dem Oxid und ionisiere es Metall metall = ReagierendesMetalloxid.Bindungspartner.Atombindung.ErhalteElement() as Metall; Kation metallIon = new Kation(new Molekuel(new Atombindung(metall, 1), 1)); // Bilde das Salz aus dem Metallion und dem ionisierten Saeurerest Salz salz = new Salz(metallIon, saeureVariation.saeurerestIon); // Erstelle die Wasserstoffbindung Atombindung wasser = new Atombindung("H₂O", "Wasser"); // Erstelle die Reaktionsstoffe mit den vorhandenen Bindungen. // Diese Klasse merkt sich zu den Bindungen auch die Anzahl // der Molekuele nach dem Ausgleichen Reaktionsstoff metalloxidKomponente = new Reaktionsstoff(ReagierendesMetalloxid); Reaktionsstoff saeureKomponente = new Reaktionsstoff(ReagierendeSaeure); Reaktionsstoff wasserKomponente = new Reaktionsstoff(wasser); Reaktionsstoff salzKomponente = new Reaktionsstoff(salz); //Falls die Anzahl der Metall-Atome im Oxid gleich dem im Salz sind if (ReagierendesMetalloxid.Bindungspartner.AnzahlAtomeInMolekuel() == salz.Kation.Molekuel.AnzahlAtomeInMolekuel()) { // Die Anzahl der Metall-Atome im Oxid, sowie im Salz sind identisch, // => Anzahl des Metalloxids und des Salzes auf 1 setzen metalloxidKomponente.Anzahl = 1; salzKomponente.Anzahl = 1; } //Falls die Anzahl der Metall-Atome im Oxid groeßer dem im Salz sind else if (ReagierendesMetalloxid.Bindungspartner.AnzahlAtomeInMolekuel() > salz.Kation.Molekuel.AnzahlAtomeInMolekuel()) { // Die Anzahl der Metall-Atome im Oxid sind groeßer als die im Salz // => Anzahl des Metalloxids auf 1 setzen und die Anzahl des Salzes berechnen metalloxidKomponente.Anzahl = 1; salzKomponente.Anzahl = ReagierendesMetalloxid.Bindungspartner.AnzahlAtomeInMolekuel() / salz.Kation.Molekuel.AnzahlAtomeInMolekuel(); } //Falls die Anzahl der Metall-Atome im Oxid kleiner dem im Salz sind else { // Die Anzahl der Metall-Atome im Oxid sind geringer als die im Salz // => Anzahl des Metalloxids berechnen und die Anzahl des Salzes auf 1 setzen metalloxidKomponente.Anzahl = salz.Kation.Molekuel.AnzahlAtomeInMolekuel() / ReagierendesMetalloxid.Bindungspartner.AnzahlAtomeInMolekuel(); salzKomponente.Anzahl = 1; } // Die Anzahl der Saeure entspricht die Anzahl des Saeurerestions // => 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()); // Subtrahiere die Wasserstoffatome in der Saeure mit dem des Salzes und // teile es durch zwei, da H20 gleich zwei Wasserstoffatome pro Molekuel besitzt wasserKomponente.Anzahl = (wasserstoffAtomeInSaeure - wasserstoffAtomeInSalz) / 2; // Fuege der Liste der Reaktionen diese Reaktion hinzu ReaktionsResultate.Add(new MetalloxidSaeureReaktionsResultat(metalloxidKomponente, saeureKomponente, salzKomponente, wasserKomponente)); } }
public MetallSaeureReaktion(Metall metall, Saeure saeure) { ReagierendesMetall = metall; ReagierendeSaeure = saeure; ReaktionsResultate = new List <MetallSaeureReaktionsResultat>(); }