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(); }
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)); }