Probleme bei kleinem rechenprogram

  • VB.NET

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

    Probleme bei kleinem rechenprogram

    Hallo zusammen
    Ich wollte ein kleines rechenprogram schreiben und bekomme es nicht hin.
    Ich wollte die Formel 60 / textfeld1 × Textfeld2 berechnen die Lösung sollte im label1 ausgegeben werden.
    Ich bekomm immer nur falsche Ergebnisse. Mein Problem ist 60/Textfeld1


    Hat jemand eine Idee
    Hallo und Willkommen im Forum

    Pack doch deinen Code in ein CodeTag und wir werden uns ansehen wo dein Denkfehler liegt.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    @Finestone Willkommen im Forum. :thumbup:
    Kann ich voll verstehen, wenn z.B. in der TextBox "Roulade mit Klößen" steht.
    Desweiteren solltest Du Dich mal der Frage der verwendeten Datentypen widmen, hier ist Option Strict On hilfreich, such danach hier im Forum.
    Nimm statt der TextBoxen NumericUpDown-Controls, die sind speziell zur Eingabe numerischer Werte gemacht.
    Dann musst Du nur noch von einem Datentyp in einen anderen konvertieren, in den Typ, in dem Du rechnen willst.
    Hier empfehle ich Double.
    Dein Quelltext könnte dann so aussehen:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim v1 = CDbl(NumericUpDown1.Value)
    3. Dim v2 = CDbl(NumericUpDown2.Value)
    4. If v1 = 0 Then
    5. Label1.Text = "Division durch Null"
    6. Return
    7. End If
    8. Dim res = 60 / v1 * v2
    9. Label1.Text = res.ToString
    10. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Prima das hat mir sehr geholfen.
    Bin noch absoluter Anfänger
    Aber das erste Programm nimmt Form an.

    Ich wollte jetzt noch ein weiteres label das mir das Ergebniss von label1 ÷60 rechnet.
    Das bekomm ich auch nicht hin.

    Leider bin ich auf Spätschicht und kann den Code nicht schicken.
    Aber vielleicht kann mir trotzen jemand helfen.
    Mit dem Programm will ich Laufzeiten berechnen.
    Vielen Dank

    Finestone schrieb:

    Das bekomm ich auch nicht hin.
    Meine Glaskugel ist gerade zur Reparatur.
    Was ganz genau meinst Du?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Finestone Aha. Und wo ist das Problem?
    Sieh Dir meinen Code an und mach einfach zwei weitere Zeilen dazu.
    Feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Finestone schrieb:

    Ich wollte jetzt noch ein weiteres label das mir das Ergebniss von label1 ÷60 rechnet.
    Das bekomm ich auch nicht hin.
    Und das wird auch von uns niemand hinbekommen. Denn man kann kein Label oder ein anderes Control durch 60 teilen. Was soll da rauskommen? Ein Teil des Rahmens?
    Ja, das scheint kleinlich zu sein, aber sobald Dir bewusst wird, wie man das Problem richtig formuliert, ist die Lösung deutlich näher. Was Du willst, ist wohl den angezeigten Label-Text (welcher vermutlich eine Zahl anzeigt) durch 60 teilen. Und bei dieser Formulierung ist schon deutlich, wo das nächste bzw. sogar das eigentliche Problem liegt. Denn man rechnet nicht mit angezeigten Texten. Warum nicht? Weil Controls in erster Linie mal zur Anzeige dienen. Nicht als Aufbewahrungsort für Variablenwerte. Das merkst Du spätestens dann, wenn RfGs weltberühmten Rouladen mit Klößen, von denen schon gesprochen wurden, in dem Label stehen. Und das durch 60 zu teilen, ergibt eine nicht sättigende Mahlzeit. Diese Sache bringt uns dann auf den richtigen Weg. Es geht darum, dass Du Variablen mit aussagekräftigen Namen und korrekten Datentypen (und in diesem Fall einer richtigen Berechnung) verwendest. Sobald Du bei Deinem Mathematikprogramm mit Variablen rechnest (und nicht Ergebnisdarstellungen als Grundlage für eine Weiterberechnung benutzt) und höchstens Benutzereingaben aus CEs extrahierst und Ergebnisse darstellst, wird ein wunderbar passender Schuh draus.

    ein Beispiel:

    VB.NET-Quellcode

    1. Dim a = 60
    2. Dim b = "60"
    3. Dim c = 24.0
    4. Label1.Text = a * b * c
    5. Label2.Text = 100 * Label1.Text / DateTime.Now.TimeOfDay.TotalSeconds

    Das ist murks. Falsche Datentypen, schlechte Benennung, undurchsichtiger Code und - wenn man (bittebittebitte) Option Strict On hat, eh nicht kompilierbar.

    besser:

    VB.NET-Quellcode

    1. Dim SecondsPerMinute = 60
    2. Dim MinutesPerHour = 60
    3. Dim HoursPerDay = 24
    4. Dim SecondsPerDay = SecondsPerMinute * MinutesPerHour * HoursPerDay
    5. Dim ElapsedDayTimeInPercent = 100 * DateTime.Now.TimeOfDay.TotalSeconds / SecondsPerDay
    6. LblSecondsPerDay.Text = SecondsPerDay.ToString()
    7. LblResult.Text = $"Es sind {ElapsedDayTimeInPercent }% des Tages vorbei."

    Ja, mehr Code, aber besser das als unverständliches Wirrwarr mit vielen Fehlerquellen.
    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.
    Lässt du andere, die über z.b. Google hier her gelangen daran Teil haben??

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##





    Dim Drehzahl = CDbl(NumericUpDown1.Value)
    Dim Hub = CDbl(NumericUpDown2.Value)
    If Drehzahl = 0 Then
    Label1.Text = "Division durch Null"
    Return
    End If
    Dim sekunden = 60 / Drehzahl * Hub
    Label1.Text = sekunden.ToString


    Dim minutes = (Label1.Text / 60)
    Label5.Text = minutes.ToString






    End Sub

    Finestone schrieb:

    VB.NET-Quellcode

    1. If Drehzahl = 0 Then
    kannst Du Dir sparen, wenn Du Deinem NumericUpDown1 (genialer Name für ein Control, das eine Drehzahl hält) die Property .Minimum so setzt, dass Du ordentlich rechnen kannst.
    Und:
    (Label1.Text / 60) soll was sein?
    Wenn da "Glühwein" drinne steht, bekommt da jeder nur einen winzigen Schluck, muss aber das Glas um einen Winkel von 6° drehen, damit jeder eine neue Stelle bekommt :?: ( :thumbsup: :thumbsup: :thumbsup: )
    Fang an mit Option Strict On.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Finestone schrieb:

    aber ich weiß nicht wie ich es richtig anwenden kann
    Die MSDN ist Dein Froind: msdn.microsoft.com/de-de/libra…m.timespan(v=vs.110).aspx
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!