Hallo zusammen,
ich habe eine Aufgabe zu knacken, wobei es um die Ulam'sche Vermutung geht. Die Aufgabe lautet:
Wenn Sie mit einer Zahl "zahl > 0" beginnen und diese Zahl wiederholt halbieren – sofern sie gerade ist –, oder aber mit 3 multiplizieren und 1 addieren – sofern sie ungerade ist –, dann landen Sie (dies ist bislang nicht allgemein gültig bewiesen) irgendwann bei der Zahl 1.
Planen Sie eine Methode UlamVermutung. Die Methode soll zunächst die Zahl, mit der sie aufgerufen wurde, ausgeben und sodann in jedem Berechnungsschritt den aktuellen Wert der Variablen "zahl" ausgeben. Die Berechnung endet, wenn zahl den Wert 1 erreicht hat. Hinweis: Sie werden eine Schleife benötigen
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ESAAufgabe4
{
class UlamVermutung
{
public int Ulam(int zahl)
{
Console.WriteLine("Ulamsche Berechnung:" + zahl);
while (zahl != 1)
{
if(zahl % 2 == 0)
{
zahl = zahl / 2;
Console.WriteLine("Ergebnis:" + zahl);
}
else if(zahl % 2 != 0)
{
zahl = zahl * (3 + 1);
Console.WriteLine("Ergebnis:" + zahl);
}
}
return zahl;
}
}
class Program
{
static void Main(string[] args)
{
UlamVermutung ula = new UlamVermutung();
ula.Ulam(3);
}
}
}
Der Code an sich ist Fehlerfrei geschrieben, aber wenn ich in der Main Methode unter "ula.Ulam" die Zahlen 1 oder 2 eingebe erhalte ich ein Ergebnis. Bei anderen Zahlen erhalte ich eine Endlosschleife.
Hat jemand eine Idee, wo mein Fehler liegt?
LG Irina
|