Mathematik mit VBA - Teil 3: Dreiecksberechnung

    • VBA: Sonstige

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

      Mathematik mit VBA - Teil 3: Dreiecksberechnung

      Da bin ich wieder. Diesmal widme ich mich der Berechnung von Dreieck-Werten.

      Zunächst jedoch für diejenigen, die sich fragen, was Teil 1 und Teil 2 waren, hier die Links:

      [VBA: Sonstige/Allgemein] Mathematik mit VBA - Teil 1: Primzahlen, Bruchrechnen, Kombinatronik und Statistik

      [VBA: Sonstige/Allgemein] Mathematik mit VBA - Teil 2: komplexe Zahlen und Nullstellen ganzrationaler Funktionen

      Damit klar ist, welche Größe wo am Dreieck ist, hier zwei Zeichnungen:



      Ich benutze ein Klasenmodul, das ich „Dreieck“ nenne. Es ist übrigens mein erstes Klassenmodul.

      Da der Code recht umfangreich ist (1422 Zeilen), habe ich zusätzlich das Klassenmodul hochgeladen:

      Dreieck.zip

      Wenn ein Wert festgelegt wird (z. B. SeiteA), werden alle Werte ermittelt, die aufgrund der bisher bestimmten Werte berechnet werden können. Wenn also beispielsweise SeiteA bereits bestimmt ist und dann HöheHa festgelegt wird, wird automatisch der Flächeninhalt berechnet.

      Dies sind die Elemente, auf die außerhalb des Klassenmoduls zugegriffen werden kann:

      Quellcode

      1. Eigenschaften
      2. Name Datentyp Zahlenbereich Bemerkung
      3. Flächeninhalt Double > 0
      4. HöheHa Double > 0
      5. HöheHb Double > 0
      6. HöheHc Double > 0
      7. Inkreisradius Double > 0
      8. Längeneinheit String Standardwert: NullString ("")
      9. SeiteA Double > 0
      10. SeiteB Double > 0
      11. SeiteC Double > 0
      12. StreckePa Double beliebig
      13. StreckePb Double beliebig
      14. StreckePc Double beliebig
      15. StreckeQa Double beliebig
      16. StreckeQb Double beliebig
      17. StreckeQc Double beliebig
      18. Umfang Double > 0
      19. Umkreisradius Double > 0
      20. WinkelAlpha Double > 0, < pi Bogenmaß
      21. WinkelAlpha° Double > 0, < 180 Gradmaß
      22. WinkelBeta Double > 0, < pi Bogenmaß
      23. WinkelBeta° Double > 0, < 180 Gradmaß
      24. WinkelGamma Double > 0, < pi Bogenmaß
      25. WinkelGamma° Double > 0, < 180 Gradmaß
      26. Methoden mit Rückgabewert
      27. Name Datentyp Parameter Bemerkung
      28. alleWerte Boolean - Gibt zurück, ob alle Werte bestimmt sind.
      29. AnzahlWerte Integer - Gibt die Anzahl der bestimmten Werte zurück.
      30. pi Double - Gibt pi zurück.
      31. Rechenweg String - Gibt eine Liste mit den verwendeten Formeln zurück.
      32. Werteliste String Nachkommastellen Gibt eine Liste der Werte zurück.
      33. WertelisteKurz String - Gibt eine Liste der bestimmten Werte zurück (Kurzform).
      34. Methoden ohne Rückgabewert
      35. Name Parameter Bemerkung
      36. PlausiPrüfung - Zeigt nennenswerte Differenzen an.
      37. Zurücksetzen - Setzt alle Werte zurück.


      Die PlausiPrüfung diente mir vor allem in der Testphase, um Berechnungsfehler und andere Fehler im Code aufzuspüren. Eigentlich bin ich soweit, zu sagen, dass der Code fertig ist. Da ich jedoch aufgrund der Vielzahl von Eingabemöglichkeiten nicht alles testen konnte, bitte ich diejenigen, die das ausprobieren/verwenden, mir mitzuteilen, wenn bei der PlausiPrüfung eine Meldung mit einem „Critical“-Symbol erscheint (weißes X auf rotem Punkt) oder sonstige merkwürdige Fehlermeldungen oder Ergebnisse haben.

      Auch für sonstige Anregungen, Kritik u. ä. bin ich offen.


      So sieht beispielsweise die Anwendung in einem separaten Modul aus:

      Visual Basic-Quellcode

      1. Sub test()
      2. Dim dr As New Dreieck
      3. With dr
      4. .SeiteA = 3
      5. .Längeneinheit = "cm"
      6. .WinkelAlpha° = 60
      7. .WinkelGamma = .pi / 4
      8. MsgBox .SeiteB 'Gibt den Wert von SeiteB aus.
      9. MsgBox .SeiteC 'Gibt den Wert von SeiteC aus.
      10. MsgBox .Werteliste(3) 'Gibt eine Liste der Werte mit 3 Nachkommastellen aus.
      11. MsgBox .Werteliste 'Gibt eine Liste der Werte im Standard-Zahlenformat aus.
      12. MsgBox .Rechenweg 'Gibt eine Liste mit den verwendeten Formeln und Rechenergebnissen aus.
      13. .PlausiPrüfung 'Gibt nennenswerte Differenzen aus.
      14. End With
      15. End Sub
      Hier zunächst die Enumerationen und Variablen auf Modulebene:

      Visual Basic-Quellcode

      1. Private Enum drFehlertyp
      2. drKeinWert = 513
      3. drBereitsBestimmt = 514
      4. drZahlenbereich = 515
      5. drWinkelbereich = 516
      6. drUnmöglich = 517
      7. End Enum
      8. Private Enum drSeite
      9. drA = 1
      10. drB = 2
      11. drC = 3
      12. End Enum
      13. Private Enum drWinkel
      14. drAlpha = 1
      15. drBeta = 2
      16. drGamma = 3
      17. End Enum
      18. Private Enum drHöhe
      19. drHa = 1
      20. drHb = 2
      21. drHc = 3
      22. End Enum
      23. 'Hilfsvariablen, die die Werte enthalten
      24. Private a As Double, b As Double, c As Double
      25. Private alpha As Double, beta As Double, gamma As Double
      26. Private ha As Double, hb As Double, hc As Double
      27. Private U As Double, F As Double
      28. Private rho As Double, r As Double
      29. Private pa As Double, pb As Double, pc As Double
      30. Private qa As Double, qb As Double, qc As Double
      31. 'Hilfsvariablen, die angeben, ob ein Wert bestimmt ist oder nicht.
      32. Private a1 As Boolean, b1 As Boolean, c1 As Boolean
      33. Private alpha1 As Boolean, beta1 As Boolean, gamma1 As Boolean
      34. Private ha1 As Boolean, hb1 As Boolean, hc1 As Boolean
      35. Private U1 As Boolean, F1 As Boolean
      36. Private rho1 As Boolean, r1 As Boolean
      37. Private pa1 As Boolean, pb1 As Boolean, pc1 As Boolean
      38. Private qa1 As Boolean, qb1 As Boolean, qc1 As Boolean
      39. Public Längeneinheit As String
      40. Private Formeln As String


      Hier noch grundlegende Funktionen und Prozeduren:

      Visual Basic-Quellcode

      1. Public Function pi() As Double
      2. pi = 4 * Atn(1)
      3. End Function
      4. Public Sub Zurücksetzen()
      5. 'Löscht alle vorgenommenen Eingaben und Berechnungen
      6. a1 = False
      7. b1 = False
      8. c1 = False
      9. alpha1 = False
      10. beta1 = False
      11. gamma1 = False
      12. ha1 = False
      13. hb1 = False
      14. hc1 = False
      15. U1 = False
      16. F1 = False
      17. rho1 = False
      18. r1 = False
      19. pa1 = False
      20. pb1 = False
      21. pc1 = False
      22. qa1 = False
      23. qb1 = False
      24. qc1 = False
      25. Längeneinheit = ""
      26. Formeln = ""
      27. End Sub
      28. Private Sub Fehlermeldung(Fehler As drFehlertyp, Optional Werttext As String = "Wert", Optional Wert As Double)
      29. Dim Fehlertext As String
      30. Select Case Fehler
      31. Case drKeinWert
      32. Fehlertext = Werttext & " ist nicht bestimmt."
      33. Case drBereitsBestimmt
      34. Fehlertext = Werttext & " ist bereits bestimmt: " & Wert
      35. If Left(Werttext, 6) = "Winkel" Then Fehlertext = Fehlertext & " (= " & Wert / pi * 180 & "°)"
      36. Case drZahlenbereich
      37. Fehlertext = Werttext & " muss größer als 0 sein: " & Wert
      38. Case drWinkelbereich
      39. Fehlertext = Werttext & " muss größer als 0 und kleiner als pi (= 180°) sein:" & vbCrLf & Wert & " (= " & Wert / pi * 180 & "°)"
      40. Case drUnmöglich
      41. Fehlertext = "Unmögliche Wertekombination für ein Dreieck:" & vbCrLf & vbCrLf & WertelisteKurz(Werttext)
      42. Case Else: Stop
      43. End Select
      44. Err.Raise vbObjectError + Fehler, , vbCrLf & "Dreieck-Klasse:" & vbCrLf & vbCrLf & Fehlertext
      45. End Sub
      46. Private Function Wurzel(x As Double, Werte As String) As Double
      47. If x < 0 Then Fehlermeldung drUnmöglich, Werte
      48. Wurzel = Sqr(x)
      49. End Function
      50. Private Function Wurzel3(x As Double) As Double
      51. Wurzel3 = Sgn(x) * Abs(x) ^ (1 / 3)
      52. End Function
      53. Private Function ArcCos(x As Double, Werte As String) As Double
      54. If x < -1 Or x > 1 Then Fehlermeldung drUnmöglich, Werte
      55. If x = 1 Then ArcCos = 0 Else ArcCos = Atn(-x / Wurzel(-x * x + 1, Werte)) + 2 * Atn(1)
      56. End Function
      In den folgenden Prozeduren werden die Werte, die aufgrund vorhandener Werte berechnet werden können, ermittelt. Ich habe gleichartige Formeln „gruppiert“ und für jede Gruppe eine Prozedur gemacht.

      Visual Basic-Quellcode

      1. Private Sub Umfangformel()
      2. 'Berechnet fehlende Werte aufgrund der Umfangformel, sofern möglich.
      3. If (Not a1) And b1 And c1 And U1 Then
      4. Formeln = Formeln & vbCrLf & "U=a+b+c"
      5. SeiteA = U - b - c
      6. ElseIf a1 And (Not b1) And c1 And U1 Then
      7. Formeln = Formeln & vbCrLf & "U=a+b+c"
      8. SeiteB = U - a - c
      9. ElseIf a1 And b1 And (Not c1) And U1 Then
      10. Formeln = Formeln & vbCrLf & "U=a+b+c"
      11. SeiteC = U - a - b
      12. ElseIf a1 And b1 And c1 And (Not U1) Then
      13. Formeln = Formeln & vbCrLf & "U=a+b+c"
      14. Umfang = a + b + c
      15. End If
      16. End Sub
      17. Private Sub Teilstrecken(Seite As drSeite)
      18. 'Berechnet fehlende Werte aufgrund der Aufteilung einer Seite in p und q, sofern möglich.
      19. Select Case Seite
      20. Case drA
      21. If (Not a1) And pa1 And qa1 Then
      22. Formeln = Formeln & vbCrLf & "a=pa+qa"
      23. SeiteA = pa + qa
      24. ElseIf a1 And (Not pa1) And qa1 Then
      25. Formeln = Formeln & vbCrLf & "a=pa+qa"
      26. StreckePa = a - qa
      27. ElseIf a1 And pa1 And (Not qa1) Then
      28. Formeln = Formeln & vbCrLf & "a=pa+qa"
      29. StreckeQa = a - pa
      30. End If
      31. Case drB
      32. If (Not b1) And pb1 And qb1 Then
      33. Formeln = Formeln & vbCrLf & "b=pb+qb"
      34. SeiteB = pb + qb
      35. ElseIf b1 And (Not pb1) And qb1 Then
      36. Formeln = Formeln & vbCrLf & "b=pb+qb"
      37. StreckePb = b - qb
      38. ElseIf b1 And pb1 And (Not qb1) Then
      39. Formeln = Formeln & vbCrLf & "b=pb+qb"
      40. StreckeQb = b - pb
      41. End If
      42. Case drC
      43. If (Not c1) And pc1 And qc1 Then
      44. Formeln = Formeln & vbCrLf & "c=pc+qc"
      45. SeiteC = pc + qc
      46. ElseIf c1 And (Not pc1) And qc1 Then
      47. Formeln = Formeln & vbCrLf & "c=pc+qc"
      48. StreckePc = c - qc
      49. ElseIf c1 And pc1 And (Not qc1) Then
      50. Formeln = Formeln & vbCrLf & "c=pc+qc"
      51. StreckeQc = c - pc
      52. End If
      53. End Select
      54. End Sub
      55. Private Sub Winkelsumme()
      56. 'Berechnet fehlende Werte aufgrund der Winkelsumme von 180°, sofern möglich.
      57. If (Not alpha1) And beta1 And gamma1 Then
      58. Formeln = Formeln & vbCrLf & "alpha+beta+gamma=180°"
      59. WinkelAlpha = pi - beta - gamma
      60. ElseIf alpha1 And (Not beta1) And gamma1 Then
      61. Formeln = Formeln & vbCrLf & "alpha+beta+gamma=180°"
      62. WinkelBeta = pi - alpha - gamma
      63. ElseIf alpha1 And beta1 And (Not gamma1) Then
      64. Formeln = Formeln & vbCrLf & "alpha+beta+gamma=180°"
      65. WinkelGamma = pi - alpha - beta
      66. End If
      67. End Sub
      68. Private Sub Fläche(Seite As drSeite)
      69. 'Berechnet fehlende Werte aufgrund von Flächeninhaltsformeln, sofern möglich.
      70. Select Case Seite
      71. Case drA
      72. If (Not a1) And ha1 And F1 Then
      73. Formeln = Formeln & vbCrLf & "F=a*ha/2"
      74. SeiteA = 2 * F / ha
      75. ElseIf a1 And (Not ha1) And F1 Then
      76. Formeln = Formeln & vbCrLf & "F=a*ha/2"
      77. HöheHa = 2 * F / a
      78. ElseIf a1 And ha1 And (Not F1) Then
      79. Formeln = Formeln & vbCrLf & "F=a*ha/2"
      80. Flächeninhalt = a * ha / 2
      81. End If
      82. Case drB
      83. If (Not b1) And hb1 And F1 Then
      84. Formeln = Formeln & vbCrLf & "F=b*hb/2"
      85. SeiteB = 2 * F / hb
      86. ElseIf b1 And (Not hb1) And F1 Then
      87. Formeln = Formeln & vbCrLf & "F=b*hb/2"
      88. HöheHb = 2 * F / b
      89. ElseIf b1 And hb1 And (Not F1) Then
      90. Formeln = Formeln & vbCrLf & "F=b*hb/2"
      91. Flächeninhalt = b * hb / 2
      92. End If
      93. Case drC
      94. If (Not c1) And hc1 And F1 Then
      95. Formeln = Formeln & vbCrLf & "F=c*hc/2"
      96. SeiteC = 2 * F / hc
      97. ElseIf c1 And (Not hc1) And F1 Then
      98. Formeln = Formeln & vbCrLf & "F=c*hc/2"
      99. HöheHc = 2 * F / c
      100. ElseIf c1 And hc1 And (Not F1) Then
      101. Formeln = Formeln & vbCrLf & "F=c*hc/2"
      102. Flächeninhalt = c * hc / 2
      103. End If
      104. End Select
      105. End Sub

      Visual Basic-Quellcode

      1. Private Sub Umkreis(Höhe As drHöhe)
      2. 'Berechnet fehlende Werte aufgrund von Umkreisformeln, sofern möglich.
      3. Select Case Höhe
      4. Case drHa
      5. If (Not b1) And c1 And ha1 And r1 Then
      6. Formeln = Formeln & vbCrLf & "r=bc/2ha"
      7. SeiteB = 2 * ha * r / c
      8. ElseIf b1 And (Not c1) And ha1 And r1 Then
      9. Formeln = Formeln & vbCrLf & "r=bc/2ha"
      10. SeiteC = 2 * ha * r / b
      11. ElseIf b1 And c1 And (Not ha1) And r1 Then
      12. Formeln = Formeln & vbCrLf & "r=bc/2ha"
      13. HöheHa = b * c / (2 * r)
      14. ElseIf b1 And c1 And ha1 And (Not r1) Then
      15. Formeln = Formeln & vbCrLf & "r=bc/2ha"
      16. Umkreisradius = b * c / (2 * ha)
      17. End If
      18. Case drHb
      19. If (Not a1) And c1 And hb1 And r1 Then
      20. Formeln = Formeln & vbCrLf & "r=ac/2hb"
      21. SeiteA = 2 * hb * r / c
      22. ElseIf a1 And (Not c1) And hb1 And r1 Then
      23. Formeln = Formeln & vbCrLf & "r=ac/2hb"
      24. SeiteC = 2 * hb * r / a
      25. ElseIf a1 And c1 And (Not hb1) And r1 Then
      26. Formeln = Formeln & vbCrLf & "r=ac/2hb"
      27. HöheHb = a * c / (2 * r)
      28. ElseIf a1 And c1 And hb1 And (Not r1) Then
      29. Formeln = Formeln & vbCrLf & "r=ac/2hb"
      30. Umkreisradius = a * c / (2 * hb)
      31. End If
      32. Case drHc
      33. If (Not a1) And b1 And hc1 And r1 Then
      34. Formeln = Formeln & vbCrLf & "r=ab/2hc"
      35. SeiteA = 2 * hc * r / b
      36. ElseIf a1 And (Not b1) And hc1 And r1 Then
      37. Formeln = Formeln & vbCrLf & "r=ab/2hc"
      38. SeiteB = 2 * hc * r / a
      39. ElseIf a1 And b1 And (Not hc1) And r1 Then
      40. Formeln = Formeln & vbCrLf & "r=ab/2hc"
      41. HöheHc = a * b / (2 * r)
      42. ElseIf a1 And b1 And hc1 And (Not r1) Then
      43. Formeln = Formeln & vbCrLf & "r=ab/2hc"
      44. Umkreisradius = a * b / (2 * hc)
      45. End If
      46. End Select
      47. End Sub
      48. Private Sub SinFormel(Seite As drSeite, Höhe As drHöhe)
      49. 'Berechnet fehlende Werte aufgrund von Formeln, die den Sinus benutzen, sofern möglich.
      50. Select Case Seite + Höhe * 3
      51. Case drA + drHb * 3
      52. If (Not a1) And hb1 And gamma1 Then
      53. Formeln = Formeln & vbCrLf & "hb=a*sin(gamma)"
      54. SeiteA = hb / Sin(gamma)
      55. ElseIf a1 And (Not hb1) And gamma1 Then
      56. Formeln = Formeln & vbCrLf & "hb=a*sin(gamma)"
      57. HöheHb = a * Sin(gamma)
      58. End If
      59. Case drA + drHc * 3
      60. If (Not a1) And hc1 And beta1 Then
      61. Formeln = Formeln & vbCrLf & "hc=a*sin(beta)"
      62. SeiteA = hc / Sin(beta)
      63. ElseIf a1 And (Not hc1) And beta1 Then
      64. Formeln = Formeln & vbCrLf & "hc=a*sin(beta)"
      65. HöheHc = a * Sin(beta)
      66. End If
      67. Case drB + drHa * 3
      68. If (Not b1) And ha1 And gamma1 Then
      69. Formeln = Formeln & vbCrLf & "ha=b*sin(gamma)"
      70. SeiteB = ha / Sin(gamma)
      71. ElseIf b1 And (Not ha1) And gamma1 Then
      72. Formeln = Formeln & vbCrLf & "ha=b*sin(gamma)"
      73. HöheHa = b * Sin(gamma)
      74. End If
      75. Case drB + drHc * 3
      76. If (Not b1) And hc1 And alpha1 Then
      77. Formeln = Formeln & vbCrLf & "hc=b*sin(alpha)"
      78. SeiteB = hc / Sin(alpha)
      79. ElseIf b1 And (Not hc1) And alpha1 Then
      80. Formeln = Formeln & vbCrLf & "hc=b*sin(alpha)"
      81. HöheHc = b * Sin(alpha)
      82. End If
      83. Case drC + drHa * 3
      84. If (Not c1) And ha1 And beta1 Then
      85. Formeln = Formeln & vbCrLf & "ha=c*sin(beta)"
      86. SeiteC = ha / Sin(beta)
      87. ElseIf c1 And (Not ha1) And beta1 Then
      88. Formeln = Formeln & vbCrLf & "ha=c*sin(beta)"
      89. HöheHa = c * Sin(beta)
      90. End If
      91. Case drC + drHb * 3
      92. If (Not c1) And hb1 And alpha1 Then
      93. Formeln = Formeln & vbCrLf & "hb=c*sin(alpha)"
      94. SeiteC = hb / Sin(alpha)
      95. ElseIf c1 And (Not hb1) And alpha1 Then
      96. Formeln = Formeln & vbCrLf & "hb=c*sin(alpha)"
      97. HöheHb = c * Sin(alpha)
      98. End If
      99. Case Else: Stop
      100. End Select
      101. End Sub

      Visual Basic-Quellcode

      1. Private Sub CosFormel(Seite As drSeite, Winkel As drWinkel)
      2. 'Berechnet fehlende Werte aufgrund von Formeln, die den Kosinus benutzen, sofern möglich.
      3. Select Case Seite + Winkel * 3
      4. Case drA + drBeta * 3
      5. If (Not a1) And beta1 And qc1 Then
      6. Formeln = Formeln & vbCrLf & "qc=a*cos(beta)"
      7. SeiteA = qc / Cos(beta)
      8. ElseIf a1 And (Not beta1) And qc1 Then
      9. Formeln = Formeln & vbCrLf & "qc=a*cos(beta)"
      10. WinkelBeta = ArcCos(qc / a, "qc,a")
      11. ElseIf a1 And beta1 And (Not qc1) Then
      12. Formeln = Formeln & vbCrLf & "qc=a*cos(beta)"
      13. StreckeQc = a * Cos(beta)
      14. End If
      15. Case drA + drGamma * 3
      16. If (Not a1) And gamma1 And pb1 Then
      17. Formeln = Formeln & vbCrLf & "pb=a*cos(gamma)"
      18. SeiteA = pb / Cos(gamma)
      19. ElseIf a1 And (Not gamma1) And pb1 Then
      20. Formeln = Formeln & vbCrLf & "pb=a*cos(gamma)"
      21. WinkelGamma = ArcCos(pb / a, "pb,a")
      22. ElseIf a1 And gamma1 And (Not pb1) Then
      23. Formeln = Formeln & vbCrLf & "pb=a*cos(gamma)"
      24. StreckePb = a * Cos(gamma)
      25. End If
      26. Case drB + drAlpha * 3
      27. If (Not b1) And alpha1 And pc1 Then
      28. Formeln = Formeln & vbCrLf & "pc=b*cos(alpha)"
      29. SeiteB = pc / Cos(alpha)
      30. ElseIf b1 And (Not alpha1) And pc1 Then
      31. Formeln = Formeln & vbCrLf & "pc=b*cos(alpha)"
      32. WinkelAlpha = ArcCos(pc / b, "pc,b")
      33. ElseIf b1 And alpha1 And (Not pc1) Then
      34. Formeln = Formeln & vbCrLf & "pc=b*cos(alpha)"
      35. StreckePc = b * Cos(alpha)
      36. End If
      37. Case drB + drGamma * 3
      38. If (Not b1) And gamma1 And qa1 Then
      39. Formeln = Formeln & vbCrLf & "qa=b*cos(gamma)"
      40. SeiteB = qa / Cos(gamma)
      41. ElseIf b1 And (Not gamma1) And qa1 Then
      42. Formeln = Formeln & vbCrLf & "qa=b*cos(gamma)"
      43. WinkelGamma = ArcCos(qa / b, "qa,b")
      44. ElseIf b1 And gamma1 And (Not qa1) Then
      45. Formeln = Formeln & vbCrLf & "qa=b*cos(gamma)"
      46. StreckeQa = b * Cos(gamma)
      47. End If
      48. Case drC + drAlpha * 3
      49. If (Not c1) And alpha1 And qb1 Then
      50. Formeln = Formeln & vbCrLf & "qb=c*cos(alpha)"
      51. SeiteC = qb / Cos(alpha)
      52. ElseIf c1 And (Not alpha1) And qb1 Then
      53. Formeln = Formeln & vbCrLf & "qb=c*cos(alpha)"
      54. WinkelAlpha = ArcCos(qb / c, "qb,c")
      55. ElseIf c1 And alpha1 And (Not qb1) Then
      56. Formeln = Formeln & vbCrLf & "qb=c*cos(alpha)"
      57. StreckeQb = c * Cos(alpha)
      58. End If
      59. Case drC + drBeta * 3
      60. If (Not c1) And beta1 And pa1 Then
      61. Formeln = Formeln & vbCrLf & "pa=c*cos(beta)"
      62. SeiteC = pa / Cos(beta)
      63. ElseIf c1 And (Not beta1) And pa1 Then
      64. Formeln = Formeln & vbCrLf & "pa=c*cos(beta)"
      65. WinkelBeta = ArcCos(pa / c, "pa,c")
      66. ElseIf c1 And beta1 And (Not pa1) Then
      67. Formeln = Formeln & vbCrLf & "pa=c*cos(beta)"
      68. StreckePa = c * Cos(beta)
      69. End If
      70. Case Else: Stop
      71. End Select
      72. End Sub
      73. Private Sub Pythagoras(Seite As drSeite, Höhe As drHöhe)
      74. 'Berechnet fehlende Werte aufgrund von Formeln, die auf dem Satz des Pythagoras beruhen, sofern möglich.
      75. Select Case Seite + Höhe * 3
      76. Case drA + drHb * 3
      77. If (Not a1) And hb1 And pb1 Then
      78. Formeln = Formeln & vbCrLf & "pb²+hb²=a²"
      79. SeiteA = Wurzel(pb ^ 2 + hb ^ 2, "pb,hb")
      80. ElseIf a1 And (Not hb1) And pb1 Then
      81. Formeln = Formeln & vbCrLf & "pb²+hb²=a²"
      82. HöheHb = Wurzel(a ^ 2 - pb ^ 2, "a,pb")
      83. End If
      84. Case drA + drHc * 3
      85. If (Not a1) And hc1 And qc1 Then
      86. Formeln = Formeln & vbCrLf & "qc²+hc²=a²"
      87. SeiteA = Wurzel(qc ^ 2 + hc ^ 2, "qc,hc")
      88. ElseIf a1 And (Not hc1) And qc1 Then
      89. Formeln = Formeln & vbCrLf & "qc²+hc²=a²"
      90. HöheHc = Wurzel(a ^ 2 - qc ^ 2, "a,qc")
      91. End If
      92. Case drB + drHa * 3
      93. If (Not b1) And ha1 And qa1 Then
      94. Formeln = Formeln & vbCrLf & "qa²+ha²=b²"
      95. SeiteB = Wurzel(qa ^ 2 + ha ^ 2, "qa,ha")
      96. ElseIf b1 And (Not ha1) And qa1 Then
      97. Formeln = Formeln & vbCrLf & "qa²+ha²=b²"
      98. HöheHa = Wurzel(b ^ 2 - qa ^ 2, "b,qa")
      99. End If
      100. Case drB + drHc * 3
      101. If (Not b1) And hc1 And pc1 Then
      102. Formeln = Formeln & vbCrLf & "pc²+hc²=b²"
      103. SeiteB = Wurzel(pc ^ 2 + hc ^ 2, "pc,hc")
      104. ElseIf b1 And (Not hc1) And pc1 Then
      105. Formeln = Formeln & vbCrLf & "pc²+hc²=b²"
      106. HöheHc = Wurzel(b ^ 2 - pc ^ 2, "b,pc")
      107. End If
      108. Case drC + drHa * 3
      109. If (Not c1) And ha1 And pa1 Then
      110. Formeln = Formeln & vbCrLf & "pa²+ha²=c²"
      111. SeiteC = Wurzel(pa ^ 2 + ha ^ 2, "pa,ha")
      112. ElseIf c1 And (Not ha1) And pa1 Then
      113. Formeln = Formeln & vbCrLf & "pa²+ha²=c²"
      114. HöheHa = Wurzel(c ^ 2 - pa ^ 2, "c,pa")
      115. End If
      116. Case drC + drHb * 3
      117. If (Not c1) And hb1 And qb1 Then
      118. Formeln = Formeln & vbCrLf & "qb²+hb²=c²"
      119. SeiteC = Wurzel(qb ^ 2 + hb ^ 2, "qb,hb")
      120. ElseIf c1 And (Not hb1) And qb1 Then
      121. Formeln = Formeln & vbCrLf & "qb²+hb²=c²"
      122. HöheHb = Wurzel(c ^ 2 - qb ^ 2, "c,qb")
      123. End If
      124. Case Else: Stop
      125. End Select
      126. End Sub

      Visual Basic-Quellcode

      1. Private Sub FlächeABC()
      2. 'Berechnet fehlende Werte aufgrund der Flächeninhaltsformel mit a, b und c, sofern möglich.
      3. Dim alt As Double, neu As Double, s As Double
      4. Dim davor As Double, danach As Double
      5. If a1 And b1 And c1 And F1 Then
      6. alt = F
      7. s = (a + b + c) / 2
      8. neu = Wurzel(s * (s - a) * (s - b) * (s - c), "a,b,c")
      9. If Abs(neu - alt) > 10 ^ -6 Then Fehlermeldung drUnmöglich, "a,b,c,F"
      10. ElseIf (Not a1) And b1 And c1 And F1 Then
      11. Formeln = Formeln & vbCrLf & "F=Sqr(s*(s-a)*(s-b)*(s-c)) mit s=(a+b+c)/2"
      12. davor = b ^ 2 + c ^ 2
      13. danach = 2 * Wurzel(b ^ 2 * c ^ 2 - 4 * F ^ 2, "b,c,F")
      14. If davor - danach < 0 Or danach = 0 Then SeiteA = Wurzel(davor + danach, "b,c,F") Else Formeln = Formeln & vbCrLf & " a--"
      15. ElseIf a1 And (Not b1) And c1 And F1 Then
      16. Formeln = Formeln & vbCrLf & "F=Sqr(s*(s-a)*(s-b)*(s-c)) mit s=(a+b+c)/2"
      17. davor = a ^ 2 + c ^ 2
      18. danach = 2 * Wurzel(a ^ 2 * c ^ 2 - 4 * F ^ 2, "a,c,F")
      19. If davor - danach < 0 Or danach = 0 Then SeiteB = Wurzel(davor + danach, "a,c,F") Else Formeln = Formeln & vbCrLf & " b--"
      20. ElseIf a1 And b1 And (Not c1) And F1 Then
      21. Formeln = Formeln & vbCrLf & "F=Sqr(s*(s-a)*(s-b)*(s-c)) mit s=(a+b+c)/2"
      22. davor = a ^ 2 + b ^ 2
      23. danach = 2 * Wurzel(a ^ 2 * b ^ 2 - 4 * F ^ 2, "a,b,F")
      24. If davor - danach < 0 Or danach = 0 Then SeiteC = Wurzel(davor + danach, "a,b,F") Else Formeln = Formeln & vbCrLf & " c--"
      25. ElseIf a1 And b1 And c1 And (Not F1) Then
      26. Formeln = Formeln & vbCrLf & "F=Sqr(s*(s-a)*(s-b)*(s-c)) mit s=(a+b+c)/2"
      27. s = (a + b + c) / 2
      28. Flächeninhalt = Wurzel(s * (s - a) * (s - b) * (s - c), "a,b,c")
      29. End If
      30. End Sub
      31. Private Sub Kosinussatz(Winkel As drWinkel)
      32. 'Berechnet fehlende Werte aufgrund des Kosinussatzes, sofern möglich.
      33. Dim davor As Double, danach As Double
      34. Select Case Winkel
      35. Case drAlpha
      36. If (Not a1) And b1 And c1 And alpha1 Then
      37. Formeln = Formeln & vbCrLf & "a²=b²+c²-2bc*cos(alpha)"
      38. SeiteA = Wurzel(b ^ 2 + c ^ 2 - 2 * b * c * Cos(alpha), "b,c,alpha")
      39. ElseIf a1 And (Not b1) And c1 And alpha1 Then
      40. Formeln = Formeln & vbCrLf & "a²=b²+c²-2bc*cos(alpha)"
      41. davor = c * Cos(alpha)
      42. danach = Wurzel(c ^ 2 * (Cos(alpha) ^ 2 - 1) + a ^ 2, "c,alpha,a")
      43. If davor - danach < 0 Or danach = 0 Then SeiteB = davor + danach Else Formeln = Formeln & vbCrLf & " b--"
      44. ElseIf a1 And b1 And (Not c1) And alpha1 Then
      45. Formeln = Formeln & vbCrLf & "a²=b²+c²-2bc*cos(alpha)"
      46. davor = b * Cos(alpha)
      47. danach = Wurzel(b ^ 2 * (Cos(alpha) ^ 2 - 1) + a ^ 2, "b,alpha,a")
      48. If davor - danach < 0 Or danach = 0 Then SeiteC = davor + danach Else Formeln = Formeln & vbCrLf & " c--"
      49. ElseIf a1 And b1 And c1 And (Not alpha1) Then
      50. Formeln = Formeln & vbCrLf & "a²=b²+c²-2bc*cos(alpha)"
      51. WinkelAlpha = ArcCos((-a ^ 2 + b ^ 2 + c ^ 2) / (2 * b * c), "a,b,c")
      52. End If
      53. Case drBeta
      54. If (Not a1) And b1 And c1 And beta1 Then
      55. Formeln = Formeln & vbCrLf & "b²=a²+c²-2ac*cos(beta)"
      56. davor = c * Cos(beta)
      57. danach = Wurzel(c ^ 2 * (Cos(beta) ^ 2 - 1) + b ^ 2, "c,beta,b")
      58. If davor - danach < 0 Or danach = 0 Then SeiteA = davor + danach Else Formeln = Formeln & vbCrLf & " a--"
      59. ElseIf a1 And (Not b1) And c1 And beta1 Then
      60. Formeln = Formeln & vbCrLf & "b²=a²+c²-2ac*cos(beta)"
      61. SeiteB = Wurzel(a ^ 2 + c ^ 2 - 2 * a * c * Cos(beta), "a,c,beta")
      62. ElseIf a1 And b1 And (Not c1) And beta1 Then
      63. Formeln = Formeln & vbCrLf & "b²=a²+c²-2ac*cos(beta)"
      64. davor = a * Cos(beta)
      65. danach = Wurzel(a ^ 2 * (Cos(beta) ^ 2 - 1) + b ^ 2, "a,beta,b")
      66. If davor - danach < 0 Or danach = 0 Then SeiteC = davor + danach Else Formeln = Formeln & vbCrLf & " c--"
      67. ElseIf a1 And b1 And c1 And (Not beta1) Then
      68. Formeln = Formeln & vbCrLf & "b²=a²+c²-2ac*cos(beta)"
      69. WinkelBeta = ArcCos((a ^ 2 - b ^ 2 + c ^ 2) / (2 * a * c), "a,b,c")
      70. End If
      71. Case drGamma
      72. If (Not a1) And b1 And c1 And gamma1 Then
      73. Formeln = Formeln & vbCrLf & "c²=a²+b²-2ab*cos(gamma)"
      74. davor = b * Cos(gamma)
      75. danach = Wurzel(b ^ 2 * (Cos(gamma) ^ 2 - 1) + c ^ 2, "b,gamma,c")
      76. If davor - danach < 0 Or danach = 0 Then SeiteA = davor + danach Else Formeln = Formeln & vbCrLf & " a--"
      77. ElseIf a1 And (Not b1) And c1 And gamma1 Then
      78. Formeln = Formeln & vbCrLf & "c²=a²+b²-2ab*cos(gamma)"
      79. davor = a * Cos(gamma)
      80. danach = Wurzel(a ^ 2 * (Cos(gamma) ^ 2 - 1) + c ^ 2, "a,gamma,c")
      81. If davor - danach < 0 Or danach = 0 Then SeiteB = davor + danach Else Formeln = Formeln & vbCrLf & " b--"
      82. ElseIf a1 And b1 And (Not c1) And gamma1 Then
      83. Formeln = Formeln & vbCrLf & "c²=a²+b²-2ab*cos(gamma)"
      84. SeiteC = Wurzel(a ^ 2 + b ^ 2 - 2 * a * b * Cos(gamma), "a,b,gamma")
      85. ElseIf a1 And b1 And c1 And (Not gamma1) Then
      86. Formeln = Formeln & vbCrLf & "c²=a²+b²-2ab*cos(gamma)"
      87. WinkelGamma = ArcCos((a ^ 2 + b ^ 2 - c ^ 2) / (2 * a * b), "a,b,c")
      88. End If
      89. End Select
      90. End Sub

      Visual Basic-Quellcode

      1. Private Sub Inkreis()
      2. 'Berechnet den Inkreisradius aufgrund von a, b und c.
      3. Dim s As Double, alt As Double, neu As Double
      4. Dim kr As Double, ks As Double, kt As Double, kp As Double, kq As Double, Radikand As Double
      5. If a1 And b1 And c1 And rho1 Then
      6. alt = rho
      7. s = (a + b + c) / 2
      8. neu = Wurzel((s - a) * (s - b) * (s - c) / s, "a,b,c")
      9. If Abs(neu - alt) > 10 ^ -6 Then Fehlermeldung drUnmöglich, "rho,a,b,c"
      10. ElseIf (Not a1) And b1 And c1 And rho1 Then
      11. Formeln = Formeln & vbCrLf & "rho=Sqr((s-a)*(s-b)*(s-c)/s) mit s=(a+b+c)/2"
      12. kr = -(b + c)
      13. ks = 4 * rho ^ 2 - (b - c) ^ 2
      14. kt = (b + c) * (4 * rho ^ 2 + (b - c) ^ 2)
      15. kp = ks - kr ^ 2 / 3
      16. kq = 2 * kr ^ 3 / 27 - ks * kr / 3 + kt
      17. Radikand = (kq / 2) ^ 2 + (kp / 3) ^ 3
      18. If Radikand >= 0 Then SeiteA = Wurzel3(-kq / 2 + Wurzel(Radikand, "b,c")) + Wurzel3(-kq / 2 - Wurzel(Radikand, "b,c")) Else Formeln = Formeln & vbCrLf & " a---"
      19. ElseIf a1 And (Not b1) And c1 And rho1 Then
      20. Formeln = Formeln & vbCrLf & "rho=Sqr((s-a)*(s-b)*(s-c)/s) mit s=(a+b+c)/2"
      21. kr = -(a + c)
      22. ks = 4 * rho ^ 2 - (a - c) ^ 2
      23. kt = (a + c) * (4 * rho ^ 2 + (a - c) ^ 2)
      24. kp = ks - kr ^ 2 / 3
      25. kq = 2 * kr ^ 3 / 27 - ks * kr / 3 + kt
      26. Radikand = (kq / 2) ^ 2 + (kp / 3) ^ 3
      27. If Radikand >= 0 Then SeiteB = Wurzel3(-kq / 2 + Wurzel(Radikand, "a,c")) + Wurzel3(-kq / 2 - Wurzel(Radikand, "a,c")) Else Formeln = Formeln & vbCrLf & " b---"
      28. ElseIf a1 And b1 And (Not c1) And rho1 Then
      29. Formeln = Formeln & vbCrLf & "rho=Sqr((s-a)*(s-b)*(s-c)/s) mit s=(a+b+c)/2"
      30. kr = -(a + b)
      31. ks = 4 * rho ^ 2 - (a - b) ^ 2
      32. kt = (a + b) * (4 * rho ^ 2 + (a - b) ^ 2)
      33. kp = ks - kr ^ 2 / 3
      34. kq = 2 * kr ^ 3 / 27 - ks * kr / 3 + kt
      35. Radikand = (kq / 2) ^ 2 + (kp / 3) ^ 3
      36. If Radikand >= 0 Then SeiteC = Wurzel3(-kq / 2 + Wurzel(Radikand, "a,b")) + Wurzel3(-kq / 2 - Wurzel(Radikand, "a,c")) Else Formeln = Formeln & vbCrLf & " c---"
      37. ElseIf a1 And b1 And c1 And (Not rho1) Then
      38. Formeln = Formeln & vbCrLf & "rho=Sqr((s-a)*(s-b)*(s-c)/s) mit s=(a+b+c)/2"
      39. s = (a + b + c) / 2
      40. Inkreisradius = Wurzel((s - a) * (s - b) * (s - c) / s, "a,b,c")
      41. End If
      42. End Sub



      Die Ein- und Ausgabe der Werte steuere ich über Properties:

      Visual Basic-Quellcode

      1. Public Property Get SeiteA() As Double
      2. If Not a1 Then Fehlermeldung drKeinWert, "SeiteA"
      3. SeiteA = a
      4. End Property
      5. Public Property Let SeiteA(Wert As Double)
      6. Formeln = Formeln & vbCrLf & " a=" & Wert
      7. If a1 Then Fehlermeldung drBereitsBestimmt, "SeiteA", a
      8. If Wert <= 0 Then Fehlermeldung drZahlenbereich, "SeiteA", Wert
      9. a = Wert
      10. a1 = True
      11. Umfangformel
      12. Teilstrecken drA
      13. Fläche drA
      14. Umkreis drHb
      15. Umkreis drHc
      16. SinFormel drA, drHb
      17. SinFormel drA, drHc
      18. CosFormel drA, drBeta
      19. CosFormel drA, drGamma
      20. Pythagoras drA, drHb
      21. Pythagoras drA, drHc
      22. FlächeABC
      23. Kosinussatz drAlpha
      24. Kosinussatz drBeta
      25. Kosinussatz drGamma
      26. Inkreis
      27. End Property
      28. Public Property Get SeiteB() As Double
      29. If Not b1 Then Fehlermeldung drKeinWert, "SeiteB"
      30. SeiteB = b
      31. End Property
      32. Public Property Let SeiteB(Wert As Double)
      33. Formeln = Formeln & vbCrLf & " b=" & Wert
      34. If b1 Then Fehlermeldung drBereitsBestimmt, "SeiteB", b
      35. If Wert <= 0 Then Fehlermeldung drZahlenbereich, "SeiteB", Wert
      36. b = Wert
      37. b1 = True
      38. Umfangformel
      39. Teilstrecken drB
      40. Fläche drB
      41. Umkreis drHa
      42. Umkreis drHc
      43. SinFormel drB, drHa
      44. SinFormel drB, drHc
      45. CosFormel drB, drAlpha
      46. CosFormel drB, drGamma
      47. Pythagoras drB, drHa
      48. Pythagoras drB, drHc
      49. FlächeABC
      50. Kosinussatz drAlpha
      51. Kosinussatz drBeta
      52. Kosinussatz drGamma
      53. Inkreis
      54. End Property
      55. Public Property Get SeiteC() As Double
      56. If Not c1 Then Fehlermeldung drKeinWert, "SeiteC"
      57. SeiteC = c
      58. End Property
      59. Public Property Let SeiteC(Wert As Double)
      60. Formeln = Formeln & vbCrLf & " c=" & Wert
      61. If c1 Then Fehlermeldung drBereitsBestimmt, "SeiteC", c
      62. If Wert <= 0 Then Fehlermeldung drZahlenbereich, "SeiteC", Wert
      63. c = Wert
      64. c1 = True
      65. Umfangformel
      66. Teilstrecken drC
      67. Fläche drC
      68. Umkreis drHa
      69. Umkreis drHb
      70. SinFormel drC, drHa
      71. SinFormel drC, drHb
      72. CosFormel drC, drAlpha
      73. CosFormel drC, drBeta
      74. Pythagoras drC, drHa
      75. Pythagoras drC, drHb
      76. FlächeABC
      77. Kosinussatz drAlpha
      78. Kosinussatz drBeta
      79. Kosinussatz drGamma
      80. Inkreis
      81. End Property
      Bei den Winkeln bedeutet die Variante mit ° Angabe im Gradmaß, bei der Variante ohne ° Angabe im Bogenmaß

      Visual Basic-Quellcode

      1. Public Property Get WinkelAlpha() As Double
      2. If Not alpha1 Then Fehlermeldung drKeinWert, "WinkelAlpha"
      3. WinkelAlpha = alpha
      4. End Property
      5. Public Property Let WinkelAlpha(Wert As Double)
      6. Formeln = Formeln & vbCrLf & " alpha=" & Wert / pi * 180 & "°"
      7. If alpha1 Then Fehlermeldung drBereitsBestimmt, "WinkelAlpha", alpha
      8. If Wert <= 0 Or Wert >= pi Then Fehlermeldung drWinkelbereich, "WinkelAlpha", Wert
      9. alpha = Wert
      10. alpha1 = True
      11. Winkelsumme
      12. SinFormel drB, drHc
      13. SinFormel drC, drHb
      14. CosFormel drB, drAlpha
      15. CosFormel drC, drAlpha
      16. Kosinussatz drAlpha
      17. End Property
      18. Public Property Get WinkelAlpha°() As Double
      19. WinkelAlpha° = WinkelAlpha / pi * 180
      20. End Property
      21. Public Property Let WinkelAlpha°(Wert As Double)
      22. WinkelAlpha = Wert / 180 * pi
      23. End Property
      24. Public Property Get WinkelBeta() As Double
      25. If Not beta1 Then Fehlermeldung drKeinWert, "WinkelBeta"
      26. WinkelBeta = beta
      27. End Property
      28. Public Property Let WinkelBeta(Wert As Double)
      29. Formeln = Formeln & vbCrLf & " beta=" & Wert / pi * 180 & "°"
      30. If beta1 Then Fehlermeldung drBereitsBestimmt, "WinkelBeta", beta
      31. If Wert <= 0 Or Wert >= pi Then Fehlermeldung drWinkelbereich, "WinkelBeta", Wert
      32. beta = Wert
      33. beta1 = True
      34. Winkelsumme
      35. SinFormel drA, drHc
      36. SinFormel drC, drHa
      37. CosFormel drA, drBeta
      38. CosFormel drC, drBeta
      39. Kosinussatz drBeta
      40. End Property
      41. Public Property Get WinkelBeta°() As Double
      42. WinkelBeta° = WinkelBeta / pi * 180
      43. End Property
      44. Public Property Let WinkelBeta°(Wert As Double)
      45. WinkelBeta = Wert / 180 * pi
      46. End Property
      47. Public Property Get WinkelGamma() As Double
      48. If Not gamma1 Then Fehlermeldung drKeinWert, "WinkelGamma"
      49. WinkelGamma = gamma
      50. End Property
      51. Public Property Let WinkelGamma(Wert As Double)
      52. Formeln = Formeln & vbCrLf & " gamma=" & Wert / pi * 180 & "°"
      53. If gamma1 Then Fehlermeldung drBereitsBestimmt, "WinkelGamma", gamma
      54. If Wert <= 0 Or Wert >= pi Then Fehlermeldung drWinkelbereich, "WinkelGamma", Wert
      55. gamma = Wert
      56. gamma1 = True
      57. Winkelsumme
      58. SinFormel drA, drHb
      59. SinFormel drB, drHa
      60. CosFormel drA, drGamma
      61. CosFormel drB, drGamma
      62. Kosinussatz drGamma
      63. End Property
      64. Public Property Get WinkelGamma°() As Double
      65. WinkelGamma° = WinkelGamma / pi * 180
      66. End Property
      67. Public Property Let WinkelGamma°(Wert As Double)
      68. WinkelGamma = Wert / 180 * pi
      69. End Property

      Visual Basic-Quellcode

      1. Public Property Get HöheHa() As Double
      2. If Not ha1 Then Fehlermeldung drKeinWert, "HöheHa"
      3. HöheHa = ha
      4. End Property
      5. Public Property Let HöheHa(Wert As Double)
      6. Formeln = Formeln & vbCrLf & " ha=" & Wert
      7. If ha1 Then Fehlermeldung drBereitsBestimmt, "HöheHa", ha
      8. If Wert <= 0 Then Fehlermeldung drZahlenbereich, "HöheHa", Wert
      9. ha = Wert
      10. ha1 = True
      11. Fläche drA
      12. Umkreis drHa
      13. SinFormel drB, drHa
      14. SinFormel drC, drHa
      15. Pythagoras drB, drHa
      16. Pythagoras drC, drHa
      17. End Property
      18. Public Property Get HöheHb() As Double
      19. If Not hb1 Then Fehlermeldung drKeinWert, "HöheHb"
      20. HöheHb = hb
      21. End Property
      22. Public Property Let HöheHb(Wert As Double)
      23. Formeln = Formeln & vbCrLf & " hb=" & Wert
      24. If hb1 Then Fehlermeldung drBereitsBestimmt, "HöheHb", hb
      25. If Wert <= 0 Then Fehlermeldung drZahlenbereich, "HöheHb", Wert
      26. hb = Wert
      27. hb1 = True
      28. Fläche drB
      29. Umkreis drHb
      30. SinFormel drA, drHb
      31. SinFormel drC, drHb
      32. Pythagoras drA, drHb
      33. Pythagoras drC, drHb
      34. End Property
      35. Public Property Get HöheHc() As Double
      36. If Not hc1 Then Fehlermeldung drKeinWert, "HöheHc"
      37. HöheHc = hc
      38. End Property
      39. Public Property Let HöheHc(Wert As Double)
      40. Formeln = Formeln & vbCrLf & " hc=" & Wert
      41. If hc1 Then Fehlermeldung drBereitsBestimmt, "HöheHc", hc
      42. If Wert <= 0 Then Fehlermeldung drZahlenbereich, "HöheHc", Wert
      43. hc = Wert
      44. hc1 = True
      45. Fläche drC
      46. Umkreis drHc
      47. SinFormel drA, drHc
      48. SinFormel drB, drHc
      49. Pythagoras drA, drHc
      50. Pythagoras drB, drHc
      51. End Property

      Visual Basic-Quellcode

      1. Public Property Get Umfang() As Double
      2. If Not U1 Then Fehlermeldung drKeinWert, "Umfang"
      3. Umfang = U
      4. End Property
      5. Public Property Let Umfang(Wert As Double)
      6. Formeln = Formeln & vbCrLf & " U=" & Wert
      7. If U1 Then Fehlermeldung drBereitsBestimmt, "Umfang", U
      8. If Wert <= 0 Then Fehlermeldung drZahlenbereich, "Umfang", Wert
      9. U = Wert
      10. U1 = True
      11. Umfangformel
      12. End Property
      13. Public Property Get Flächeninhalt() As Double
      14. If Not F1 Then Fehlermeldung drKeinWert, "Flächeninhalt"
      15. Flächeninhalt = F
      16. End Property
      17. Public Property Let Flächeninhalt(Wert As Double)
      18. Formeln = Formeln & vbCrLf & " F=" & Wert
      19. If F1 Then Fehlermeldung drBereitsBestimmt, "Flächeninhalt", F
      20. If Wert <= 0 Then Fehlermeldung drZahlenbereich, "Flächeninhalt", Wert
      21. F = Wert
      22. F1 = True
      23. Fläche drA
      24. Fläche drB
      25. Fläche drC
      26. FlächeABC
      27. End Property
      28. Public Property Get Inkreisradius() As Double
      29. If Not rho1 Then Fehlermeldung drKeinWert, "Inkreisradius"
      30. Inkreisradius = rho
      31. End Property
      32. Public Property Let Inkreisradius(Wert As Double)
      33. Formeln = Formeln & vbCrLf & " rho=" & Wert
      34. If rho1 Then Fehlermeldung drBereitsBestimmt, "Inkreisradius", rho
      35. If Wert <= 0 Then Fehlermeldung drZahlenbereich, "Inkreisradius", Wert
      36. rho = Wert
      37. rho1 = True
      38. Inkreis
      39. End Property
      40. Public Property Get Umkreisradius() As Double
      41. If Not r1 Then Fehlermeldung drKeinWert, "Umkreisradius"
      42. Umkreisradius = r
      43. End Property
      44. Public Property Let Umkreisradius(Wert As Double)
      45. Formeln = Formeln & vbCrLf & " r=" & Wert
      46. If r1 Then Fehlermeldung drBereitsBestimmt, "Umkreisradius", r
      47. If Wert <= 0 Then Fehlermeldung drZahlenbereich, "Umkreisradius", Wert
      48. r = Wert
      49. r1 = True
      50. Umkreis drHa
      51. Umkreis drHb
      52. Umkreis drHc
      53. End Property

      Visual Basic-Quellcode

      1. Public Property Get StreckePa() As Double
      2. If Not pa1 Then Fehlermeldung drKeinWert, "StreckePa"
      3. StreckePa = pa
      4. End Property
      5. Public Property Let StreckePa(Wert As Double)
      6. Formeln = Formeln & vbCrLf & " pa=" & Wert
      7. If pa1 Then Fehlermeldung drBereitsBestimmt, "StreckePa", pa
      8. pa = Wert
      9. pa1 = True
      10. Teilstrecken drA
      11. CosFormel drC, drBeta
      12. Pythagoras drC, drHa
      13. End Property
      14. Public Property Get StreckePb() As Double
      15. If Not pb1 Then Fehlermeldung drKeinWert, "StreckePb"
      16. StreckePb = pb
      17. End Property
      18. Public Property Let StreckePb(Wert As Double)
      19. Formeln = Formeln & vbCrLf & " pb=" & Wert
      20. If pb1 Then Fehlermeldung drBereitsBestimmt, "StreckePb", pb
      21. pb = Wert
      22. pb1 = True
      23. Teilstrecken drB
      24. CosFormel drA, drGamma
      25. Pythagoras drA, drHb
      26. End Property
      27. Public Property Get StreckePc() As Double
      28. If Not pc1 Then Fehlermeldung drKeinWert, "StreckePc"
      29. StreckePc = pc
      30. End Property
      31. Public Property Let StreckePc(Wert As Double)
      32. Formeln = Formeln & vbCrLf & " pc=" & Wert
      33. If pc1 Then Fehlermeldung drBereitsBestimmt, "StreckePc", pc
      34. pc = Wert
      35. pc1 = True
      36. Teilstrecken drC
      37. CosFormel drB, drAlpha
      38. Pythagoras drB, drHc
      39. End Property
      40. Public Property Get StreckeQa() As Double
      41. If Not qa1 Then Fehlermeldung drKeinWert, "StreckeQa"
      42. StreckeQa = qa
      43. End Property
      44. Public Property Let StreckeQa(Wert As Double)
      45. Formeln = Formeln & vbCrLf & " qa=" & Wert
      46. If qa1 Then Fehlermeldung drBereitsBestimmt, "StreckeQa", qa
      47. qa = Wert
      48. qa1 = True
      49. Teilstrecken drA
      50. CosFormel drB, drGamma
      51. Pythagoras drB, drHa
      52. End Property
      53. Public Property Get StreckeQb() As Double
      54. If Not qb1 Then Fehlermeldung drKeinWert, "StreckeQb"
      55. StreckeQb = qb
      56. End Property
      57. Public Property Let StreckeQb(Wert As Double)
      58. Formeln = Formeln & vbCrLf & " qb=" & Wert
      59. If qb1 Then Fehlermeldung drBereitsBestimmt, "StreckeQb", qb
      60. qb = Wert
      61. qb1 = True
      62. Teilstrecken drB
      63. CosFormel drC, drAlpha
      64. Pythagoras drC, drHb
      65. End Property
      66. Public Property Get StreckeQc() As Double
      67. If Not qc1 Then Fehlermeldung drKeinWert, "StreckeQc"
      68. StreckeQc = qc
      69. End Property
      70. Public Property Let StreckeQc(Wert As Double)
      71. Formeln = Formeln & vbCrLf & " qc=" & Wert
      72. If qc1 Then Fehlermeldung drBereitsBestimmt, "StreckeQc", qc
      73. qc = Wert
      74. qc1 = True
      75. Teilstrecken drC
      76. CosFormel drA, drBeta
      77. Pythagoras drA, drHc
      78. End Property
      Hier sind noch Funktionen und Prozeduren zur Auswertung der Werte.

      Visual Basic-Quellcode

      1. Public Function alleWerte() As Boolean
      2. 'gibt zurück, ob alle Werte bestimmt sind.
      3. alleWerte = (a1 And b1 And c1 And alpha1 And beta1 And gamma1 And ha1 And hb1 And hc1 And U1 And F1 And rho1 And r1 And pa1 And pb1 And pc1 And qa1 And qb1 And qc1)
      4. End Function
      5. Public Function AnzahlWerte() As Integer
      6. 'gibt zurück, wieviele Werte bestimmt sind.
      7. AnzahlWerte = -a1 - b1 - c1 - alpha1 - beta1 - gamma1 - ha1 - hb1 - hc1 - U1 - F1 - rho1 - r1 - pa1 - pb1 - pc1 - qa1 - qb1 - qc1
      8. End Function



      Visual Basic-Quellcode

      1. Public Function Werteliste(Optional Nachkommastellen As Integer = -1) As String
      2. 'gibt einen String zurück, in dem alle Werte aufgelistet sind.
      3. 'Ist "Nachkommastellen" = -1, wird das Standard-Zahlenformat verwendet.
      4. Dim zFormat As String, Quadrateinheit As String, n As Integer
      5. Select Case Sgn(Nachkommastellen)
      6. Case -1: zFormat = ""
      7. Case 0: zFormat = "#,##0"
      8. Case 1: zFormat = "#,##0." & String(Nachkommastellen, "0")
      9. End Select
      10. If Längeneinheit = "" Then Quadrateinheit = "" Else Quadrateinheit = Längeneinheit & "²"
      11. n = AnzahlWerte
      12. Werteliste = n & IIf(alleWerte, " (alle)", "") & IIf((n = 1), " Wert ist bestimmt:", " Werte sind bestimmt:") & vbCrLf
      13. Werteliste = Werteliste & vbCrLf & "a" & vbTab & IIf(a1, Format(a, zFormat) & " " & Längeneinheit, "n/a")
      14. Werteliste = Werteliste & vbCrLf & "b" & vbTab & IIf(b1, Format(b, zFormat) & " " & Längeneinheit, "n/a")
      15. Werteliste = Werteliste & vbCrLf & "c" & vbTab & IIf(c1, Format(c, zFormat) & " " & Längeneinheit, "n/a") & vbCrLf
      16. Werteliste = Werteliste & vbCrLf & "alpha" & vbTab & IIf(alpha1, Format(alpha / pi * 180, zFormat) & "°", "n/a")
      17. Werteliste = Werteliste & vbCrLf & "beta" & vbTab & IIf(beta1, Format(beta / pi * 180, zFormat) & "°", "n/a")
      18. Werteliste = Werteliste & vbCrLf & "gamma" & vbTab & IIf(gamma1, Format(gamma / pi * 180, zFormat) & "°", "n/a") & vbCrLf
      19. Werteliste = Werteliste & vbCrLf & "ha" & vbTab & IIf(ha1, Format(ha, zFormat) & " " & Längeneinheit, "n/a")
      20. Werteliste = Werteliste & vbCrLf & "hb" & vbTab & IIf(hb1, Format(hb, zFormat) & " " & Längeneinheit, "n/a")
      21. Werteliste = Werteliste & vbCrLf & "hc" & vbTab & IIf(hc1, Format(hc, zFormat) & " " & Längeneinheit, "n/a") & vbCrLf
      22. Werteliste = Werteliste & vbCrLf & "U" & vbTab & IIf(U1, Format(U, zFormat) & " " & Längeneinheit, "n/a")
      23. Werteliste = Werteliste & vbCrLf & "F" & vbTab & IIf(F1, Format(F, zFormat) & " " & Quadrateinheit, "n/a") & vbCrLf
      24. Werteliste = Werteliste & vbCrLf & "rho" & vbTab & IIf(rho1, Format(rho, zFormat) & " " & Längeneinheit, "n/a")
      25. Werteliste = Werteliste & vbCrLf & "r" & vbTab & IIf(r1, Format(r, zFormat) & " " & Längeneinheit, "n/a") & vbCrLf
      26. Werteliste = Werteliste & vbCrLf & "pa" & vbTab & IIf(pa1, Format(pa, zFormat) & " " & Längeneinheit, "n/a")
      27. Werteliste = Werteliste & vbCrLf & "qa" & vbTab & IIf(qa1, Format(qa, zFormat) & " " & Längeneinheit, "n/a") & vbCrLf
      28. Werteliste = Werteliste & vbCrLf & "pb" & vbTab & IIf(pb1, Format(pb, zFormat) & " " & Längeneinheit, "n/a")
      29. Werteliste = Werteliste & vbCrLf & "qb" & vbTab & IIf(qb1, Format(qb, zFormat) & " " & Längeneinheit, "n/a") & vbCrLf
      30. Werteliste = Werteliste & vbCrLf & "pc" & vbTab & IIf(pc1, Format(pc, zFormat) & " " & Längeneinheit, "n/a")
      31. Werteliste = Werteliste & vbCrLf & "qc" & vbTab & IIf(qc1, Format(qc, zFormat) & " " & Längeneinheit, "n/a")
      32. End Function
      33. Public Function WertelisteKurz(Optional Werte As String = "a,b,c,alpha,beta,gamma,ha,hb,hc,F,U,rho,r,pa,pb,pc,qa,qb,qc") As String
      34. 'gibt einen String zurück, in dem nur die Werte aufgelistet sind, die bestimmt sind, durch Semikolon (;) getrennt.
      35. Dim Liste As String
      36. Liste = "," & Werte & ","
      37. If a1 And InStr(1, Liste, ",a,") > 0 Then WertelisteKurz = WertelisteKurz & "; a=" & a
      38. If b1 And InStr(1, Liste, ",b,") > 0 Then WertelisteKurz = WertelisteKurz & "; b=" & b
      39. If c1 And InStr(1, Liste, ",c,") > 0 Then WertelisteKurz = WertelisteKurz & "; c=" & c
      40. If alpha1 And InStr(1, Liste, ",alpha,") > 0 Then WertelisteKurz = WertelisteKurz & "; alpha=" & alpha / pi * 180 & "°"
      41. If beta1 And InStr(1, Liste, ",beta,") > 0 Then WertelisteKurz = WertelisteKurz & "; beta=" & beta / pi * 180 & "°"
      42. If gamma1 And InStr(1, Liste, ",gamma,") > 0 Then WertelisteKurz = WertelisteKurz & "; gamma=" & gamma / pi * 180 & "°"
      43. If ha1 And InStr(1, Liste, ",ha,") > 0 Then WertelisteKurz = WertelisteKurz & "; ha=" & ha
      44. If hb1 And InStr(1, Liste, ",hb,") > 0 Then WertelisteKurz = WertelisteKurz & "; hb=" & hb
      45. If hc1 And InStr(1, Liste, ",hc,") > 0 Then WertelisteKurz = WertelisteKurz & "; hc=" & hc
      46. If U1 And InStr(1, Liste, ",U,") > 0 Then WertelisteKurz = WertelisteKurz & "; U=" & U
      47. If F1 And InStr(1, Liste, ",F,") > 0 Then WertelisteKurz = WertelisteKurz & "; F=" & F
      48. If rho1 And InStr(1, Liste, ",rho,") > 0 Then WertelisteKurz = WertelisteKurz & "; rho=" & rho
      49. If r1 And InStr(1, Liste, ",r,") > 0 Then WertelisteKurz = WertelisteKurz & "; r=" & r
      50. If pa1 And InStr(1, Liste, ",pa,") > 0 Then WertelisteKurz = WertelisteKurz & "; pa=" & pa
      51. If qa1 And InStr(1, Liste, ",qa,") > 0 Then WertelisteKurz = WertelisteKurz & "; qa=" & qa
      52. If pb1 And InStr(1, Liste, ",pb,") > 0 Then WertelisteKurz = WertelisteKurz & "; pb=" & pb
      53. If qb1 And InStr(1, Liste, ",qb,") > 0 Then WertelisteKurz = WertelisteKurz & "; qb=" & qb
      54. If pc1 And InStr(1, Liste, ",pc,") > 0 Then WertelisteKurz = WertelisteKurz & "; pc=" & pc
      55. If qc1 And InStr(1, Liste, ",qc,") > 0 Then WertelisteKurz = WertelisteKurz & "; qc=" & qc
      56. If WertelisteKurz <> "" Then WertelisteKurz = Mid(WertelisteKurz, 3)
      57. End Function
      58. Public Function Rechenweg() As String
      59. 'liefert einen String, der die Formeln und Wertzuweisungen, die angewendet wurden, auflistet.
      60. If Formeln = "" Then
      61. Rechenweg = "keine Rechenschritte"
      62. Else
      63. Rechenweg = "Rechenschritte:" & vbCrLf & Replace(Replace(Formeln, "---", "=? (3 Lösungen)"), "--", "=? (2 Lösungen)")
      64. End If
      65. End Function
      Zum Schluss noch die Plausi-Prüfung:

      Quellcode

      1. Public Sub PlausiPrüfung()
      2. 'prüft, ob alle Formeln stimmen, wenn alle Werte bestimmt sind.
      3. Dim Plausi As String, Diff As Double, gesDiff As Double, s As Double, Meldung As VbMsgBoxStyle
      4. If alleWerte Then
      5. Plausi = "Plausibilitäts-Prüfung:" & vbCrLf & vbCrLf & "(Differenz = rechte Seite - linke Seite)" & vbCrLf
      6. gesDiff = 0
      7. s = (a + b + c) / 2
      8. Diff = a + b + c - U
      9. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "U=a+b+c"
      10. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      11. gesDiff = gesDiff + Abs(Diff)
      12. Diff = pa + qa - a
      13. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "a=pa+qa"
      14. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      15. gesDiff = gesDiff + Abs(Diff)
      16. Diff = pb + qb - b
      17. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "b=pb+qb"
      18. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      19. gesDiff = gesDiff + Abs(Diff)
      20. Diff = pc + qc - c
      21. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "c=pc+qc"
      22. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      23. gesDiff = gesDiff + Abs(Diff)
      24. Diff = (pi - alpha - beta - gamma) / pi * 180
      25. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "alpha+beta+gamma=180°"
      26. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff & "°"
      27. gesDiff = gesDiff + Abs(Diff)
      28. Diff = a * ha / 2 - F
      29. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "F=a*ha/2"
      30. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      31. gesDiff = gesDiff + Abs(Diff)
      32. Diff = b * hb / 2 - F
      33. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "F=b*hb/2"
      34. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      35. gesDiff = gesDiff + Abs(Diff)
      36. Diff = c * hc / 2 - F
      37. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "F=c*hc/2"
      38. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      39. gesDiff = gesDiff + Abs(Diff)
      40. Diff = b * c / (2 * ha) - r
      41. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "r=bc/2ha"
      42. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      43. gesDiff = gesDiff + Abs(Diff)
      44. Diff = a * c / (2 * hb) - r
      45. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "r=ac/2hb"
      46. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      47. gesDiff = gesDiff + Abs(Diff)
      48. Diff = a * b / (2 * hc) - r
      49. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "r=ab/2hc"
      50. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      51. gesDiff = gesDiff + Abs(Diff)
      52. Diff = a * Sin(gamma) - hb
      53. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "hb=a*sin(gamma)"
      54. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      55. gesDiff = gesDiff + Abs(Diff)
      56. Diff = a * Sin(beta) - hc
      57. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "hc=a*sin(beta)"
      58. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      59. gesDiff = gesDiff + Abs(Diff)
      60. Diff = b * Sin(gamma) - ha
      61. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "ha=b*sin(gamma)"
      62. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      63. gesDiff = gesDiff + Abs(Diff)
      64. Diff = b * Sin(alpha) - hc
      65. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "hc=b*sin(alpha)"
      66. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      67. gesDiff = gesDiff + Abs(Diff)
      68. Diff = c * Sin(beta) - ha
      69. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "ha=c*sin(beta)"
      70. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      71. gesDiff = gesDiff + Abs(Diff)
      72. Diff = c * Sin(alpha) - hb
      73. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "hb=c*sin(alpha)"
      74. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      75. gesDiff = gesDiff + Abs(Diff)
      76. Diff = a * Cos(beta) - qc
      77. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "qc=a*cos(beta)"
      78. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      79. gesDiff = gesDiff + Abs(Diff)
      80. Diff = a * Cos(gamma) - pb
      81. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "pb=a*cos(gamma)"
      82. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      83. gesDiff = gesDiff + Abs(Diff)
      84. Diff = b * Cos(alpha) - pc
      85. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "pc=b*cos(alpha)"
      86. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      87. gesDiff = gesDiff + Abs(Diff)
      88. Diff = b * Cos(gamma) - qa
      89. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "qa=b*cos(gamma)"
      90. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      91. gesDiff = gesDiff + Abs(Diff)
      92. Diff = c * Cos(alpha) - qb
      93. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "qb=c*cos(alpha)"
      94. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      95. gesDiff = gesDiff + Abs(Diff)
      96. Diff = c * Cos(beta) - pa
      97. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "pa=c*cos(beta)"
      98. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      99. gesDiff = gesDiff + Abs(Diff)
      100. Diff = a ^ 2 - pb ^ 2 - hb ^ 2
      101. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "pb²+hb²=a²"
      102. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      103. gesDiff = gesDiff + Abs(Diff)
      104. Diff = a ^ 2 - qc ^ 2 - hc ^ 2
      105. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "qc²+hc²=a²"
      106. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      107. gesDiff = gesDiff + Abs(Diff)
      108. Diff = b ^ 2 - qa ^ 2 - ha ^ 2
      109. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "qa²+ha²=b²"
      110. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      111. gesDiff = gesDiff + Abs(Diff)
      112. Diff = b ^ 2 - pc ^ 2 - hc ^ 2
      113. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "pc²+hc²=b²"
      114. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      115. gesDiff = gesDiff + Abs(Diff)
      116. Diff = c ^ 2 - pa ^ 2 - ha ^ 2
      117. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "pa²+ha²=c²"
      118. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      119. gesDiff = gesDiff + Abs(Diff)
      120. Diff = c ^ 2 - qb ^ 2 - hb ^ 2
      121. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "qb²+hb²=c²"
      122. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      123. gesDiff = gesDiff + Abs(Diff)
      124. Diff = Sqr(s * (s - a) * (s - b) * (s - c)) - F
      125. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "F=Sqr(s*(s-a)*(s-b)*(s-c)) mit s=(a+b+c)/2"
      126. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      127. gesDiff = gesDiff + Abs(Diff)
      128. Diff = b ^ 2 + c ^ 2 - 2 * b * c * Cos(alpha) - a ^ 2
      129. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "a²=b²+c²-2bc*cos(alpha)"
      130. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      131. gesDiff = gesDiff + Abs(Diff)
      132. Diff = a ^ 2 + c ^ 2 - 2 * a * c * Cos(beta) - b ^ 2
      133. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "b²=a²+c²-2ac*cos(beta)"
      134. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      135. gesDiff = gesDiff + Abs(Diff)
      136. Diff = a ^ 2 + b ^ 2 - 2 * a * b * Cos(gamma) - c ^ 2
      137. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "c²=a²+b²-2ab*cos(gamma)"
      138. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      139. gesDiff = gesDiff + Abs(Diff)
      140. Diff = Sqr((s - a) * (s - b) * (s - c) / s) - rho
      141. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbCrLf & "rho=Sqr((s-a)*(s-b)*(s-c)/s) mit s=(a+b+c)/2"
      142. If Abs(Diff) > 10 ^ -12 Then Plausi = Plausi & vbTab & " Diff.: " & Diff
      143. gesDiff = gesDiff + Abs(Diff)
      144. If Right(Plausi, 2) = vbCrLf Then Plausi = Plausi & vbCrLf & "keine nennenswerten Differenzen"
      145. If gesDiff < 10 ^ -6 Then
      146. Meldung = vbInformation
      147. ElseIf gesDiff < 1 Then
      148. Meldung = vbExclamation
      149. Else
      150. Meldung = vbCritical
      151. End If
      152. MsgBox Plausi, Meldung, "Dreieck"
      153. End If
      154. End Sub