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;
             }
         }
     }
 }
        /// <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;
                }
            }
        }
        public Saeure(string chemischeFormel)
        {
            // Überprüfe, ob die Formel mit einem Wasserstoffatom beginnt
            if (chemischeFormel[0].Equals('H') == false)
            {
                throw new Exception("Die Säureformel muss mit mindestens einem Wasserstoffatom beginnen");
            }

            // Überprüfe, ob des den Stoff Wasserstoff im Periodensystem gibt
            Nichtmetall wasserstoff = Periodensystem.Instance.FindeNichtmetallNachAtomsymbol("H");

            if (wasserstoff == null)
            {
                throw new Exception("Wasserstoff konnte im Periodensystem nicht gefunden werden");
            }

            if (chemischeFormel.Contains("(") == false)
            {
                // Muss präperiert werden
                if (UnicodeHelfer.GetNumberOfSubscript(chemischeFormel[1]) != -1)
                {
                    if (chemischeFormel.Length > 3 && Periodensystem.Instance.UberpruefeObElement(chemischeFormel.Substring(2)) == false)
                    {
                        chemischeFormel = $"{chemischeFormel.Substring(0, 2)}({chemischeFormel.Substring(2)})₁";
                    }
                }
                else
                {
                    if (chemischeFormel.Length > 2 && Periodensystem.Instance.UberpruefeObElement(chemischeFormel.Substring(1)) == false)
                    {
                        chemischeFormel = $"{chemischeFormel.Substring(0, 1)}({chemischeFormel.Substring(1)})₁";
                    }
                }
            }

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

            foreach (Molekuel molekuel in ErhalteAlleMolekuele())
            {
                if (molekuel.Atombindung.IstElementbindung())
                {
                    Element element = molekuel.Atombindung.ErhalteElement();
                    if (element.Symol.Equals("H"))
                    {
                        Wasserstoff = molekuel;
                        continue;
                    }
                }

                Saeurerest = molekuel;
            }

            // Generiere die chemische Formel
            GeneriereName();
            ChemischeFormel = GeneriereChemischeFormelAusBestandteilen(fuerAnzeige: false);
        }
        public List <(Kation wasserstoffIon, Anion saeurerestIon)> ErhalteIonisierteSaeurevarianten()
        {
            List <(Kation wasserstoffIon, Anion saeurerestIon)> ionisierteSaeurevarianten = new List <(Kation wasserstoffIon, Anion saeurerestIon)>();

            Nichtmetall wasserstoff = Periodensystem.Instance.FindeNichtmetallNachAtomsymbol("H");

            if (wasserstoff == null)
            {
                throw new Exception("Wasserstoff konnte im Periodensystem nicht gefunden werden");
            }

            for (int wasserstoffInEster = Wasserstoff.Atombindung.AnzahlAtome - 1; wasserstoffInEster >= 0; wasserstoffInEster--)
            {
                // Kation
                Atombindung wasserstoffbindung = new Atombindung(wasserstoff, Wasserstoff.Atombindung.AnzahlAtome - wasserstoffInEster);
                Kation      abgabeWasserstoff  = new Kation(new Molekuel(wasserstoffbindung, 1), Wasserstoff.Atombindung.AnzahlAtome - wasserstoffInEster);

                // Anion
                if (wasserstoffInEster == 0)
                {
                    // Das Säurerest hat sich nicht verändert und wird identisch abgegeben
                    Anion abgabeSaeurerest = new Anion(Saeurerest, -(Wasserstoff.Atombindung.AnzahlAtome - wasserstoffInEster));
                    abgabeSaeurerest.Molekuel.Atombindung.SetzeTrivialname(NameSaurerestAnion);

                    ionisierteSaeurevarianten.Add((abgabeWasserstoff, abgabeSaeurerest));
                }
                else
                {
                    // Das Säurerest beinhaltet nun Wassserstoff Atome
                    string saeurerestName = null;
                    if (wasserstoffInEster > 1)
                    {
                        saeurerestName = NomenklaturHelfer.Praefix(wasserstoffInEster) + "hydrogen" + NameSaurerestAnion;
                    }
                    else
                    {
                        saeurerestName = "Hydrogen" + NameSaurerestAnion;
                    }

                    Atombindung wasserstoffbindungInSaeurerest = new Atombindung(wasserstoff, wasserstoffInEster);
                    string      saurerrestFormel = wasserstoffbindungInSaeurerest.ChemischeFormel + Saeurerest.Atombindung.ChemischeFormel;

                    Atombindung saeurerestbindung = new Atombindung(saurerrestFormel, wasserstoffbindungInSaeurerest, Saeurerest.Atombindung);
                    saeurerestbindung.SetzeTrivialname(saeurerestName);

                    Anion abgabeSaeurerest = new Anion(new Molekuel(saeurerestbindung, 1), -(Wasserstoff.Atombindung.AnzahlAtome - wasserstoffInEster));
                    ionisierteSaeurevarianten.Add((abgabeWasserstoff, abgabeSaeurerest));
                }
            }

            return(ionisierteSaeurevarianten);
        }
        /// <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();
        }
Beispiel #6
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));
        }