예제 #1
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();
        }
        static void Main(string[] args)
        {
            Helpers.zeigeTitel("Bruchrechnung", "Version 2");

            // Konstante des Beispiels für zwei Brüche deklarieren
            // Wenn andere Zahlen getestet werden sollen, bitte hier ändern:
            const int ZAEHLERB1 = 3, NENNERB1 = 8;
            const int ZAEHLERB2 = 1, NENNERB2 = 7;

            #region Bruchaddition testen
            // Zwei Bruchinstanzen unter Verwendung obiger Konstanten erzeugen
            Bruch b1 = new Bruch(ZAEHLERB1, NENNERB1);
            Bruch b2 = new Bruch(ZAEHLERB2, NENNERB2);

            // Bruchinstanzen ausgeben
            Console.Write("Bruch b1 = new Bruch(" + ZAEHLERB1 + ", " + NENNERB1 + "): ");
            b1.print();
            Console.Write("Bruch b2 = new Bruch(" + ZAEHLERB2 + ", " + NENNERB2 + "): ");
            b2.print();

            Console.WriteLine("\nTest der Bruchaddition (Klassenmethoden)...");
            Bruch b3 = Bruch.add(b1, b2);
            Console.Write("Bruch b3   = Bruch.add(b1, b2) = "); b3.print();
            b3 = Bruch.add(b1, 5);
            Console.Write("      b3   = Bruch.add(b1,  5) = "); b3.print();
            b3 = Bruch.add(5, b2);
            Console.Write("      b3   = Bruch.add( 5, b2) = "); b3.print();
            Console.WriteLine("\nTest der Bruchaddition (Instanzmethoden)...");
            b1.add(b2);
            Console.Write("b1.add(b2) = "); b1.print();
            b1.add(5);
            Console.Write("b1.add( 5) = "); b1.print();
            #endregion

            #region Bruchmultiplikation testen
            // Bruchinstanzen b1 und b2 mit Ursprungswerten erzeugen
            b1 = new Bruch(ZAEHLERB1, NENNERB1);
            b2 = new Bruch(ZAEHLERB2, NENNERB2);

            // Bruchinstanzen ausgeben
            Console.Write("\n      b1 = new Bruch(" + ZAEHLERB1 + ", " + NENNERB1 + "): ");
            b1.print();
            Console.Write("      b2 = new Bruch(" + ZAEHLERB2 + ", " + NENNERB2 + "): ");
            b2.print();

            Console.WriteLine("\nTest der Bruchmultiplikation (Klassenmethoden)...");
            b3 = Bruch.multiply(b1, b2);
            Console.Write("      b3   = Bruch.multiply(b1, b2) = "); b3.print();
            b3 = Bruch.multiply(b1, 5);
            Console.Write("      b3   = Bruch.multiply(b1,  5) = "); b3.print();
            b3 = Bruch.multiply(5, b2);
            Console.Write("      b3   = Bruch.multiply( 5, b2) = "); b3.print();
            Console.WriteLine("\nTest der Bruchmultiplikation (Instanzmethoden)...");
            b1.multiply(b2);
            Console.Write("b1.multiply(b2) = "); b1.print();
            b1.multiply(5);
            Console.Write("b1.multiply( 5) = "); b1.print();
            #endregion

            #region Bruchsubtraktion testen
            // Bruchinstanzen b1 und b2 mit Ursprungswerten erzeugen
            b1 = new Bruch(ZAEHLERB1, NENNERB1);
            b2 = new Bruch(ZAEHLERB2, NENNERB2);

            // Bruchinstanzen ausgeben
            Console.Write("\n      b1 = new Bruch(" + ZAEHLERB1 + ", " + NENNERB1 + "): ");
            b1.print();
            Console.Write("      b2 = new Bruch(" + ZAEHLERB2 + ", " + NENNERB2 + "): ");
            b2.print();

            Console.WriteLine("\nTest der Bruchsubtraktion (Klassenmethoden)...");
            b3 = Bruch.subtract(b1, b2);
            Console.Write("      b3   = Bruch.subtract(b1, b2) = "); b3.print();
            b3 = Bruch.subtract(b1, 5);
            Console.Write("      b3   = Bruch.subtract(b1,  5) = "); b3.print();
            b3 = Bruch.subtract(5, b1);
            Console.Write("      b3   = Bruch.subtract( 5, b1) = "); b3.print();
            Console.WriteLine("\nTest der Bruchsubtraktion (Instanzmethoden)...");
            b1.subtract(b2);
            Console.Write("b1.subtract(b2) = "); b1.print();
            b1.subtract(5);
            Console.Write("b1.subtract( 5) = "); b1.print();
            #endregion

            #region Bruchdivision testen
            // Bruchinstanzen b1 und b2 mit Ursprungswerten erzeugen
            b1 = new Bruch(ZAEHLERB1, NENNERB1);
            b2 = new Bruch(ZAEHLERB2, NENNERB2);

            // Bruchinstanzen ausgeben
            Console.Write("\n      b1 = new Bruch(" + ZAEHLERB1 + ", " + NENNERB1 + "): ");
            b1.print();
            Console.Write("      b2 = new Bruch(" + ZAEHLERB2 + ", " + NENNERB2 + "): ");
            b2.print();

            Console.WriteLine("\nTest der Bruchdivision (Klassenmethoden)...");
            b3 = Bruch.divide(b1, b2);
            Console.Write("      b3   = Bruch.divide(b1, b2) = "); b3.print();
            b3 = Bruch.divide(b1, 5);
            Console.Write("      b3   = Bruch.divide(b1,  5) = "); b3.print();
            b3 = Bruch.divide(5, b2);
            Console.Write("      b3   = Bruch.divide( 5, b2) = "); b3.print();
            Console.WriteLine("\nTest der Bruchdivision (Instanzmethoden)...");
            b1.divide(b2);
            Console.Write("b1.divide(b2) = "); b1.print();
            b1.divide(5);
            Console.Write("b1.divide( 5) = "); b1.print();
            #endregion

            Helpers.zeigeProgrammende();
        }