Bewertung Projekt Berechnung elektrischer Widerstand

  • VB.NET
  • .NET (FX) 4.0

Es gibt 104 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Schade. Bist weder auf Post#40 eingegangen, noch konntest Du meinen Klassenvorschlag, über den Du grübeln wolltest, umsetzen.
    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.
    Du schriebst

    Amelie schrieb:

    Ich grübel noch daran.
    Ich dachte, dass da noch Nachfragen kommen. Aber ein Ergebnis hattest Du bisher diesbezüglich noch nicht.
    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.
    Ich hatte eiche Klasse gemacht dann Variablen usw
    bin aber dann dazu gekommen was ich dann in dem zip habe.

    Irgendiwe kam ich immer drauf das ich das einmal als Integer und einmal als String deklarieren muss. hmmm
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    @VaporiZed
    Ich versuche nun die beiden Einzelprogramme zu einem zusammen zufügen.
    Habe dann nochmal mit der Klasse versucht. Das heikle ist, das sich die Anzahl der Farbringe immer unterschiedlich ändern. Bei den Toleranzen sind die nochmals anders. Zumindest klappt es so die 2 Comboboxen unterschiedlich zu befüllen.
    Hier mein Anfang nur mal für den Multiplikator.
    Spoiler anzeigen

    Das Form

    VB.NET-Quellcode

    1. Public Class Frm_Widerstand
    2. Dim Resistor As New Resistor
    3. Dim Exponent As New Exponenten
    4. Private Sub Frm_Widerstand_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    5. Anzeigen()
    6. FuelleCmb_Multiplikator()
    7. End Sub
    8. Private Sub FuelleCmb_Multiplikator()
    9. If Resistor.AktuelleRingzahl = Ringanzahl.Vier_Ringe Then
    10. Cbx1_Multiplikator.DataSource = Exponent.Vier_RingeMultiplikator
    11. Cbx2_Multiplikator.DataSource = Exponent.Ringfarben
    12. Else
    13. Cbx1_Multiplikator.DataSource = Exponent.Fünf_RingeMultiplikator
    14. Dim ListMultiplikator = {Color.Violet, Color.Gray, Color.White}
    15. Cbx2_Multiplikator.DataSource = Exponent.Ringfarben.Except(ListMultiplikator).ToList
    16. End If
    17. End Sub
    18. Private Sub AnzahlRinge_aendern()
    19. Dim AuswahlAnzahlRinge = Resistor.AktuelleRingzahl <> Ringanzahl.Vier_Ringe
    20. Chb_vierringe.Text = "Berechnung mit " & Resistor.AktuelleRingzahl.ToString & "n"
    21. FuelleCmb_Multiplikator()
    22. End Sub
    23. Private Sub Chb_vierringe_CheckedChanged(sender As Object, e As EventArgs) Handles Chb_vierringe.CheckedChanged
    24. Resistor.AnzahlRinge_wechseln()
    25. AnzahlRinge_aendern()
    26. End Sub
    27. Private Sub Cbx1_Multiplikator_SelectedValueChanged(sender As Object, e As EventArgs) Handles Cbx1_Multiplikator.SelectedValueChanged
    28. Exponent.Multiplikator = (CInt(Cbx1_Multiplikator.SelectedIndex))
    29. Exponent.Expo_umwandeln()
    30. Cbx2_Multiplikator.SelectedIndex = Cbx1_Multiplikator.SelectedIndex
    31. Anzeigen()
    32. End Sub
    33. Private Sub Cbx2_Multiplikator_SelectedValueChanged(sender As Object, e As EventArgs) Handles Cbx2_Multiplikator.SelectedValueChanged
    34. Exponent.Multiplikator = (CInt(Cbx2_Multiplikator.SelectedIndex))
    35. Exponent.Expo_umwandeln()
    36. Cbx1_Multiplikator.SelectedIndex = Cbx2_Multiplikator.SelectedIndex
    37. End Sub
    38. Private Sub Anzeigen()
    39. Lbl_Multiplikator.Text = "Multiplikator: " & Exponent.Multiplikator.ToString("#,##0.###")
    40. End Sub
    41. End Class

    Klasse Resistor

    VB.NET-Quellcode

    1. Public Class Resistor
    2. Friend Toleranzbegin, Toleranzende As Double
    3. Friend Widerstand As Double
    4. Friend Hunderter, Zehner, Einer As Integer
    5. Friend Maßeinheit As String
    6. Friend Berechnung As Boolean = False
    7. Friend AktuelleRingzahl As Ringanzahl = Ringanzahl.Vier_Ringe
    8. Friend Sub AnzahlRinge_wechseln()
    9. If AktuelleRingzahl = Ringanzahl.Vier_Ringe Then AktuelleRingzahl = Ringanzahl.Fünf_Ringe Else AktuelleRingzahl = Ringanzahl.Vier_Ringe
    10. End Sub
    11. End Class
    12. #Region "Enums"
    13. Friend Enum Ringanzahl
    14. Vier_Ringe
    15. Fünf_Ringe
    16. End Enum
    17. Friend Enum Toleranzring
    18. Mit_Ring
    19. Ohne_Ring
    20. End Enum
    21. #End Region

    Klasse Exponent

    VB.NET-Quellcode

    1. Public Class Exponenten
    2. ReadOnly Resistor As New Resistor
    3. Friend Property Multiplikator As Double
    4. Friend ReadOnly Vier_RingeMultiplikator() As String = {"1", "10 ^ 1", "10 ^ 2", "10 ^ 3", "10 ^ 4", "10 ^ 5", "10 ^ 6", "10 ^ 7", "10 ^ 8", "10 ^ 9", "10 ^ -1", "10 ^ -2"}
    5. Friend ReadOnly Fünf_RingeMultiplikator() As String = {"1", "10 ^ 1", "10 ^ 2", "10 ^ 3", "10 ^ 4", "10 ^ 5", "10 ^ 6", "10 ^ -1", "10 ^ -2"}
    6. Friend ReadOnly Ringfarben() As Color = {Color.Black, Color.Brown, Color.Red, Color.Orange, Color.Yellow, Color.Green, Color.Blue, Color.Violet, Color.Gray, Color.White, Color.Gold, Color.Silver}
    7. Friend Sub Expo_umwandeln()
    8. If Resistor.AktuelleRingzahl = Ringanzahl.Vier_Ringe Then
    9. Dim Exponenten() As Double = {1, 10 ^ 1, 10 ^ 2, 10 ^ 3, 10 ^ 4, 10 ^ 5, 10 ^ 6, 10 ^ 7, 10 ^ 8, 10 ^ 9, 10 ^ -1, 10 ^ -2}
    10. Multiplikator = Exponenten(CInt(Multiplikator))
    11. Else
    12. Dim Exponenten() As Double = {1, 10 ^ 1, 10 ^ 2, 10 ^ 3, 10 ^ 4, 10 ^ 5, 10 ^ 6, 10 ^ -1, 10 ^ -2}
    13. Multiplikator = Exponenten(CInt(Multiplikator))
    14. End If
    15. End Sub
    16. End Class

    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Dann ist das auf Wikipedia ein Fehler.
    Die Farb-Werte des Toleranzrings sind immer gleich (gleicher Wert bei gleicher Farbe und auch die gleiche Anzahl bei allen Konstellationen), egal ob vier, fünf oder sechs Ringe.
    Betrifft deine Umsetzung ja auch indirekt.

    Eine Auflistung reicht also und ist auch fachlich korrekt.
    Dumm ist der, der dumm ist. Nicht andersrum!
    Toleranzrings oder Multiplikator?
    Auf Wiki sind beide immer unterschiedlich...
    Hast du irgendwo eine Angabe ( Quelle ) wo ich die fachlich richtigen Werte herbekomme?
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Ich wollte eigentlich Multiplikator schreiben, die Aussage stimmt aber sowohl für Multiplikator als auch für Toleranz.

    Elektroniktutor oder auch die Website von TE Connectivity sind da ganz gut geeignet.
    Wenn du lieber was in der Hand hältst beim lernen dann hilft auch ein Tabellenbuch.
    Dumm ist der, der dumm ist. Nicht andersrum!
    Brauche HILFE bei zugriff auf Klassen
    Rufe ich das Exponent.Exponent_umwandeln() auf, dann zeigt das Label den umgewandelten Wert richtig an.
    Rufen ich das Resistor.Calculation() auf, dann zeigt das Label den Indexwert der Combobox an die MsgBox zeigt immer nur 1 an.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class UI_Exponent
    2. Friend Property AktlMultiplikator As Double
    3. Friend ReadOnly Property Multiplikator() As Double
    4. Get
    5. Return AktlMultiplikator
    6. End Get
    7. End Property
    8. Friend Sub Exponent_umwandeln()
    9. Dim Exponent() As Double = {1, 10 ^ 1, 10 ^ 2, 10 ^ 3, 10 ^ 4, 10 ^ 5, 10 ^ 6, 10 ^ 7, 10 ^ 8, 10 ^ 9, 10 ^ -1, 10 ^ -2}
    10. AktlMultiplikator = Exponent(CInt(Multiplikator))
    11. End Sub
    12. Friend ReadOnly StrMultiplikator() As String = {"1", "10 ^ 1", "10 ^ 2", "10 ^ 3", "10 ^ 4", "10 ^ 5", "10 ^ 6", "10 ^ 7", "10 ^ 8", "10 ^ 9", "10 ^ -1", "10 ^ -2"}
    13. End Class
    14. '-----------------------------------
    15. Public Class UI_Resistor
    16. Friend Exponent As New UI_Exponent
    17. Friend Berechnung As Boolean = False
    18. Friend Hunderter, Zehner, Einer As Integer
    19. Friend Sub Calculation()
    20. Exponent.Exponent_umwandeln()
    21. 'ToDo ....
    22. MessageBox.Show(Exponent.Multiplikator.ToString)
    23. End Sub
    24. End Class
    25. '-------------------------------
    26. Public Class Frm_Resistor
    27. Friend Resistor As New UI_Resistor
    28. Friend Exponent As New UI_Exponent
    29. Private Sub Frm_Resistor_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    30. FuelleCmb_Multiplikator()
    31. End Sub
    32. Private Sub Btn_berechnen_Click(sender As Object, e As EventArgs) Handles Btn_berechnen.Click
    33. 'Exponent.Exponent_umwandeln()
    34. Resistor.Calculation()
    35. Lbl_Hunderter.Text = Exponent.Multiplikator.ToString
    36. End Sub
    37. Private Sub FuelleCmb_Multiplikator()
    38. Combo_Multiplikator.DataSource = Exponent.StrMultiplikator
    39. End Sub
    40. Private Sub Combo_Multiplikator_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Combo_Multiplikator.SelectedIndexChanged
    41. Exponent.AktlMultiplikator = Combo_Multiplikator.SelectedIndex
    42. End Sub
    43. End Class
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Amelie“ ()

    AktlMultiplikator = Exponent(CInt(Multiplikator)) 8|
    Durch die falsche Benennung schießt Du Dir dermaßen ins Knie! Oder Du verstehst Deinen eigenen Code nicht. Da Multiplikator das gleiche ist wie AktlMultiplikator, erhältst Du für (Aktl)Multiplikator ja Werte wie 1, 10^2 = 100, 10^-2 = 0,01 usw. Und dann verwendest Du diese Zahl als INDEX-ANGABE für die Auswahl aus Exponent. Da wir das Thema schon in mehreren Posts hatten:

    VB.NET-Quellcode

    1. Dim Exponent() As Double = {1, 10 ^ 1, 10 ^ 2, 10 ^ 3, 10 ^ 4, 10 ^ 5, 10 ^ 6, 10 ^ 7, 10 ^ 8, 10 ^ 9, 10 ^ -1, 10 ^ -2}
    2. 'Listenindizes:.............0..1.......2.......3.......4.......5.......6.......7.......8.......9.......10.......11


    Listenindex
    Wert
    0
    1
    1
    10
    2
    100
    11
    0,01

    Wenn Du schreibst Exponent(L), dann holst Du Dir damit den WERT aus der Liste EXPONENT mit dem LISTENINDEX L. Wenn Du also den Listenindex 11 hast und dann somit Exponent(11) aufrufst, dann bekommst Du 0,01 zurück. Wenn Du aber Exponent(CInt(Multiplikator)) aufrufst, ist das doch totaler Blödsinn. Wenn Multiplikator 0,01 ist, dann wandelt CInt(Multiplikator) das in 0 um und Du hast da stehen: Exponent(0). Und da kommt dann als Wert 1 raus, siehe Liste oben. Und wenn Multiplikator 100 ist, crasht das Programm, weil Deine Exponent-Liste keine 100 (bzw. um genau zu sein 101) Einträge hat.
    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.
    Habe das nun alles in eine Klasse gemacht. Das funktioniert.
    Lagere ich das ganze Multilpikatorgedöns in eine extra Klasse geht nichs mehr.
    Je mehr ich daran rummache desto weniger klappt noch was ;;;-(

    VB.NET-Quellcode

    1. Public Class UI_Resistor
    2. Friend Property AktlMultiplikator As Double
    3. Friend LIndex As Integer
    4. Friend Sub Calculation()
    5. MessageBox.Show("ListIndex " & LIndex.ToString)
    6. Exponent_umwandeln()
    7. 'ToDo ....
    8. MessageBox.Show("Multiplikator " & Multiplikator.ToString)
    9. End Sub
    10. Friend ReadOnly Property Multiplikator() As Double
    11. Get
    12. Return AktlMultiplikator
    13. End Get
    14. End Property
    15. Friend Sub Exponent_umwandeln()
    16. Dim Exponent() As Double = {1, 10 ^ 1, 10 ^ 2, 10 ^ 3, 10 ^ 4, 10 ^ 5, 10 ^ 6, 10 ^ 7, 10 ^ 8, 10 ^ 9, 10 ^ -1, 10 ^ -2}
    17. AktlMultiplikator = Exponent(LIndex)
    18. End Sub
    19. Friend ReadOnly StrMultiplikator() As String = {"1", "10 ^ 1", "10 ^ 2", "10 ^ 3", "10 ^ 4", "10 ^ 5", "10 ^ 6", "10 ^ 7", "10 ^ 8", "10 ^ 9", "10 ^ -1", "10 ^ -2"}
    20. End Class
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Amelie schrieb:

    Lagere ich das ganze Multilpikatorgedöns in eine extra Klasse geht nichs mehr.
    Und wie sieht der mit-Klasse-Versuch aus? Denn nun ist ja Dein Code bezüglich Exponent und Listenindex geändert und richtig. Wobei sich dann die Frage stellt, wie LIndex geändert wird.
    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.

    VB.NET-Quellcode

    1. Private Sub Combo_Multiplikator_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Combo_Multiplikator.SelectedIndexChanged
    2. Resistor.LIndex = Combo_Multiplikator.SelectedIndex
    3. End Sub


    Bis auf die Sub Calculation sah so die Klasse Exponenten aus. Entweder kam da immer nur 0 an oder kein Objektverweis....
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    OK hier meine neue Klasse.
    Hoffe das ist so OK? Dann könnte ich das Form machen. Auf dem Form ist jetzt nur ein Button und die beiden Combobxen
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class UI_Resistor
    2. Friend Property AktlMultiplikator As Double
    3. Friend Property AktlToleranz As Double
    4. Friend ListIndexExponent As Integer
    5. Friend ListIndexToleranz As Integer
    6. Friend Berechnung As Boolean
    7. Friend Hunderter, Zehner, Einer As Integer
    8. Friend Widerstand, Toleranzbegin, Toleranzende As Double
    9. Friend Maßeinheit As String
    10. Friend ReadOnly Property Multiplikator() As Double
    11. Get
    12. Return AktlMultiplikator
    13. End Get
    14. End Property
    15. Private Sub Exponent_umwandeln()
    16. Dim Exponent() As Double = {1, 10 ^ 1, 10 ^ 2, 10 ^ 3, 10 ^ 4, 10 ^ 5, 10 ^ 6, 10 ^ 7, 10 ^ 8, 10 ^ 9, 10 ^ -1, 10 ^ -2}
    17. AktlMultiplikator = Exponent(ListIndexExponent)
    18. End Sub
    19. Friend ReadOnly Property Toleranz() As Double
    20. Get
    21. Return AktlToleranz
    22. End Get
    23. End Property
    24. Private Sub Toleranz_bestimmen()
    25. Dim Toleranzwert() As Double = {1, 2, 5, 10, 0.5, 0.25, 0.1, 0.05}
    26. If StaticToleranz = Toleranzring.Ohne_Ring Then AktlToleranz = 20 Else AktlToleranz = Toleranzwert(ListIndexToleranz)
    27. End Sub
    28. Private StaticToleranz As Toleranzring = Toleranzring.Mit_Ring
    29. Friend Sub Toleranzwechsel()
    30. If StaticToleranz = Toleranzring.Mit_Ring Then StaticToleranz = Toleranzring.Ohne_Ring Else StaticToleranz = Toleranzring.Mit_Ring
    31. End Sub
    32. Private AktuelleRingzahl As Ringanzahl = Ringanzahl.Vier_Ringe
    33. Friend Sub AnzahlRinge_wechseln()
    34. If AktuelleRingzahl = Ringanzahl.Vier_Ringe Then AktuelleRingzahl = Ringanzahl.Fünf_Ringe Else AktuelleRingzahl = Ringanzahl.Vier_Ringe
    35. End Sub
    36. Friend Sub Eingaben_Prüfen()
    37. Dim Prüfsumme As Integer = CInt(Hunderter & Zehner & Einer)
    38. If Prüfsumme = 0 Then
    39. Berechnung = False
    40. Exit Sub
    41. ElseIf Zehner < 1 AndAlso Multiplikator > 1 AndAlso Multiplikator < 10 Then
    42. Berechnung = False
    43. Exit Sub
    44. Else
    45. Exponent_umwandeln()
    46. Toleranz_bestimmen()
    47. Widerstand_berechnen(Hunderter, Zehner, Einer, Multiplikator, Toleranz)
    48. End If
    49. End Sub
    50. #Region "Widerstandberechnen"
    51. Friend Function Widerstand_berechnen(Hunderter As Integer, Zehner As Integer, Einer As Integer, Multiplikator As Double, Toleranz As Double) As Double
    52. If AktuelleRingzahl = Ringanzahl.Vier_Ringe Then
    53. Dim Zwischensumme As Double = CDbl((Zehner & Einer))
    54. Widerstand = Zwischensumme * Multiplikator
    55. Else
    56. Dim Zwischensumme As Double = CDbl(Hunderter & Zehner & Einer)
    57. Widerstand = Zwischensumme * Multiplikator
    58. End If
    59. Toleranzbegin = (Widerstand - (Widerstand / 100 * Toleranz))
    60. Toleranzende = (Widerstand + (Widerstand / 100 * Toleranz))
    61. If Multiplikator = 10 ^ -1 OrElse Multiplikator = 10 ^ -2 OrElse Multiplikator = 10 ^ 0 OrElse Multiplikator = 10 ^ 1 Then
    62. Maßeinheit = " Ω"
    63. Widerstand = Widerstand
    64. Toleranzbegin = Toleranzbegin
    65. Toleranzende = Toleranzende
    66. ElseIf Multiplikator = 10 ^ 2 OrElse Multiplikator = 10 ^ 3 OrElse Multiplikator = 10 ^ 4 Then
    67. Maßeinheit = " kΩ"
    68. Widerstand = Widerstand / 1000
    69. Toleranzbegin = Toleranzbegin / 1000
    70. Toleranzende = Toleranzende / 1000
    71. ElseIf Multiplikator = 10 ^ 5 OrElse Multiplikator = 10 ^ 6 OrElse Multiplikator = 10 ^ 7 Then
    72. Maßeinheit = " MΩ"
    73. Widerstand = Widerstand / 1000000
    74. Toleranzbegin = Toleranzbegin / 1000000
    75. Toleranzende = Toleranzende / 1000000
    76. ElseIf Multiplikator = 10 ^ 8 OrElse Multiplikator = 10 ^ 9 Then
    77. Maßeinheit = " GΩ"
    78. Widerstand = Widerstand / 1000000000
    79. Toleranzbegin = Toleranzbegin / 1000000000
    80. Toleranzende = Toleranzende / 1000000000
    81. End If
    82. Berechnung = True
    83. Return Widerstand
    84. End Function
    85. #End Region
    86. End Class
    87. #Region "Enums"
    88. Friend Enum Ringanzahl
    89. Vier_Ringe
    90. Fünf_Ringe
    91. End Enum
    92. Friend Enum Toleranzring
    93. Mit_Ring
    94. Ohne_Ring
    95. End Enum
    96. #End Region

    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Naja, wenn's klappt, ok. Aber solche Sachen wie Widerstand = Widerstand, CDbl(Hunderter & Zehner & Einer) und Berechnung = True (Was soll dem Leser dieser Variablenname sagen?) kommen mir immer noch komisch vor. Aber wenn Du damit zurecht kommst, ist's wohl erstmal verkraftbar.
    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.
    Moin moin

    Naja für Hunderter Zehner und Einer, was soll ich da für Namen nehmen, die heißen halt so, weil aus diesen eine Berechnung erfolgt.
    Berechnung= True .. Ergebniss oder wie???
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Da hat ein Absatz von mir gefehlt. Hunderter, Zehner und Einer sind benennungstechnisch in Ordnung.
    Aber Berechnung ist furchtbar. Soll das heißen, dass etwas berechnet werden soll, wenn Berechnung True ist? Oder soll das bedeuten, dass da eine Klassenfunktionalität aktiviert wird? Nein, ich lese aus dem Code (und soweit sollte es nie kommen), dass Du in der Variable speicherst, ob die Berechnung erfolgreich durchgeführt werden konnte.
    Daher sollte das Teil z.B. BerechnungWarErfolgreich oder GesamtwertKonnteBerechnetWerden heißen.
    Aber: Warum speicherst Du den Wert überhaupt in einer extra Variable? Genausogut könntest Du auch die Function so schreiben, dass sie diesen Wert ebenfalls zurückgibt:

    VB.NET-Quellcode

    1. Friend Function Widerstand_berechnen(Hunderter As Integer, Zehner As Integer, Einer As Integer, Multiplikator As Double, Toleranz As Double) As (Ergebnis As Double, BerechnungWarMöglich As Boolean)
    2. Dim Prüfsumme As Integer = CInt(Hunderter & Zehner & Einer)
    3. If Prüfsumme = 0 Then
    4. Return (0, False)
    5. ElseIf Zehner < 1 AndAlso Multiplikator > 1 AndAlso Multiplikator < 10 Then
    6. Return (0, False)
    7. End If
    8. Exponent_umwandeln()
    9. Toleranz_bestimmen()
    10. If AktuelleRingzahl = Ringanzahl.Vier_Ringe Then
    11. Dim Zwischensumme As Double = CDbl((Zehner & Einer))
    12. Widerstand = Zwischensumme * Multiplikator
    13. Else
    14. Dim Zwischensumme As Double = CDbl(Hunderter & Zehner & Einer)
    15. Widerstand = Zwischensumme * Multiplikator
    16. End If
    17. Toleranzbegin = (Widerstand - (Widerstand / 100 * Toleranz))
    18. Toleranzende = (Widerstand + (Widerstand / 100 * Toleranz))
    19. If Multiplikator = 10 ^ -1 OrElse Multiplikator = 10 ^ -2 OrElse Multiplikator = 10 ^ 0 OrElse Multiplikator = 10 ^ 1 Then
    20. Maßeinheit = " Ω"
    21. Widerstand = Widerstand
    22. Toleranzbegin = Toleranzbegin
    23. Toleranzende = Toleranzende
    24. ElseIf Multiplikator = 10 ^ 2 OrElse Multiplikator = 10 ^ 3 OrElse Multiplikator = 10 ^ 4 Then
    25. Maßeinheit = " kΩ"
    26. Widerstand = Widerstand / 1000
    27. Toleranzbegin = Toleranzbegin / 1000
    28. Toleranzende = Toleranzende / 1000
    29. ElseIf Multiplikator = 10 ^ 5 OrElse Multiplikator = 10 ^ 6 OrElse Multiplikator = 10 ^ 7 Then
    30. Maßeinheit = " MΩ"
    31. Widerstand = Widerstand / 1000000
    32. Toleranzbegin = Toleranzbegin / 1000000
    33. Toleranzende = Toleranzende / 1000000
    34. ElseIf Multiplikator = 10 ^ 8 OrElse Multiplikator = 10 ^ 9 Then
    35. Maßeinheit = " GΩ"
    36. Widerstand = Widerstand / 1000000000
    37. Toleranzbegin = Toleranzbegin / 1000000000
    38. Toleranzende = Toleranzende / 1000000000
    39. End If
    40. Return (Widerstand, True)
    41. End Function

    Wie Du siehst, habe ich die Eingaben_Prüfen-Methode hier mit eingebaut. Jetzt kannst Du nach Aufruf der Function Widerstand_berechnen prüfen, ob die Berechnung erfolgreich war und wenn ja, welcher Widerstand sich ergibt.

    Was mir bei Deinem Code auch auffällt: Warum ist die Widerstand_berechnen-Function Friend? Damit könnte sie aufgerufen werden, ohne vorher die Eingaben überprüfen zu lassen. Auch der Name passt nicht. Widerstand_berechnen ist ein (fast) passender Name für eine Sub.
    Dein Code der Function kann eingedampft werden. Die If-Else-Bereiche unterschieden sich nur duch den Faktor und das Einheitenvorzeichen. Daher geht der Code kürzer.
    Toleranzbegin ist falsch geschrieben, es fehlt ein n hinten.
    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.