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); }
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 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")); }
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(); }
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}]"); } }
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); }
public Kation(Molekuel molekuel, int ladung) : base(molekuel) { // Ladung muss mit übergeben werden, da ein Molekül immer neutral geladen ist _PositiveLadung = ladung; }
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); }
public Ion(Molekuel molekuel) { Molekuel = molekuel; }