public void Wasser()
        {
            // Überprüfe, ob aus den Bestandteilen die chemische Formel generiert werden kann
            Element wasserstoff = Periodensystem.Instance.FindeNichtmetallNachAtomsymbol("H");
            Element sauerstoff  = Periodensystem.Instance.FindeNichtmetallNachAtomsymbol("O");

            // Füge den Bestandteilen dem Wasser hinzu
            Atombindung wasser = new Atombindung();

            wasser.AddBestandteil(wasserstoff, 2);
            wasser.AddBestandteil(sauerstoff, 1);

            // Überprüfe ob identisch
            Assert.AreEqual("H₂O", wasser.GeneriereChemischeFormelAusBestandteilen());

            wasser = new Atombindung("H₂O");
            wasser.Bestandteile = wasser.GeneriereBestandteileAusChemischerFormel();

            // Erhalte die Moleküle aus den Bestandteilen
            Molekuel wasserstoffMolekuel = wasser.ErhalteMolekuel(wasserstoff);
            Molekuel sauerstoffMolekuel  = wasser.ErhalteMolekuel(sauerstoff);

            // Überprüfe ob identisch
            Assert.AreEqual(2, wasserstoffMolekuel.AnzahlAtomeInMolekuel());
            Assert.AreEqual("H", wasserstoffMolekuel.Atombindung.ErhalteElement().Symol);

            Assert.AreEqual(1, sauerstoffMolekuel.AnzahlAtomeInMolekuel());
            Assert.AreEqual("O", sauerstoffMolekuel.Atombindung.ErhalteElement().Symol);
        }
Esempio n. 2
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;
             }
         }
     }
 }
Esempio n. 3
0
        /// <summary>
        /// Erstellt ein Oxid aus der chemischen Formel
        /// </summary>
        /// <param name="chemischeFormel"></param>
        public Oxid(string chemischeFormel)
        {
            // Setze die chemische Formel
            ChemischeFormel = chemischeFormel;

            // Generiert die Bestandteile aus der chemischen Formel
            Bestandteile = GeneriereBestandteileAusChemischerFormel();

            // Generiere den Namen aus den Bestandteilen
            Name = GeneriereNameErsterOrdnung();

            //// Das Molekuel darf aktuell nur aus zwei Bestandteile bestehen
            //if (Bestandteile.Count != 2)
            //{
            //    throw new Exception("Das Oxid darf aktuell nur aus zwei Bestandteilen bestehen");
            //}

            Nichtmetall sauerstoff = Periodensystem.Instance.FindeNichtmetallNachAtomsymbol("O");

            if (sauerstoff != null)
            {
                Sauerstoff = ErhalteMolekuel(sauerstoff);
            }

            foreach (Element[] bestandteil in Bestandteile)
            {
                if (bestandteil[0].Symol.Equals("O") == false)
                {
                    Bindungspartner = ErhalteMolekuel(bestandteil[0]);
                    break;
                }
            }
        }
Esempio n. 4
0
        public Ammoniak()
        {
            // Setzte den Namen
            Name = "Ammoniak";

            // Setzte die chemische Formel
            ChemischeFormel = "NH₃";

            // Generiere die Bestandteile aus der chemischen Formel
            Bestandteile = GeneriereBestandteileAusChemischerFormel();

            // Erhalte die Moleküle aus den Bestandteilen
            Stickstoff  = ErhalteMolekuel(Periodensystem.Instance.FindeNichtmetallNachAtomsymbol("N"));
            Wasserstoff = ErhalteMolekuel(Periodensystem.Instance.FindeNichtmetallNachAtomsymbol("H"));
        }
Esempio n. 5
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);
        }
Esempio n. 6
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();
        }
