Autor Beitrag
fabian0078
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Sa 03.11.18 12:44 
Hey, ich hab ein Programm geschrieben,welches eine eingelesene Zahl in die Primfaktoren zerlegt, dies wird auch erledigt. Jedoch funktioniert nicht die Schleife, welche weitere Zahlen aufteilen soll.

Die Ausgabe soll in etwa so aussehen:

Startwert eingeben: 100
Endwert eingeben: 110
100: 2 * 2 * 5 * 5
101: Primzahl
102: 2 * 3 * 17
...

Mein Code:
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace A3Primfaktorzerlegung
{
class Program
{
 static void Main(string[] args)
 {
  Console.Write("Startwert eingeben: ");
  int zahl = Convert.ToInt32(Console.ReadLine());

  Console.Write("Endwert eingeben: ");
  int ende = Convert.ToInt32(Console.ReadLine());

  int teiler = 1, temp = zahl;

  for (int i = zahl; i <= ende; i++) //Schleife funktioniert nicht wie erhofft, es wird nur für den ersten Wert die Zerlegung durchgeführt, danach wird die letzte Primzahl verwendet (meine Ausgabe wird unten zur Verständnis nochmal aufgelistet)
  {
    Console.Write(zahl + " = ");

    do // Führe die Schleife aus, solange der Quotient der geteilten Zahl != 1 und der Rest != 0 ist
    {
      teiler++; // Der 1. Teiler = 2

      while (zahl % teiler == 0// Der Teiler bleibt gleich, solange kein Rest entsteht
      {
        zahl = zahl / teiler;
        Console.Write((teiler) + "*");
      }                  
    } while ((zahl / teiler != 1) && (zahl % teiler != 0)); // Ist der Quotient = 1 und der Rest = 0 beende die Schleife

    if (zahl / temp == 1// zahl ist bereits eine Primzahl
    {
      Console.Write("Primzahl");
    }
    else
    {
      Console.WriteLine(zahl); // zahl ist eine Primzahl und der letzte Primfaktor
    }
  }
  Console.ReadKey();
 }
}
}

Meine Ausgabe für 102 und 107 ist:
102 = 2*3*17

17 = 17
17 = 17
17 = 17
17 = 17
17 = 17


Ich nehme an, dass der Fehler etwas mit der Variable "zahl" zutun hat und ich den Wert mit Hilfe einer anderen Zahl speichern soll?

Danke für eure Ideen.

Moderiert von user profile iconTh69: Quote- durch C#-Tags ersetzt
Moderiert von user profile iconTh69: Beitragsformatierung überarbeitet.
Moderiert von user profile iconTh69: Topic aus C# - Die Sprache verschoben am Sa 03.11.2018 um 12:25
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 03.11.18 13:19 
Hallo und :welcome:

ja genau, du veränderst ja innerhalb der inneren Schleife die Variable zahl.
Benutze einfach eine andere Variable dafür:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
int n = zahl;
while (n % teiler == 0)
{
  n /= teiler;
  // ...
}

Für diesen Beitrag haben gedankt: fabian0078