ggt berechnen

  • VB6

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von roddy.

    ggt berechnen

    Hallo

    Ich muss ein Programm schreiben wo ich ich eben den ggt berechen soll. Allerdings komm ich einfach nicht auf die Formel um das hinzubekommen, bis jetzt sieht mein Programm so aus:

    Visual Basic-Quellcode

    1. Private Sub cmd_Berechnen_Click()
    2. 'Variablen
    3. Dim a As String 'Wert der Ersten Zahl
    4. Dim b As String 'Wert der zweiten Zahl
    5. Dim c As String 'Wert des ggt
    6. a = Val(Text1.Text)
    7. b = Val(Text2.Text)
    8. If (a = 0 Or b = 0) Then
    9. MsgBox ("Keine Division durch/mit Null!")
    10. Else
    11. c = ggt(a, b)
    12. End If
    13. Text3.Text = ("(" & a & " , " & b & ")" & " = " & c)
    14. End Sub
    15. Private Function ggt(ByVal a As String, ByVal b As String) As String
    16. If (a / 2 = b) Then
    17. c = b
    18. ElseIf (a = b) Then
    19. c = a
    20. Else
    21. c = (a / b) / a * (b * 2) <- DIE IS MEIN PROBLEMKIND
    22. End If
    23. ggt = c
    24. End Function


    Da wo Problemkind steht ist eben das Problem, die Formel da funktioniert nicht, dass weiss ich :D Aber ich find einfach keine Funktionierende :( Bei schönen Zahlen wie 30, 15 isses einfach,da hab ich schon ne Funktion, und wenn 2 Zahlen gleich sind auch, jetzt fehlt eben das eigentliche :(

    Jemand nen Tipp?

    Danke
    lol, wenns eine private Funktion sein soll, dann mach doch aus dem Public Function einfach ein Private Function ;)

    Hmm was bedeutet denn dieses -= ?

    Das bedeutet, daß du dekrementierst. Du könntest statt dessen auch A = A - B schreiben.

    Hmm.. nur so aus reinem Interesse.. was studierst du?
    Ich hab auch mal eine ggT-Funktion geschrieben und habe dabei den euklidischen Algorithmus verwendet (siehe hier). Den Rest einer Division kann man mit dem Mod-Operator ermitteln.

    Beispiel:

    Visual Basic-Quellcode

    1. Rest = 1029 Mod 42


    Dies ergibt für "Rest" den Wert 21, denn 1029 : 42 = 24 Rest 21.

    Übrigens: -= funktioniert bei VB6 nicht.

    EDIT: Genausowenig gibt es dort "End While" und "Return".

    @foxm2k:

    Den Algorithmus kenne ich ja gar nicht. Wo hast du denn den her? 8|

    Deine Methode ist zwar simpel, aber meine Methode benötigt weniger Schleifendurchläufe.

    Extreme Beispiele: Für ggT(1024, 10) benötigt deine Version 106 Schleifendurchläufe, meine nur 3.
    Für ggT(1020, 10) benötigt deine Version 102 Durchläufe, meine nur 1(!).
    Für ggT(12345, 23456) benötigt deine Version 262 Durchläufe, meine nur 6.

    Ich bin noch etwas geschockt, dass deine simple Methode das richtige Ergebnis bringt. Im Moment kann ich noch nicht nachvollziehen, wie das funktioniert. Falls du das erläutern kannst oder einen Link hast, wo das erklärt wird, wäre das toll.

    nochmal EDIT: "Return" gibt es schon, jedoch nur im Zusammenhang mit "GoSub".

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „roddy“ ()