euklidischer Algorithmus

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    euklidischer Algorithmus

    Habe mich heute mal mit ein bissel Mathe und VB beschäftigt. Dabei bin ich auf den Euklidischen Algorithmus und Primfaktor gestoßen. Im Web gibt es wieder X-Lösungsansätze. Habe dann einen gefunden, der zwar in C# aber nur rudimentär behandelt wurde.
    Habe das dann versucht in VB umzuwandeln.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class frm_main
    2. Dim a, b, neu_a As Double
    3. Dim rest As Double = 0
    4. Dim zwischenergebnis_ggt As Double = 0
    5. Dim ggteiler As Double
    6. Dim kgvielfache As Double
    7. Dim zahl2prim As Double
    8. Dim zwischenergebnis_kgv As Double
    9. Private Sub btn_berechnen_Click(sender As Object, e As EventArgs) Handles btn_berechnen.Click
    10. lb_ausgaben.Items.Clear()
    11. lb_primfaktor.Items.Clear()
    12. GGT_Ausgabe()
    13. primfaktor()
    14. End Sub
    15. Private Sub ZwischenschritteGGT()
    16. zwischenergebnis_ggt = CDbl(zwischenergebnis_ggt.ToString("N2"))
    17. lb_ausgaben.Items.Add(a & " geteilt durch " & b & " = " & zwischenergebnis_ggt & " Rest " & rest)
    18. End Sub
    19. Private Sub ZwischenschritteKGV()
    20. lb_ausgaben.Items.Add(a & " mal " & b & " = " & zwischenergebnis_ggt & " geteilt durch " & ggteiler)
    21. End Sub
    22. Private Sub GGT_Ausgabe()
    23. GGT_EuklidscherAlgorithmus()
    24. lb_ausgaben.Items.Add(Environment.NewLine)
    25. lb_ausgaben.Items.Add("Größter gemeinsamer Teiler: " & ggteiler)
    26. lb_ausgaben.Items.Add(Environment.NewLine)
    27. KGV_EuklidscherAlgorithmus()
    28. lb_ausgaben.Items.Add(Environment.NewLine)
    29. lb_ausgaben.Items.Add("Kleinstes gemein. Vielefache: " & kgvielfache)
    30. End Sub
    31. Private Function GGT_EuklidscherAlgorithmus() As Integer
    32. a = CInt(tb_zahl_a.Text)
    33. b = CInt(tb_zahl_b.Text)
    34. If a <= 0 OrElse b <= 0 Then : a = 0 : Return CInt(a) : Exit Function : End If
    35. If a < b Then neu_a = b : b = a : a = neu_a
    36. While b <> 0
    37. rest = a Mod b
    38. zwischenergebnis_ggt = a / b
    39. ZwischenschritteGGT()
    40. a = b
    41. b = rest
    42. End While
    43. ggteiler = a
    44. Return CInt(ggteiler)
    45. End Function
    46. Private Function KGV_EuklidscherAlgorithmus() As Integer
    47. a = CInt(tb_zahl_a.Text)
    48. b = CInt(tb_zahl_b.Text)
    49. kgvielfache = a * b / ggteiler
    50. zwischenergebnis_ggt = a * b
    51. ZwischenschritteKGV()
    52. Return CInt(kgvielfache)
    53. End Function
    54. Private Sub primfaktor()
    55. zahl2prim = CInt(a)
    56. If zahl2prim = 1 Then
    57. lb_primfaktor.Items.Add("Zahl ist nicht weiter teilbar.")
    58. Else
    59. While zahl2prim Mod 2 = 0
    60. zwischenergebnis_kgv = CInt(zahl2prim / 2)
    61. lb_primfaktor.Items.Add(zahl2prim & " : " & 2 & " = " & zwischenergebnis_kgv)
    62. zahl2prim = CInt(zahl2prim / 2)
    63. End While
    64. Dim i As Int64 = 3
    65. While i <= zahl2prim
    66. While zahl2prim Mod i = 0
    67. zwischenergebnis_kgv = CInt(zahl2prim / i)
    68. lb_primfaktor.Items.Add(zahl2prim & " : " & i & " = " & zwischenergebnis_kgv)
    69. zahl2prim = CInt(zahl2prim / i)
    70. End While
    71. i = i + 2
    72. End While
    73. End If
    74. End Sub
    75. Private Sub tb_zahl_a_Click(sender As Object, e As EventArgs) Handles tb_zahl_a.Click
    76. tb_zahl_a.Clear()
    77. End Sub
    78. Private Sub tb_zahl_b_Click(sender As Object, e As EventArgs) Handles tb_zahl_b.Click
    79. tb_zahl_b.Clear()
    80. End Sub
    81. End Class

    Bilder
    • Euklid-1.jpg

      143,46 kB, 643×342, 142 mal angesehen
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Klingt böse, aber als Moderator muss ich: Kommt da noch ne Frage oder was willst Du uns sagen?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Achso, völlig vergessen.

    Ja Frage: was geht zu verbessern.
    Gerade bei den Funktionen.

    Hatte zuerst:

    VB.NET-Quellcode

    1. Private Function GGT_EuklidscherAlgorithmus(ByVal a AS Integer, ByVal b As Integer) As Integer

    Ohne das, die Textboxen mit in die Funktion reinzubringen.
    a = CInt(tb_zahl_a.Text)
    b = CInt(tb_zahl_b.Text)

    Da hatte ich aber Probleme das in die Funktion zu bringen.
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Amelie schrieb:

    CInt(tb_zahl_a.Text)
    CInt in Verbindung mit einer TextBox ist gefährlich, weil du in eine TextBox etwas anderes als Zahlen schreiben kannst. Dann knallt's.
    Nimm besser ein NumericUpDown oder, wenn du Textboxen hast, nimm wenigstens Integer.TryParse
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --