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();
        }
Beispiel #3
0
        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();
        }