Clever-Excel-Forum

Normale Version: Berechnung wiederholen bis...
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
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
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.
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
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
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.
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;)))
Testet Eure Ansätze mal mit 3732423. Kommen alle 597 Elemente heraus?
Wir sind kein sulprobil und kein Erdős.
Hi,

aber die 597 Elemente sind da!
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ß
Seiten: 1 2