static void Main(string[] args) { Helpers.zeigeTitel("Bruchrechnung", "Version 3"); #region Konstante und Variable des Beispiels deklarieren // Konstante des Beispiels für zwei Brüche deklarieren // Wenn andere Zahlen getestet werden sollen, bitte hier ändern: const int ZAEHLER = 35, NENNER = 100; // Bruchinstanz für Beispiel erzeugen Bruch b1 = new Bruch(); #endregion #region Eigenschaften testen Console.WriteLine("Test der Eigenschaft - Testen Sie auch Nenner mit 0"); Console.Write("Bitte den Zähler eingeben: "); b1.Numerator = Convert.ToInt32(Console.ReadLine()); Console.Write("Bitte den Nenner eingeben: "); b1.Denominator = Convert.ToInt32(Console.ReadLine()); Console.Write("Der Bruch b1 lautet nun : "); b1.print(); Console.WriteLine("Test der Nur-Lese-Eigenschaft Number"); Console.WriteLine("b1.Numer = " + b1.Number); #endregion #region Kürzen testen Console.WriteLine("\nTest des Kürzens"); // Zuletzt eingegebenen Bruch als gekürzten Bruch ausgeben Console.Write("b1 als gekürzter Bruch: "); Bruch.reduce(b1).print(); // Eigenschaften der Bruchinstanz b1 unter Verwendung obiger Konstanten belegen Console.WriteLine("\nEigenschaften des Bruchs b1 auf {0} / {1} gesetzt", ZAEHLER, NENNER); b1.Numerator = ZAEHLER; b1.Denominator = NENNER; // Test der Klassenmethode Console.WriteLine("\nKürzen mit Klassenmethode"); Console.Write("Bruch b1 = "); b1.print(); Console.Write("Bruch.reduce(b1) = "); Bruch.reduce(b1).print(); Console.Write("Bruch b1 = "); b1.print(); //Jetzt mal den Bruch kürzen und gekürzten Bruch der Referenz zuweisen b1 = Bruch.reduce(b1); Console.Write("b1 = Bruch.reduce(b1) = "); b1.print(); // Eigenschaften der Bruchinstanz b1 unter Verwendung obiger Konstanten belegen Console.WriteLine("\nEigenschaften des Bruchs b1 auf {0} / {1} gesetzt", ZAEHLER, NENNER); b1.Numerator = ZAEHLER; b1.Denominator = NENNER; // Test der Instanzmethode Console.WriteLine("\nKürzen mit Instanzmethode"); Console.Write("Bruch b1 = "); b1.print(); b1.reduce(); Console.WriteLine("b1.reduce() ausgeführt"); Console.Write("Bruch b1 = "); b1.print(); #endregion Helpers.zeigeProgrammende(); }
static void Main(string[] args) { Helpers.zeigeTitel("Bruchrechnung - Überladene Operatoren", "Version 5"); // Ausgangsbrüche in b1 und b2 kopieren, b3 deklarieren, Zahl deklarieren Bruch b1 = new Bruch(15, 21); Bruch b2 = new Bruch(7, 8); Bruch b3; const int ZAHL = 3; // Ausgabe der Brüche Console.Write("b1 = "); b1.print(); Console.Write("b2 = "); b2.print(); Console.WriteLine(); Console.WriteLine("Test des diadischen Operators -\n"); // Subtraktion eines Bruchs von einem anderen Bruch mittels Klassenmethode und Ausgabe des Ergebnisses b3 = Bruch.subtract(b1, b2); Console.Write("b3 = Bruch.subtract(b1, b2) = "); b3.print(); b3.dprint(); Console.WriteLine(); // Subtraktion eines Bruchs von einem anderen Bruch mittels überladenem Operator und Ausgabe des Ergebnisses b3 = b1 - b2; Console.Write("b3 = b1 - b2 = "); b3.print(); b3.dprint(); Console.WriteLine(); // Ausgabe der Bruchs und der Zahl Console.Write("b1 = "); b1.print(); Console.WriteLine("ZAHL = " + ZAHL); Console.WriteLine(); // Subtraktion einer Zahl von einem Bruch mittels Klassenmethode und Ausgabe des Ergebnisses b3 = Bruch.subtract(b1, ZAHL); Console.Write("b3 = Bruch.subtract(b1, ZAHL) = "); b3.print(); b3.dprint(); Console.WriteLine(); // Subtraktion einer Zahl von einem Bruch mittels Operator und Ausgabe des Ergebnisses b3 = b1 - ZAHL; Console.Write("b3 = b1 - ZAHL = "); b3.print(); b3.dprint(); Console.WriteLine(); // Subtraktion eines Bruchs von einer Zahl mittels Klassenmethode und Ausgabe des Ergebnisses b3 = Bruch.subtract(ZAHL, b1); Console.Write("b3 = Bruch.subtract(ZAHL, b1) = "); b3.print(); b3.dprint(); Console.WriteLine(); // Subtraktion eines Bruchs von einer Zahl mittels Operator und Ausgabe des Ergebnisses b3 = ZAHL - b1; Console.Write("b3 = ZAHL - b1 = "); b3.print(); b3.dprint(); Console.WriteLine(); Console.WriteLine("Test des diadischen Operators *\n"); // Multiplikation eines Bruchs mit einem anderen Bruch mittels Klassenmethode und Ausgabe des Ergebnisses b3 = Bruch.multiply(b1, b2); Console.Write("b3 = Bruch.multiply(b1, b2) = "); b3.print(); b3.dprint(); Console.WriteLine(); // Multiplikation eines Bruchs mit einem anderen Bruch mittels überladenem Operator und Ausgabe des Ergebnisses b3 = b1 * b2; Console.Write("b3 = b1 * b2 = "); b3.print(); b3.dprint(); Console.WriteLine(); // Ausgabe der Bruchs und der Zahl Console.Write("b1 = "); b1.print(); Console.WriteLine("ZAHL = " + ZAHL); Console.WriteLine(); // Multiplikation einer Zahl mit einem Bruch mittels Klassenmethode und Ausgabe des Ergebnisses b3 = Bruch.multiply(b1, ZAHL); Console.Write("b3 = Bruch.multiply(b1, ZAHL) = "); b3.print(); b3.dprint(); Console.WriteLine(); // Multiplikation einer Zahl mit einem Bruch mittels Operator und Ausgabe des Ergebnisses b3 = b1 * ZAHL; Console.Write("b3 = b1 * ZAHL = "); b3.print(); b3.dprint(); Console.WriteLine(); // Multiplikation eines Bruchs mit einer Zahl mittels Klassenmethode und Ausgabe des Ergebnisses b3 = Bruch.multiply(ZAHL, b1); Console.Write("b3 = Bruch.multiply(ZAHL, b1) = "); b3.print(); b3.dprint(); Console.WriteLine(); // Multiplikation eines Bruchs mit einer Zahl mittels Operator und Ausgabe des Ergebnisses b3 = ZAHL * b1; Console.Write("b3 = ZAHL * b1 = "); b3.print(); b3.dprint(); Console.WriteLine(); Console.WriteLine("Test des diadischen Operators /\n"); // Division eines Bruchs von einem anderen Bruch mittels Klassenmethode und Ausgabe des Ergebnisses b3 = Bruch.divide(b1, b2); Console.Write("b3 = Bruch.divide(b1, b2) = "); b3.print(); b3.dprint(); Console.WriteLine(); // Division eines Bruchs von einem anderen Bruch mittels überladenem Operator und Ausgabe des Ergebnisses b3 = b1 / b2; Console.Write("b3 = b1 / b2 = "); b3.print(); b3.dprint(); Console.WriteLine(); // Ausgabe der Bruchs und der Zahl Console.Write("b1 = "); b1.print(); Console.WriteLine("ZAHL = " + ZAHL); Console.WriteLine(); // Division einer Zahl von einem Bruch mittels Klassenmethode und Ausgabe des Ergebnisses b3 = Bruch.divide(b1, ZAHL); Console.Write("b3 = Bruch.divide(b1, ZAHL) = "); b3.print(); b3.dprint(); Console.WriteLine(); // Division einer Zahl von einem Bruch mittels Operator und Ausgabe des Ergebnisses b3 = b1 / ZAHL; Console.Write("b3 = b1 / ZAHL = "); b3.print(); b3.dprint(); Console.WriteLine(); // Division eines Bruchs von einer Zahl mittels Klassenmethode und Ausgabe des Ergebnisses b3 = Bruch.divide(ZAHL, b1); Console.Write("b3 = Bruch.divide(ZAHL, b1) = "); b3.print(); b3.dprint(); Console.WriteLine(); // Division eines Bruchs von einer Zahl mittels Operator und Ausgabe des Ergebnisses b3 = ZAHL / b1; Console.Write("b3 = ZAHL / b1 = "); b3.print(); b3.dprint(); Console.WriteLine(); // Komplexe Ausdrücke mit Brüchen, Ausgabe erfolgt jeweils mit // Konversionsoperator string // Bei der Ausgabe der gekürzten Brüche muss die Klassenmethode // reduce verwendet werden, da z.B. in (b4 + b1).reduce() // (b4 + b1) keine Instanz ist. Die Klassenmethode dagegen // nimmt den Wert des Ausdrucks und liefert ihn gekürzt // (eben via return) zurück. Console.WriteLine("Test des mehrgliedriger Ausdrücke\n"); Bruch b4 = b1 + b2 + b3; b4.reduce(); Console.WriteLine("Bruch b4 = " + b1 + " + " + b2 + " + " + b3 + " = " + b4); Console.WriteLine(b4 + " += " + b1 + " = " + Bruch.reduce((b4 += b1))); b4.reduce(); Console.WriteLine(b4 + " -= " + b1 + " = " + Bruch.reduce((b4 -= b1))); Console.WriteLine(b1 + " * " + b2 + " + " + b3 + " = " + (b1 * b2 + b3)); Console.WriteLine(b1 + " * (" + b2 + " + " + b3 + ") = " + (b1 * (b2 + b3))); Console.WriteLine(b1 + " * " + b2 + " / " + b3 + " = " + (b1 * b2 / b3)); Console.WriteLine(b1 + " * (" + b2 + " / " + b3 + ") = " + (b1 * (b2 / b3))); Console.WriteLine(b1 + " / (" + b2 + " - " + b3 + ") = " + (b1 / (b2 - b3))); Console.WriteLine(b1 + " / " + b2 + " - " + b3 + " = " + (b1 / b2 - b3)); // Test Gleichheit/Ungleichheit Bruch b5 = new Bruch(1, 2); Bruch b6 = new Bruch(7, 14); Console.WriteLine(b5 == b6); Console.WriteLine(b5 * b6 == b6 * b5); Console.WriteLine(b5 != b6); Helpers.zeigeProgrammende(); }
static void Main(string[] args) { Helpers.zeigeTitel("Bruchrechnung - Array von Brüchen"); #region 1. Brucharray mit Zufallsbrüchen erzeugen const int MAX = 10; Console.WriteLine("1. Erzeuge " + MAX + " Zufallsbrüche..."); // Array mit Referenzvariablen erzeugen Bruch[] brueche = new Bruch[MAX]; // Zufallsszahlengenerator erzeugen (wird mit Zeit initilaisiert) Random rnd = new Random(); // In jeder Referenzvariablen des Array einen // neuen Bruch mit zufälligem Zähler/Nenner mittels // Instanzmethode Next(min, max) erzeugen for (int i = 0; i < brueche.Length; i++) { brueche[i] = new Bruch(rnd.Next(1, 10), rnd.Next(1, 10)); } #endregion #region 2. Alle Brüche kürzen Console.WriteLine("\n2. Kürze alle Zufallsbrüche..."); foreach (Bruch bruch in brueche) { bruch.reduce(); } // Alternativ mit for-Schleife //for (int i = 0; i < brueche.Length; i++) // brueche[i].reduce(); // Alternative mit Klassenmethode reduce (Bruch b) //for (int i = 0; i < brueche.Length; i++) // brueche[i] = Bruch.reduce(brueche[i]); #endregion #region 3. Alle Brüche in der Form Zähler / Nenner ausgeben Console.WriteLine("\n3. Ausgabe aller Zufallsbrüche..."); foreach (Bruch bruch in brueche) { bruch.print(); } // Alternativ durch überladenen Konversionsoperator string // foreach (Bruch bruch in brueche) // Console.WriteLine((string)bruch); // Alternativ mit for-Schleife //for (int i = 0; i < brueche.Length; i++) // brueche[i].print(); #endregion #region 4. Alle Büche als Dezimalzahl ausgeben Console.WriteLine("\n4. Ausgabe der Dezimalwerte aller Zufallsbrüche..."); // Verwendung der Nur-Lese-Eigenschaft Number des Bruchs foreach (Bruch bruch in brueche) { Console.WriteLine(bruch.Number); } // Alternativ mit for-Schleife //for (int i = 0; i < brueche.Length; i++) // Console.WriteLine(brueche[i].Number); #endregion #region 5. Die Summe aller Brüche bestimmen und ausgeben Console.WriteLine("\n5. Summiere alle Zufallsbrüche..."); Bruch summe = new Bruch(); foreach (Bruch bruch in brueche) { summe.add(bruch); // Kürzen sinnvoll, da andernfalls sehr große Nenner durch die // Multiplikation entstehen können und ggfs. der Wertebereich // für int überschritten werden könnte. // summe.reduce(); } // Alternativ: Nutzung des in Bruchklasse überladenen Operators + //Bruch summe = new Bruch(); //foreach (Bruch bruch in brueche) //{ // summe += bruch; // summe.reduce(); //} // Alternativ mit for-Schleife //Bruch summe = new Bruch(); //for (int i = 0; i < brueche.Length; i++) //{ // summe.add(brueche[i]); // oder summe += brueche[i]; // summe.reduce(); //} // Alternativ mit Copy-Konstruktor und for-Schleife //Bruch summe = new Bruch(brueche[0]); //for (int i = 1; i < brueche.Length; i++) //{ // summe.add(brueche[i]); // oder summe += brueche[i]; // summe.reduce(); //} Console.WriteLine("Summe aller Zufallsbrüche..."); summe.print(); summe.dprint(); #endregion #region 6. Die Summe aller Brüche kürzen und ausgeben Console.WriteLine("\n6. Gekürzte Summe alle Zufallsbrüche..."); summe.reduce(); summe.print(); summe.dprint(); #endregion Helpers.zeigeProgrammende(); }