Esempio n. 7
0
        public Lauge(string chemischeFormel)
        {
            // Präperier die chemische Formel so, dass sie korrekt geparsed werden kann
            int indexHydroxid = chemischeFormel.IndexOf("OH");

            if (indexHydroxid > 0)
            {
                // Das Hydroxid wurde gefunden
                if (chemischeFormel[indexHydroxid - 1].Equals('(') == false)
                {
                    // Die Klammern sind nicht angegeben, somit muss die Formel angepasst werden
                    chemischeFormel = chemischeFormel.Replace("OH", "(OH)₁");
                }

                // Generiere die Bestandteile aus der chemischen Formel
                Bestandteile = GeneriereBestandteileAusChemischerFormel(chemischeFormel);

                foreach (Molekuel molekuel in ErhalteAlleMolekuele())
                {
                    switch (molekuel.Atombindung.ChemischeFormel)
                    {
                    case "OH":
                        Hydroxid = molekuel;
                        break;

                    default:
                        Metall = molekuel;
                        break;
                    }
                }

                // Generiere die chemische Formel
                Name            = Metall.Atombindung.ErhalteElement().Name + "hydroxid";
                ChemischeFormel = GeneriereChemischeFormelAusBestandteilen(fuerAnzeige: false);
            }
            else
            {
                throw new Exception($"Ungültige Formel für die Lauge [{chemischeFormel}]");
            }
        }
Esempio n. 8
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);
        }
Esempio n. 9
0
 public Kation(Molekuel molekuel, int ladung) : base(molekuel)
 {
     // Ladung muss mit übergeben werden, da ein Molekül immer neutral geladen ist
     _PositiveLadung = ladung;
 }
Esempio n. 10
0
        public string GeneriereNameErsterOrdnung()
        {
            List <Molekuel> molekuele = ErhalteAlleMolekuele();

            // Sortiere die Liste nach Mtall/Nichtmetall, dann nach Elektronegativitaet
            molekuele.OrderByDescending(x => x.Atombindung.ErhalteElement() is Metall)
            .ThenBy(x => Array.IndexOf(SortierungNichtmetalle, x.Atombindung.ErhalteElement()?.Symol))
            .ToList();

            string name = null;

            for (int zaehler = 0; zaehler < molekuele.Count; zaehler++)
            {
                Molekuel molekuel = molekuele[zaehler];
                Element  element  = molekuel.Atombindung.ErhalteElement();

                if (element is Metall)
                {
                    if (molekuel.AnzahlAtomeInMolekuel() > 1)
                    {
                        name += NomenklaturHelfer.Praefix(molekuel.AnzahlAtomeInMolekuel()) + element.Name;
                    }
                    else
                    {
                        name += element.Name;
                    }
                }
                else
                {
                    // !Ausnahme: Wasserstoff nicht an letzer Stelle
                    if (element.Symol.Equals("H"))
                    {
                        if (zaehler != molekuele.Count - 1)
                        {
                            if (molekuel.AnzahlAtomeInMolekuel() > 1)
                            {
                                name += NomenklaturHelfer.Praefix(molekuel.AnzahlAtomeInMolekuel()) + "hydrogen";
                            }
                            else
                            {
                                name += "hydrogen";
                            }

                            continue;
                        }
                    }

                    if (zaehler == 0)
                    {
                        if (molekuel.AnzahlAtomeInMolekuel() > 1)
                        {
                            name += NomenklaturHelfer.Praefix(molekuel.AnzahlAtomeInMolekuel()) + element.Name;
                        }
                        else
                        {
                            name += element.Name;
                        }
                    }
                    else
                    {
                        if (molekuel.AnzahlAtomeInMolekuel() > 1)
                        {
                            name += NomenklaturHelfer.Praefix(molekuel.AnzahlAtomeInMolekuel()) + element.Wurzel + "id";
                        }
                        else
                        {
                            name += element.Wurzel + "id";
                        }
                    }
                }
            }

            name = name.ToLower();
            name = char.ToUpper(name[0]) + name.Substring(1);

            return(name);
        }
Esempio n. 11
0
 public Ion(Molekuel molekuel)
 {
     Molekuel = molekuel;
 }