Ejemplo n.º 1
0
 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;
             }
         }
     }
 }
Ejemplo n.º 2
0
 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();
 }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        /// <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;
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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));
                }
            }
        }
Ejemplo n.º 9
0
        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));
            }
        }
Ejemplo n.º 11
0
 public MetallSaeureReaktion(Metall metall, Saeure saeure)
 {
     ReagierendesMetall = metall;
     ReagierendeSaeure  = saeure;
     ReaktionsResultate = new List <MetallSaeureReaktionsResultat>();
 }