diff --git a/Project_Periodensystem.Controller/PeriodensystemController.cs b/Project_Periodensystem.Controller/PeriodensystemController.cs index a28d875..fe48872 100644 --- a/Project_Periodensystem.Controller/PeriodensystemController.cs +++ b/Project_Periodensystem.Controller/PeriodensystemController.cs @@ -33,10 +33,27 @@ namespace Project_Periodensystem.Controller // NEUE METHODE: DataManager statt direkt PeriodicTableData _elements = DataManager.LoadElements(); Logger.Log($"Controller: {_elements.Count} Elemente erfolgreich geladen (via DataManager)"); + + // NEUE FEATURES demonstrieren: + // Array-Operationen testen + var symbols = GetAllSymbols(); + Logger.LogArray("Element-Symbole (erste 10)", symbols.Take(10).ToArray()); + + // Tuple-Operationen testen + var (totalElements, uniqueSeries, avgWeight) = GetStatistics(); + Logger.LogTuple("Statistiken", $"Elemente: {totalElements}, Serien: {uniqueSeries}, Ø-Gewicht: {avgWeight:F2}"); + + // Extremwerte finden + var (lightest, heaviest) = GetWeightExtremes(); + if (lightest != null && heaviest != null) + { + Logger.LogTuple("Gewichts-Extreme", $"Leichtestes: {lightest.Symbol} ({lightest.AtomicWeight}), Schwerstes: {heaviest.Symbol} ({heaviest.AtomicWeight})"); + } + } catch (Exception ex) { - Logger.LogException(ex, "LoadElements"); + Logger.Log($"EXCEPTION in LoadElements: {ex.Message}"); _elements = new List(); } } @@ -50,6 +67,60 @@ namespace Project_Periodensystem.Controller return _elements; } + /// + /// Gibt Elemente als Array zurück (für Array-Operationen) + /// + /// Array aller Elemente + public Element[] GetAllElementsAsArray() + { + return _elements.ToArray(); + } + + /// + /// Gibt nur die Symbole als String-Array zurück + /// + /// Array mit allen Element-Symbolen + public string[] GetAllSymbols() + { + string[] symbols = new string[_elements.Count]; + for (int i = 0; i < _elements.Count; i++) + { + symbols[i] = _elements[i].Symbol; + } + return symbols; + } + + /// + /// Gibt Atomgewichte als Array zurück + /// + /// Array mit allen Atomgewichten + public double[] GetAtomicWeights() + { + double[] weights = new double[_elements.Count]; + for (int i = 0; i < _elements.Count; i++) + { + weights[i] = _elements[i].AtomicWeight; + } + return weights; + } + + /// + /// Berechnet Durchschnittsgewicht aus Array + /// + /// Durchschnittliches Atomgewicht + public double GetAverageAtomicWeight() + { + double[] weights = GetAtomicWeights(); + if (weights.Length == 0) return 0; + + double sum = 0; + for (int i = 0; i < weights.Length; i++) + { + sum += weights[i]; + } + return sum / weights.Length; + } + /// /// Speichert Elemente persistent (NEUE FUNKTION) /// @@ -208,5 +279,72 @@ namespace Project_Periodensystem.Controller { return _elements.Count; } + + /// + /// Gibt Element-Position als Tuple zurück + /// + /// Atomnummer des Elements + /// Tuple mit (Row, Column) oder (-1, -1) wenn nicht gefunden + public (int row, int column) GetElementPosition(int atomicNumber) + { + var element = GetElementByAtomicNumber(atomicNumber); + if (element != null) + { + return (element.Row, element.Column); + } + return (-1, -1); + } + + /// + /// Gibt Grundinfos eines Elements als Tuple zurück + /// + /// Atomnummer + /// Tuple mit (Symbol, Name, Gewicht) + public (string symbol, string name, double weight) GetElementInfo(int atomicNumber) + { + var element = GetElementByAtomicNumber(atomicNumber); + if (element != null) + { + return (element.Symbol, element.ElementName, element.AtomicWeight); + } + return ("", "Unbekannt", 0.0); + } + + /// + /// Gibt Statistiken als Tuple zurück + /// + /// Tuple mit (Anzahl Elemente, Anzahl Serien, Durchschnittsgewicht) + public (int totalElements, int uniqueSeries, double avgWeight) GetStatistics() + { + var seriesCount = GetAllSeries().Count; + var avgWeight = GetAverageAtomicWeight(); + + return (_elements.Count, seriesCount, avgWeight); + } + + /// + /// Findet leichtestes und schwerstes Element + /// + /// Tuple mit (leichtestes Element, schwerstes Element) + public (Element lightest, Element heaviest) GetWeightExtremes() + { + if (!_elements.Any()) + { + return (null, null); + } + + var lightest = _elements[0]; + var heaviest = _elements[0]; + + foreach (var element in _elements) + { + if (element.AtomicWeight < lightest.AtomicWeight) + lightest = element; + if (element.AtomicWeight > heaviest.AtomicWeight) + heaviest = element; + } + + return (lightest, heaviest); + } } } diff --git a/Project_Periodensystem.Model/Logger.cs b/Project_Periodensystem.Model/Logger.cs index 559d22e..06de07a 100644 --- a/Project_Periodensystem.Model/Logger.cs +++ b/Project_Periodensystem.Model/Logger.cs @@ -1,5 +1,6 @@ using System; using System.IO; +using System.Linq; namespace Project_Periodensystem.Model { @@ -132,5 +133,36 @@ namespace Project_Periodensystem.Model { return LogFilePath; } + + /// + /// Loggt ein Array von Strings + /// + /// Titel für das Array + /// Array von Items + public static void LogArray(string title, string[] items) + { + Log($"{title}: [{string.Join(", ", items)}]"); + } + + /// + /// Loggt ein Array von Zahlen + /// + /// Titel für das Array + /// Array von Zahlen + public static void LogArray(string title, double[] numbers) + { + var formattedNumbers = numbers.Select(n => n.ToString("F2")).ToArray(); + Log($"{title}: [{string.Join(", ", formattedNumbers)}]"); + } + + /// + /// Loggt Tuple-Informationen + /// + /// Titel + /// Tuple als string + public static void LogTuple(string title, string tupleInfo) + { + Log($"{title}: {tupleInfo}"); + } } } \ No newline at end of file