C# :: Aufgabe #374 :: Lösung #2

3 Lösungen Lösungen öffentlich
#374

Primfaktorzerlegung und Potenzschreibweise

Fortgeschrittener - C# von JKooP - 03.04.2021 um 09:53 Uhr
1. Schreibe eine Methode/Funktion, die jede Integer- Zahl in ihre Primfaktoren zerlegen kann
und das Ergebnis als Array/Liste zurückgibt.

Beispiel:
24 = 2*2*2*3

Lösung:
a = { 2, 2, 2, 3 }

2. Schreibe eine weitere Methode/Funktion, die die Werte des Arrays aus Aufgabe 1
in Potenzschreibweise überführt und auf dem Bildschirm ausgibt.
Das Zeichen zur Darstellung kann je nach Vorliebe/Programmiersprache variieren (^, **, h, ...).

Lösung:
2*2*2 = 2^3
3 = 3^1

Ausgabe:
2^3 * 3^1

Viel Spaß
#2
vote_ok
von dson (640 Punkte) - 16.04.2021 um 16:27 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
/*
Dieser Code wurde Geschrieben von Damian Scherl
*/
namespace int_in_primzahlen_zerlegen
{
    class Program
    {
        static void Main(string[] args)
        {
            
            int zahl1 = 1;
            int zahl2 = zahl1;
            List<int> zahlenliste1 = new List<int>();

            

              while (zahl1 != 999)      //Solange nicht 999 eingegeben wird, wird das Programm ausgeführt -- 999 enspricht hier exit
              {
               Console.WriteLine("------------------------------------------------\nGib eine Zahl ein (Mit 999 wird abgebrochen");      //Eigabe neue Zahl.
               zahl1 = Convert.ToInt32(Console.ReadLine());
                zahl2 = zahl1;

                int teiler = 1;        //Der Teiler muss auf 1 gesetzt werden da sonst beim Eingeben einer zweiten Zahl eine endloschleife beginnt.
                zahlenliste1.Clear();

                    do                     //Mittels der  do while Schleife kann zuerst der Inhalt vor der ersten überprüfung ausgeführt werden.
                   {
                       teiler++;            //Bei jedem durchlauf die Zahl teiler um 1 erhöhen
                       while (zahl1 % teiler == 0)          //solange zahl1 / Teiler = 0 Rest ergiebt, gibt der Inhalt ausgeführt
                       {
                           zahlenliste1.Add(teiler);       //Lässt sich zahl 1 durch den teiler mit 0 teilen entspricht der teiler einer Primzahl
                           zahl1 = zahl1 / teiler;          //Damit aber nicht unendlich lange der Selbe Teiler ausgegen wird errechnen wir hier eine neue Zahl 1
                                                            //Somit wird aber jetzt statt beispielsweise 10 (erstbeste Primzahl ist 2) mit 5 also zahl 1 gerechnet.

                       }
                    if (zahl1 <= 1) // Dies dient nur der Sicherheit falls sich beim rechnen ein Negativer Wert oder 1 Ergibt. Dann wird das Programm abgebrochen.
                    {
                        break;
                    }

                   } while ((zahl1 / teiler != 1) && (zahl1 % teiler != 0)); //Die Do While schleife läuft so lange zahl 1 durch den teiler dividiert höher ist als 1 oder 0

                if (zahl1 > 1)  //Da ein negativer wert, 1 oder 0 nicht als Primzahl ausgegeben werden soll prüfen wir zunächst ob die Zahl1 auch höher ist.
                {
                    zahlenliste1.Add(zahl1);       //Wir müssen hier die übrige zahl1 auch noch mit andrucken. Diese ist da Finale Element.
                }

                Console.WriteLine("\nEinzelzahl Ausgabe:");
                foreach (var item in zahlenliste1)
                {
                    Console.Write(item+ " ");
                }
                
                //Zusammenfassung der zahlen in der Zahlenliste für eine Strukturierte Ausgabe
                int laufzahl = 0;
                int zahl3 = 1;

                Console.WriteLine("\n\nPotenzschreibweise Ausgabe:");
                for (int i = 2; i < zahl2; i++)
                {
                    foreach (var item in zahlenliste1)
                    {
                        if (i == item)
                        {
                            laufzahl++;
                            zahl3 = i;    //Da bei jedem durchlauf um 1 erhöhrt wird und wir nicht möchten das für jede zahl ein ^x ausgegeben wird der wert i in zahl3 geschrieben (unten weiterlesen)
                        }
                    }

                    
                    if (i == zahl3) //da zahl3 nun den wert von i hat und i in der for schleife nur 1x vorkommt können wir unsere Ausgabe so auch nur einmal und nicht mehrfach ausgeben lassen.
                    {
                        Console.WriteLine("{0} ^ {1}", i, laufzahl);
                        laufzahl = 0; //Würde die laufzahl nicht auf 0 gesetzt werden würde diese immer weiter erhöht (2 kommt 2 mal vor 3 kommt 4 mal vor, obwohl 3 nur 2 mal vorkommt)
                    }
                    
                }

                Console.WriteLine();

            } 

        } 

    }

}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
1819046

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.