Seite 1 von 1

Das Collatz Problem

Verfasst: Samstag 14. März 2015, 10:32
von nb5code
Hallo ich habe ein problem könntet ihr mir vielleicht helfen den code zu optimieren, da ich gerade nicht weiter komme

Code: Alles auswählen

Das Collatz-Problem
xn=input("Geben sie die zu berechnende Zahl an: ")
a = int(input("Wie viele Berechnungen?"))
for xn in range(a):
    if xn%2==0: 
        xn=xn/2 
        print("xgerade = ",xn)
    elif xn%2==1:
        xn=3*xn+1
        print("xungerade = ",xn)
es kommen immer falsche ergebnisse heraus

mein problem ist, dass ich xn mit dem modulo berechne und dann kommt halt das ergebnis von dem modulo raus ich möchte eigentlich , dass wenn die zahl gerade ist dann wird xn = xn/2 gerechnet und wenn es ungerade ist wird xn=3*xn+1 gerechnet

https://de.wikipedia.org/wiki/Collatz-Problem

Code: Alles auswählen

Geben sie die zu berechnende Zahl an: 7
Wie viele Berechnungen?10
xgerade =  0.0
xungerade =  2.0
xgerade =  1.0
xungerade =  5.0
xgerade =  2.0
xungerade =  8.0
xgerade =  3.0
xungerade =  11.0
xgerade =  4.0
xungerade =  14.0
das war dann die terminal ausgabe

Re: Das Collatz Problem

Verfasst: Samstag 14. März 2015, 11:25
von BlackJack
@nb5code: Das `xn` was der Benutzer eingibt wird vom Programm für rein gar nichts verwendet. Zeile zwei könntest Du komplett weglassen ohne das sich an der Berechnung in dem Programm etwas ändert.

Wenn das vom Benutzer eingegebe `xn` in einer *Rechnung* verwendet werden *würde*, dann würden Dir auch sehr schnell Probleme entstehen weil das keine Zahl sondern eine Zeichenkette ist.

Re: Das Collatz Problem

Verfasst: Samstag 14. März 2015, 18:50
von nb5code
@Blackjack Und wie müsste es dann aussehen wenn der Benutzer eine zahl eingeben kann und es dann alles berechnet wird?

Re: Das Collatz Problem

Verfasst: Samstag 14. März 2015, 18:54
von BlackJack
@nb5code: Wie man den Benutzer ein Zahl eingeben lässt weisst Du, das hast Du an anderer Stelle ja schon gemacht.

Schau doch noch mal *genau hin* woher die Werte von `xn` innerhalb der Schleife kommen. Wenn Du die zweite Zeile entfernst, dann ist das in der Schleife ja trotzdem definiert.

Re: Das Collatz Problem

Verfasst: Samstag 14. März 2015, 19:10
von nb5code
@Blackjack Dann wird es in der for schleife definiert aber wie schaffe ich das ich eine BenutzerEingabe einfuege

Re: Das Collatz Problem

Verfasst: Samstag 14. März 2015, 19:21
von BlackJack
@nb5code: Wo kommt der Wert von `xn` in Zeile 5 denn her? Und welchen Wert hat `xn` am Anfang vom jedem Schleifendurchlauf? Welchen beim ersten, welchen beim zweiten, und so weiter?

Re: Das Collatz Problem

Verfasst: Samstag 14. März 2015, 19:37
von nb5code
@Blackjack Ich bin gerade verwirrt koennten sie das auflösen

xn hat am Anfang jedes schleifendurchlaufs offensichtlich null

Re: Das Collatz Problem

Verfasst: Samstag 14. März 2015, 19:42
von BlackJack
@nb5code: Nein das ist nicht am Anfang von jedem Schleifendurchlauf 0. Dann müsste es ja bei jedem Schleifendurchlauf den gleichen Wert ausgeben. Einfach mal ein ``print(xn)`` gleich als erstes in der Schleife einfügen.

Re: Das Collatz Problem

Verfasst: Samstag 14. März 2015, 19:49
von nb5code
für Heute ists genug aber danke ich werde weiter versuchen @Blackjack

Re: Das Collatz Problem

Verfasst: Dienstag 17. März 2015, 12:10
von nb5code
hat alles geklappt hier ist der code

Code: Alles auswählen

xn=int(input("Geben sie die zu berechnende Zahl an: "))
a = int(input("Wie viele Berechnungen?"))
for i in range(a):
    if xn%2==0: 
        xn=xn/2 
        print("xgerade = ",xn)
    elif xn%2==1:
        xn=3*xn+1
        print("xungerade = ",xn)