Collatz < Tabellenkalkulationen < Anwendungsprogramme < Praxis < Informatik < Vorhilfe
|
Hallo,
bin mal wieder bei collatz angekommen und habe ein Code aufgeschnappt für ein Makro in VBA Excel:
Sub eintragen()
Dim maxSpalten As Integer, Zeile As Integer
Dim feritg As Boolean
maxSpalten = 100
Rows("1:65536").ClearContents
For Spalte = 1 To maxSpalten 'erste Zeile eintragen
fertig = False
Zeile = 1
Cells(1, Spalte).Value = Spalte
Do Until fertig = True
Cells(Zeile + 1, Spalte).Value = Collatz(Cells(Zeile, Spalte).Value)
If Collatz(Cells(Zeile, Spalte).Value) = 1 And Zeile >= 2 Then
fertig = True
End If
Zeile = Zeile + 1
Loop
Next
End Sub
Function Collatz(zahl As Integer) As Integer
If zahl Mod 2 = 0 Then 'zahl ist gerade
Collatz = zahl / 2
Else 'zahl ist ungerade
Collatz = 3 * zahl + 1
End If
End Function
Ich habe den Code in ein Makro von Excel kopiert... Und es hat funktioniert...
Es geht um die Collatz Vorschrift Schleife bei Geraden Zahlen zu halbieren und bei ungeraden x3+1 zu errechnen.
Nun hätte ich gerne den Code wie folgt abgeändert:
Der ursprüngliche Code wäre also z.B. für 17:
17,52,26,13,40,20,10,5,16,8,4,2,1
Ich hätte aber gerne:
17,13,5,1
Also sollen quasi nur die ungeraden Zahlen auftauchen zur besseren Visualisierung...
Kann mir jemand helfen?
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 21:56 Fr 08.04.2016 | Autor: | chrisno |
Definiere U_Collatz und rufe diese in eintragen() auf
Function U_Collatz(zahl As Integer) As Integer
Do
Zahl = Collatz(Zahl)
Loop Until not (zahl Mod 2 = 0)
U_Collatz = zahl
End Function
Meine VBA-Aktivitäten liegen schon 13 Jahre zurück, also musst Du den Code eventuell nachbessern.
|
|
|
|