Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - wundersame Zahlen ( Collatz-Funktion)
coocky - Fr 11.04.08 10:32
Titel: wundersame Zahlen ( Collatz-Funktion)
Hallo Leute,
folgendes Problem:
Die Funktion
g : N ---> N,
g( n) := 1/2 n , falls n gerade und
g( n) := 3 n + 1 , falls n ungerade
heißt Collatz-Funktion(L. Collatz, um 1930).
Bezeichnung:
Eine natürliche Zahl n heißt wundersam, wenn es eine natürliche Zahl k gibt mit :
g^k (n) = 1.
Zum Beispiel ist die Zahl 15 wundersam, denn :
15 ---> 46 ---> 23 ---> 70 ---> 35 ---> 106 ---> 53 ---> 160 ---> 80 --->
40 ---> 20 ---> 10 ---> 5 ---> 16 ---> 8 ---> 4 ---> 2 ---> 1
Gibt es dafür einen Algorithmus?
Wir haben schon einmal probiert, das zu implementieren, allerdings stürzt das Programm beim Starten ab
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.Button2Click(Sender: TObject); begin close; end;
procedure TForm1.FormCreate(Sender: TObject); var zahl1, zahl2 : integer; wundersam : Boolean; begin zahl1:=StrToInt(Edit1.Text); Repeat if zahl1 mod 2 = 0 then zahl2:=zahl1 DIV 2 else zahl2:=3*Zahl1+1; until Zahl2=1; wundersam:=false; if zahl2=1 then wundersam:=true; if wundersam=true then Edit3.Text:='wundersam'; end; |
Kann uns jemand helfen?
Vielen Dank im voraus
MFG
Xentar - Fr 11.04.08 10:41
"Stürtzt ab" ist KEINE Fehlerbeschreibung!
Bleibt es hängen, schmeißt es eine Fehlermeldung, explodiert es?
Du hast dir da übrigens eine schöne Endlosschleife gebaut..
Vielleicht solltest du nur mit einer Variablen arbeiten, bzw. den Wert von Zahl1 auch mal verändern, und nicht nur Zahl2?
Und die Variable "wundersam" brauchst du nicht unbedingt.
Du kannst direkt schreiben
Delphi-Quelltext
1:
| if Zahl2=1 then Edit3.Text := 'wundersam'; |
coocky - Fr 11.04.08 10:53
naja es bleibt hängen also da kommt diese Benachrichtigung über Debugger-Exception.
Ist das wirklich ne Endlosschleife, wenn das so lange laufen soll bis Zahl2 = 1 ist?
Wir hatten auch erst den Quelltext den du jetzt vorgeschlagen hast aber da kam ne Fehlermeldung, dass wir Boolean-Werte verwenden sollen.
MFG
Xentar - Fr 11.04.08 11:09
coocky hat folgendes geschrieben: |
naja es bleibt hängen also da kommt diese Benachrichtigung über Debugger-Exception.
Ist das wirklich ne Endlosschleife, wenn das so lange laufen soll bis Zahl2 = 1 ist?
Wir hatten auch erst den Quelltext den du jetzt vorgeschlagen hast aber da kam ne Fehlermeldung, dass wir Boolean-Werte verwenden sollen.
MFG |
1. Bitte gewöhn dir an, präzise Fehlerbeschreibungen zu liefern.. Debugger-Exception kann immernoch so ziemlich alles sein. Diese Exceptions haben normalerweise einen Text, den man abschreiben kann.
2. Ja, das ist eine Endlosschleife. Überleg das ganze doch mal mit deinem Beispiel 15 als Startwert. 15 ist nicht durch 2 teilbar -> else Teil wird ausgeführt. Die neue berechnete Zahl steht in Zahl2, du prüfst aber wieder, ob Zahl1 (immernoch 15!) durch 2 teilbar ist -> wieder der else Teil -> im nächsten Durchlauf prüfst du wieder mit 15, usw.
Zahl2 wird also immer verdreifacht, und kann somit niemals 1 sein (Integer-Überlauf mal ausgenommen).
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!