Bewertung Projekt Berechnung elektrischer Widerstand

  • VB.NET
  • .NET (FX) 4.0

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

    Bewertung Projekt Berechnung elektrischer Widerstand

    ausgelagert aus mehreren ComboBoxen eine List(Of T) zuweisen, die dann aber unabhängig voneinander agieren sollen ~VaporiZed

    Sind noch einige Fehler drin und das mit den 5 Ringen ist auch noch nicht fertig.
    Aber so im großen und ganzen bin ich schon recht zufrieden für mein "erstes Mal" Rechnen mit .... ;)

    @VaporiZed
    Edit: 13:00 Uhr neue Zip angehangen
    Alles Überarbeitet

    Hab noch einen Bug gefunden:

    Edit 15:45
    Hab noch weitere Bugs gefunden. Baue um weil das mit den ENUMs so nicht klappt.
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „VaporiZed“ ()

    Wenn du einmal beim Umbauen bist hätte ich da auch noch was.

    Aktuell hast zwei Auswahlmöglichkeiten:
    • 4 Ringe
    • 5 und 6 Ringe
    Vor allem, aber nicht nur, aus elektrotechnischer Sicht würde ich ich die Auswahl noch mal unterteilen. Also Auswahl aus 4, 5 oder 6.
    Die wenigsten handelsüblichen 0815-Widerstände haben 6 Ringe. Wenn die 6. ComboBox noch da ist, ohne gebraucht zu werden, würde mich das als Nutzer eventuell ir­ri­tie­ren.
    Dumm ist der, der dumm ist. Nicht andersrum!
    Von meiner Seite erstmal nur
    Anmerkungen

    Der Umgang mit Booleans ist wohl noch immer noch ganz klar.

    VB.NET-Quellcode

    1. If MyKlass.AktlStandardRinge = Ringanzahl.Vier_Ringe Then
    2. pb_ring1.Visible = False
    3. cmb_ringHunderter.Enabled = False
    4. pb_ring_temp.Visible = False
    5. cmb_temperatur.Enabled = False
    6. Else
    7. pb_ring1.Visible = True
    8. cmb_ringHunderter.Enabled = True
    9. pb_ring_temp.Visible = True
    10. cmb_temperatur.Enabled = True
    11. End If

    da genügt

    VB.NET-Quellcode

    1. Dim ProgrammZeigtMomentanMehrAlsVierRinge = MyKlass.AktlStandardRinge <> Ringanzahl.Vier_Ringe
    2. pb_ring1.Visible = ProgrammZeigtMomentanMehrAlsVierRinge
    3. cmb_ringHunderter.Enabled = ProgrammZeigtMomentanMehrAlsVierRinge
    4. pb_ring_temp.Visible = ProgrammZeigtMomentanMehrAlsVierRinge
    5. cmb_temperatur.Enabled = ProgrammZeigtMomentanMehrAlsVierRinge


    MyKlass -> nix mit Klass! MyWiderstand, oder besser gleich MyResistor

    If MyKlass.Result = True Then: Vergleich mit True kann weg -> If MyKlass.Result, so wie Du es an anderen Stellen ja schon hast
    Aber: Warum heißt das Teil Result? Was denn für ein Resultat? Der Leser muss sich erstmal in den Code einarbeiten, um zu verstehen, was da am Ende für ein Ergebnis/Resultat drinsteckt.

    Sub AnzeigeBerechnungen(): Stichwort Benennung von Methoden; Imperativ nutzen

    alle ByVals können weg

    GetKoeffizient: Stichwort Benennung von Methoden; Get impliziert eine Wertrückgabe. Das Teil ist aber eine Sub, die gibt gar nix wieder, sie setzt einen Wert, und zwar von temp_koeffizient

    VB.NET-Quellcode

    1. Toleranzbegin = CDbl(Widerstand - (Widerstand / 100 * Toleranz))
    2. Toleranzende = CDbl(Widerstand + (Widerstand / 100 * Toleranz))
    das CDbl kannst Du weglassen, da die Berechnung auf der rechten Seite eh schon Double-Werte ergibt
    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.
    @VaporiZed

    Bin schon weit gekommen mit dem "Neubau"
    Habe nun eine Frage zwischendurch, weil ich gerade auf dem Schlauch stehe...

    VB.NET-Quellcode

    1. Friend Multiplikator As Double
    2. Private Sub Exponenten_bestimmen()
    3. If AktlStandardRinge = Ringanzahl.Vier_Ringe Then
    4. 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}
    5. Multiplikator = Exponenten(CInt(Multiplikator))
    6. Else
    7. Dim Exponenten() As Double = {1, 10 ^ 1, 10 ^ 2, 10 ^ 3, 10 ^ 4, 10 ^ 5, 10 ^ 6, 10 ^ -1, 10 ^ -2}
    8. Multiplikator = Exponenten(CInt(Multiplikator))
    9. End If
    10. End Sub

    Gibt es eine einfache Möglichkeit an die Exponenten in String-Form zu kommen?
    Also das ich in einem Label anzeigen lassen kann: " 10^2 " anstelle von "1000"
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Nö, das in Zeile#4 und #8 rechnet der Compiler im Voraus aus. Die in-der-Code-Darstellung (also z.B: 10 ^ 2) ist AFAIK schon zu Programmstart weg.
    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.

    Amelie schrieb:

    Gibt es eine einfache Möglichkeit an die Exponenten in String-Form zu kommen?
    Also das ich in einem Label anzeigen lassen kann: " 10^2 " anstelle von "1000"
    Es gibt allerlei Zahlen-Formate, darunter auch das sogenannte "wissenschaftliche", wo Zahlen mit zehnerpotenzen dargestellt werden.
    Vielleicht ist für String.Format() ein Zahlenformatstring definiert, der das umsetzt - musste mal die Doku suchen und lesen.
    Also habe nun einiges gelesen aber ich finde nur:

    10e+2 usw... Ich würde aber gerne diese Schreibweise haben: 10^2
    Muss ich wohl anders zusammenbauen...
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Naja, statt Exponenten As Double() kannst Du eine eigene Klasse einführen und dann Exponenten As DeineExponentenklasse() schreiben. Diese Klasse hätte 2 Properties: Text As String und Wert As Double. Dann kannst Du Dir in der Text-Property Dein "10^x" merken und bei Wert eben das Ergebnis von 10^x.
    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

    Da ich keine andere Lösung gefunden habe und ich mit Replace nicht weitergekommen bin, erstellte ich mir diesem Workaround:

    Spoiler anzeigen

    Im Form:

    VB.NET-Quellcode

    1. Private Sub cbx_Multiplikator_SelectedValueChanged(sender As Object, e As EventArgs) Handles cbx_Multiplikator.SelectedValueChanged
    2. pb_Multiplikator.BackColor = CType(cbx_Multiplikator.SelectedItem, Color)
    3. Resistor.Multiplikator = CInt(cbx_Multiplikator.SelectedIndex) '<================== Die normale Berechnung
    4. Resistor.String_Exponenten_bestimmen(CInt(cbx_Multiplikator.SelectedIndex)) #<=== Die Stringauswertung
    5. lbl_multiplikatorwert.Visible = True
    6. lbl_multiplikatorwert.Text = Resistor.StringMultiplikator
    7. End Sub


    In der Klasse

    VB.NET-Quellcode

    1. Friend StringMultiplikator As String
    2. Friend Sub String_Exponenten_bestimmen(ByVal Ringfarbe As Integer)
    3. If AktuelleRingzahl = Ringanzahl.Vier_Ringe Then
    4. Dim Multi() 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. StringMultiplikator = Multi(Ringfarbe)
    6. Else
    7. Dim Multi() As String = {"1", "10 ^ 1", "10 ^ 2", "10 ^ 32", "10 ^ 4", "10 ^ 5", "10 ^ 6", "10 ^ -1", "10 ^ -2"}
    8. StringMultiplikator = Multi(Ringfarbe)
    9. End If
    10. End Sub

    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Moin moin EDR

    Bestimmt geht im meinem Kopf wieder was völlig daneben zumal ich mit Mathe eh nicht per du bin. ;(
    Haber erstmal versucht den Wert auf wissendschaftliche schreibweise heraus zubekommen ...
    lbl_multiplikatorwert.Text = (Resistor.Multiplikator.ToString("E+0", CultureInfo.InvariantCulture))
    Aus " 1 000 000 " wird " E+2 "

    Tante google ist mir heute auch keine Hilfe.
    Bilder
    • Unbenannt-1.jpg

      279,86 kB, 866×455, 54 mal angesehen
    • zahl-1.jpg

      83,93 kB, 500×333, 57 mal angesehen
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Zeig mal bitte Deinen geschweiterten Versuch mit Replace
    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.
    Das habe ich alles gelöscht und neu angefangen, weil ich auch das mit dem ständigen VS-hängen hoffendlich beseitigt habe. Im Moment ist ruhe ;)

    Erstmal etwas zum verstehen: ​10 ^ 3 ist eine Zahl und das "​10 ^ 3" ist ein String.
    Die Zahl wird vom Compiler gleich umgewandelt in 1000; soweit richtig?
    Dann bringt mir das mit dem Format ​(Resistor.Multiplikator.ToString("E+0", CultureInfo.InvariantCulture)) ja nichts weil ich ja die STRING Darstellung haben möchte.

    Hab das nun so geändert das die Form nur das macht.

    VB.NET-Quellcode

    1. Private Sub cbx_Multiplikator_SelectedValueChanged(sender As Object, e As EventArgs) Handles cbx_Multiplikator.SelectedValueChanged
    2. pb_Multiplikator.BackColor = CType(cbx_Multiplikator.SelectedItem, Color)
    3. Resistor.Multiplikator = CInt(cbx_Multiplikator.SelectedIndex)
    4. End Sub

    In der Klasse rufe ich dann das auf: und hole mir den passenden String.

    VB.NET-Quellcode

    1. .....
    2. ...
    3. String_Exponenten_bestimmen(CInt(Multiplikator))
    4. Friend Sub String_Exponenten_bestimmen(ByVal RingNr As Integer)
    5. If AktuelleRingzahl = Ringanzahl.Vier_Ringe Then
    6. Dim Multi() 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"}
    7. StringMultiplikator = Multi(RingNr)
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Amelie schrieb:

    Also habe nun einiges gelesen aber ich finde nur: 10e+2
    Wie bist Du zu diesem Ergebnis gekommen und wo ist da die passende Replace-Funktion, die Du nicht erfolgreich verwenden konntest, um aus 10e+2 10^2 zu machen?
    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.
    Das hier:
    ​Naja, statt Exponenten As Double() kannst Du eine eigene Klasse einführen und dann Exponenten As DeineExponentenklasse() schreiben. Diese Klasse hätte 2 Properties: Text As String und Wert As Double. Dann kannst Du Dir in der Text-Property Dein "10^x" merken und bei Wert eben das Ergebnis von 10^x.
    Habe ich gestern gar nicht gesehen und verstehe gerade nicht wie dessen Umsetzung sein könnte.
    Ich grübel noch daran.
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Nabend :)

    So habe das kleine Projekt soweit fertig.
    Noch ein paarmal testen dann packe ich ein zip und hänge das dann morgen mal hier an diesen Post.


    Edit:
    Moin Habe das zip mal angehangen.
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

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

    So nun geht auch in der anderen Richtung.
    Werte mit NumericUp eingeben und die Farbwerte werden ausgegeben. ;)
    Bilder
    • Widerstand2.jpg

      158,96 kB, 507×474, 63 mal angesehen
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh: