Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Berechnung wiederholen bis...
#1
Moin Gemeinde!

Ich benötige eine Formel, die folgende Funktionalität hat:

In Zelle A1 steht eine beliebige Ganzzahl.

Die Funktion soll nun foglendes erledigen:

1) wenn A1 = gerade Zahl, dann A1/2
2) wenn das Ergebnis wieder gerade ist, erneut durch 2 teilen
3) wiederholen, ... bis die Zahl auf 1 ist oder ungerade wird

4) wenn A1 ungerade ist oder gem. Berechnung ungerade geworden ist, soll folgende Rechnung durchgeführt werden:
(Ungerade Zahl x 3) + 1

5) dann soll wieder die Berechnung wie bei 1) starten...

Ich habe keine Idee, wie ich das in Excel lösen kann...


Beispiele:

Mit 19 starten und erhält: 19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, …
Mit 12 starten und erhält: 12, 6, 3, 10, 5, 16, 8, 4, 2, 1

Für jeden Tipp dankbar

Peter
Antworten Top
#2
Für 365/Web/2021+ B1: =WENN(A1:Z1=1;0;WENN(REST(A1:Z1;2)=1;A1:Z1*3+1;A1:Z1/2))

Iteration einstellen! Für XLWeb: In alter Version in leerer Datei Iteration aktivieren und diese leere Datei nach XLWeb hochladen und formelbestücken.
[-] Folgende(r) 1 Nutzer sagt Danke an LCohen für diesen Beitrag:
  • peter.muss
Antworten Top
#3
Hallo,

eigentlich ein Fall für VBA:

Code:
Sub Folge()
anf = 12
Do While anf <> 1
    If anf Mod 2 = 0 Then
        anf = anf / 2
    Else
        anf = anf * 3 + 1
    End If
    Debug.Print anf
Loop
End Sub

Wo kommt diese FRagestellung her, kommt mir irgendwie bekannt vor.

mfg
Antworten Top
#4
Vielen Dank für die Formel!
Klappt (fast) immer ... Wink
wenn die Zahlen größer werden, hört die Berechnung / Iteration einfach auf.
Ist völlig unspezifisch, machmal bereits bei 3 stelligen Zahlen machmal bei recht großen...
1299 als Startwert liefert in Zelle CW1 die Zahl 2429 und dann kommen nur noch nullen...

Mache ich da was falsch?

Vielen Dank für Deine Hilfe!

Peter

(11.07.2022, 19:46)Fennek schrieb: Hallo,

eigentlich ein Fall für VBA:


Hey Fennek, das ist das "Collatz Problem/Vermutung

Vielen Dank für das VBA Script.. da traue ich mich gar nicht ran, da ich nicht mal weiß, wie und wo ich das einfügen muss... Sad

Code:
Sub Folge()
anf = 12
Do While anf <> 1
    If anf Mod 2 = 0 Then
        anf = anf / 2
    Else
        anf = anf * 3 + 1
    End If
    Debug.Print anf
Loop
End Sub

Wo kommt diese FRagestellung her, kommt mir irgendwie bekannt vor.

mfg
Antworten Top
#5
Code:
Sub Folge()
Dim Anf As Long
Anf = 1299
Do While Anf <> 1
    If Anf Mod 2 = 0 Then
        Anf = Anf / 2
    Else
        Anf = Anf * 3 + 1
    End If
    Debug.Print Anf
Loop
End Sub

Mehr als 10.000 wurde es aber nicht.
Antworten Top
#6
A1:Z1 sagt doch aus, wie groß das Array ist. Einfach vergrößern (und die Iteration mindestens genauso groß).

=WENN(A1:Z1=1;0;WENN(REST(A1:Z1;2)=1;A1:Z1*3+1;A1:Z1/2))

wird übrigens aufgrund der Gleitkommaproblematik richtig zu

=WENN(RUNDEN(A1:Z1;)=1;0;WENN(REST(A1:Z1;2)=1;A1:Z1*3+1;RUNDEN(A1:Z1/2;)))
Antworten Top
#7
Testet Eure Ansätze mal mit 3732423. Kommen alle 597 Elemente heraus?
Antworten Top
#8
Wir sind kein sulprobil und kein Erdős.
Antworten Top
#9
Hi,

aber die 597 Elemente sind da!
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#10
Hallo,

Excel 365 ggf. Betakanal, als rekursive LAMBDA-Funktion, die auch VSTAPLEN (VSTACK) benötigt ...

PHP-Code:
=LET(Value;$A$1;F;LAMBDA(This;Array;LET(U;INDEX(Array;ZEILEN(Array);1);V;WENN(ISTGERADE(U);U/2;3*U+1);WENN(V<2;VSTAPELN(Array;V);This(This;VSTAPELN(Array;V)))));F(F;Value)) 

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste