Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Sonstige Fragen (http://www.informatikerboard.de/board/board.php?boardid=25)
--- Erneut VBA Aufgabe (http://www.informatikerboard.de/board/thread.php?threadid=981)


Geschrieben von Tamara20 am 24.06.2011 um 23:22:

  Erneut VBA Aufgabe

Hallo Leute :-)

Frage:
Schreiben Sie eine Funktion, welche das nte Element der Collatzfolge liefert.Das Anfangselement wird dabei mitgezählt.

Also ich gebe z.b zahl 6 ein und nte zahl 3
6,3,10,5,16,8,4,2,1
dann muss die zahl 10 rauskommen.

Soweit habe ich es.

Public Function nte(ByVal a As Integer, ByVal n As Integer) As Integer
Do Until a = 1
If a Mod 2 = 0 Then
a = a / 2
Else
a = 3 * a + 1
End If
Loop
nte = a

End Function

Hier bekomme ich nun die 1 was bei collatz ja zum schluss rauskommen soll.
Wie und was muss ich hier einbauen?
Ich hatte mal versucht einen leeren string einzugeben und dann mit Mid(s,i,1) die nte stelle rauszubekommen.

Vielen dank schonmal :-)



Geschrieben von Karlito am 25.06.2011 um 08:10:

 

Tipp: Abbruchbedingung der Schleife.

VG,

Karlito



Geschrieben von Tamara20 am 25.06.2011 um 10:10:

 

Eine Abbruchsbedingung ist doch Do Wihle oder so? hab ich recht?
und wenn ja soll ich do until wegmachen oder kann man sowas kombinieren.

danke karlito:-)



Geschrieben von Karlito am 25.06.2011 um 12:51:

 

In deinem Quelltext steht auch eine Abbruchbedingung

code:
1:
2:
3:
4:
5:
Do Until Abbruchbedingung
  Schleifenkörper
Loop


Du musst dir jetzt nur was einfallen lassen, wie du die Abbruchbedingung so anpasst, dass die Schleife auch stoppt, wenn dein n erreicht ist. Dazu musst du in der Schleife noch was mit dem n machen.

VG,

Karlito



Geschrieben von Tamara20 am 26.06.2011 um 21:10:

 

Public Function nte(ByVal a As Integer, ByVal n As Integer) As Integer
Do Until a = n
If a Mod 2 = 0 Then
a = a / 2
Else
a = 3 * a + 1
End If
Loop
nte = a

End Function

so habe ich das gemacht aber ich meinte das ist doch total faslch. so macht er ja nur wenn ich für n z.b 2 eingebe so lange geht die collatzschleife.

ich weiss nicht wie ich die funktion für n schreiben muss, das wenn ich collatz 1,5,6,7,9,16 und n 2 eingebe die 5 rauskommt.

die zündende idee fehlt mir ohhhh manooooo
versuch schon seit 1-2 tagen das hinzubekommen :-)



Geschrieben von Karlito am 26.06.2011 um 21:24:

 

Nicht verzweifeln smile

Ich möchte dir nur ungern die Lösung verraten, da es dir aus meiner Sicht wenig hilft.

1. Frage: ist es wirklich wichtig, dass die schleife bei a=1 abbricht? Was passiert wenn man sie weiter ausführt.
2. Frage: Wenn du das n-te Glied der Folge berechnen willst, musst du die Bildungsvorschrift n mal ausführen. Wie könntest du das erreichen?

VG,

Karlito


Forensoftware: Burning Board, entwickelt von WoltLab GmbH