Zahlen addieren sich miteinander

  • VB.NET

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

    Das ist eine fixe Berechnung. Der TE will aber eine hochflexible Berechnung, in der die Reihenfolge im Voraus nicht festegelegt ist, da der Compiler nicht weiß, in welcher Reihenfolge der User Rechenzeichen und später zweifellos Klammern eintippt …
    Dass eine bisher etablierte Lösung seit Post#6 umgekehrte polnische Notation heißt und mehrfach genannt wurde, sollte nahelegen, diese nachzuvollziehen und zu nutzen.
    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 als ich reingeguckt habe, fand ich auch, dass das die Lösung sein könnte, ich verstehe dort aber leider nicht viel. Ich schaue es mir lieber bei noch einer anderen Qualle als Wikipedia an.
    P.s Mit Klammern werde ich nicht arbeiten.

    Solange Du Plus und Minus kombinierst, kannst Du immer die ersten 2 Zahlen nehmen, diese zum Ergebnis zusammenrechnen und dann das als neue erste Zahl nehmen und mit der nächsten Zahl verrechnen. Sobald Du aber irgendwo ein x oder ein : drin hast, ist es aus, weil Punktrechnung vor Strichrechnung.
    Oder konkret:
    • 1 + 2 + 3 = 6
    • 1 + 2 x 3 = 7
    • aber nach dem von links nach rechts ergibt sich 1 + 2 = 3 und 3 x 3 = 9
    Du musst also den ganzen Term analysieren.
    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
    Ich hab das nicht bedacht mit dem Punkt vor Strich, das habe ich ganz vergessen. Danke das du es mir gesagt hast.

    Ich werde mir mal die "umgekehrte polnische Notation" genauer anschauen und wenn ich es irgendwie hinbekommen, werde ich die Lösung reinschreiben.

    Wird zwar jetzt bissen viel weil ich erst seit 2 Wochen mit VB.net arbeite aber ich kriege es schon irgendwie hin.

    Vielen dank an alle die versucht haben mir zu helfen! :D

    Jimpo schrieb:

    Punkt vor Strich
    ist bei umgekehrter polnischer Notation irrelevant,
    da wird aus zwei Zahlen und einem Operand { +, -, *, / } eine neue Zahl
    oder
    aus einer Zahl und einer Operation { sin, log, 1/x usw. } eine neue Zahl
    und 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!
    Umgekehrt polnische Notation ist für den Programmierer einfacher.
    Aber Otto Normalanwender ist mit der Bedienung üblicherweise überlastet.

    Ich erinnere mich an meinen ersten HP-41CV.
    Da muss man schon umdenken, bis man das verinnerlicht hat.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @petaod Mein Vater hatte ne russische Maschine (SM 5000 oder so) und mir das so erklärt:
    Zahl eingeben
    hochschieben
    Zahl eingeben
    hochschieben
    Operand
    Enter
    bzw.
    Zahl eingeben
    hochschieben
    Operation
    Enter
    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!
    Hab jetzt die Lösung:

    VB.NET-Quellcode

    1. Function operatoren(operatorf As String) As String
    2. operatorbox.Text = operatorf
    3. komma.Enabled = True
    4. ergebnis.SelectionStart = Len(ergebnis.Text)
    5. ergebnis.ScrollToCaret()
    6. ergebnis.Focus()
    7. If Not Eingabewert1 = Nothing Then
    8. zwischensumme.Text &= ergebnis.Text & " "
    9. zwischensumme.Text &= "=" & " "
    10. ergebnis.Text = rechnen((Eingabewert1), ((ergebnis.Text)), operatorbox.Text)
    11. Eingabewert1 = ergebnis.Text
    12. ElseIf ergebnis.Text = Nothing Then
    13. Else
    14. Eingabewert1 = ergebnis.Text
    15. End If
    16. If Not ergebnis.TextLength = 0 Then
    17. zwischensumme.Text &= Eingabewert1 & " "
    18. zwischensumme.Text &= operatorf & " "
    19. Else
    20. End If
    21. ergebnis.Clear()
    22. End Function

    Jimpo schrieb:

    Hab jetzt die Lösung:
    So sieht sie auch aus.
    Was soll der ganze Mist? Sorry.
    Hast Du Option Strict On :?:
    Rechnest Du mit Strings?
    Wenn der erste Operand "Roulade" und der zweite "Klöße" ist, kommt da wohl "Roulade mit Klößen" raus?
    Was macht die Prozedur rechnen()?
    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!
    @RodFromGermany
    Nein ich rechne nicht mit String sondern mit Double. Auch wenn Sie sagen, dass das Mist ist, funktionierts trotzdem besser als gedacht. Die "Umgekehrt polnische Notation" habe ich nicht gebraucht. Ich habe es auf eine ganz andere art gelößt. Bevor Sie zu etwas "Mist" sagen, sollten Sie sich lieber auch über deen restlichen Quell Code informieren. Auch wenn ich den rest nicht mitgeschickt habe, müsste es doch logisch sein, dass wenn es funktioniert so wie es sollte, kein Mist sein kann.
    Ich bin Ihnen sehr dankbar, dass Sie versucht haben mir zu helfen, aber nachdem ich Tagelang für dieses Projekt gebraucht hab und dann jemand dazu "Mist" sagt, ohne den ganzen Quell-code gesehen zu haben...


    Ich würde ja gerne mehr von dem Code schicken, ich weiss aber nicht ob ich es darf weil es ein Projekt für die Schule ist. Mir wurde gesagt, dass soweit alles richtig ist.


    Rechnen() ist eine Funktion, die die Werte, die dort drinnen sind verrechnet.

    Erklärung: Ich habe der TextBox, wo die Zahlen zum rechnen reingeschrieben werden, eine Variable zugewiesen. Beim drücken eines Operators wird dieser gespeichert. Nach jedem Click auf den Operator werden die Zahlen gespeichert und später einfach dazu addiert.

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Jimpo“ ()

    Beim Lesen dieses Beitrages schaue ich gerade auf meinen Tischrechner (Olympia mit Papierstreifen).
    Dort finde ich die Tasten M+, M-, M-Clear und M* (Memory).
    Damit prüfe ich heute noch Rechnungen (Menge * EP) und dann M+.
    Mit M* erhalte ich dann den Nettoendbetrag.
    Gruß Markus

    Jimpo schrieb:

    Nein ich rechne nicht mit String sondern mit Double.
    Deswegen ist das Resultat von Rechnen(...) wohl ein String, oder Du programmierst mit Option Strict Off :?:
    Wie gesagt: Mist.
    Sei froh, dass ich Dir direkt sage was ich meine, ohne rumzuschmusen. Da kannst Du doch sehr leicht mit leben, da wir uns ja nicht kennen.
    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!
    @petaod Hat er nich mitgeschickt.
    @Jimpo Ich sage: Mist, ich habe den restlichen Quellcode auch noch nicht gesehen. ;)
    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!

    Jimpo schrieb:

    Ich bin Ihnen sehr dankbar, dass Sie versucht haben mir zu helfen, aber nachdem ich Tagelang für dieses Projekt gebraucht hab und dann jemand dazu "Mist" sagt, ohne den ganzen Quell-code gesehen zu haben...
    Hmm - ich bekomme ein bischen den Eindruck, dass wir (mal wieder) dabei sind, einen Einsteiger aus VBP zu vergraulen.
    Jo - der Einstieg in VBP ist hart, und auf VBP gehts rau zu (andererseits auch wieder sehr harmlos im Vergleich mit anderen Programmierer-Foren)
    Hier triffst du halt teilweise auf Leute aus der Praxis, und wenn du inne Praxis was ablieferst, was abstürzt, nur weil man etwas ungeeignetes eingegeben hat, dann kannste dich freuen, wenn cheffe nur "Mist" dazu sagt.
    Beziehungsweise auch nicht freuen, weil eiglich ists völlig egal, was der sagt.
    Selbst wenn er sich nur räuspert (zB bei meim Teamleiter ist das so) weisst du, was er meint. Und sogar das ist egal, weil du weisst ja selber, was es ist, wenn du sowas abgeliefert hast und es zurückbekommst.

    Nu schauemer dein Code:

    Jimpo schrieb:

    VB.NET-Quellcode

    1. ergebnis.Text = rechnen((Eingabewert1), ((ergebnis.Text)), operatorbox.Text)
    Welchen Datentyp hat:
    • Eingabewert1: string
    • ergebnis.Text: string
    Du sagst zwar, du würdest mit Double rechnen, aber was da steht, ist definitiv was anneres.
    Ja, und nun mach mal einfach genau das, was RFG gesagt hat:
    Gib in die Eingabetextbox "Roulade" ein, und drücke dann auf den 'Rechnen'-Button.
    Ich bin mir ziemlich sicher, dass dann genau das passiert, was meinem Teamleiter ein diskretes, aber doch unüberhörbares Räuspern entlocken würde. ;)



    Ansonsten hab ich extrem starke Vorbehalte gegen Programmier-Unterricht an Schulen. Ich sag immer, wer programmieren lernen möchte, der sollte den Unterricht besser abwählen und zum Selbst-Studium übergehen, weil an Schulen bekommt man in rauhen Mengen Dinge beigebracht, die inne Praxis absolutely NoGo-No-Excuses! wären.
    Und die armen Schüler verinnerlichen den "M...", und wenn sie dann mal wirklich was programmieren wollen oder sollen, dann reproduzieren sie lauter (Räusper!) und es ist eine Arbeit von Monaten, ihnen überhaupt beizubiegen, welche Gewohnheiten sie unbedingt - no-excuses! ablegen müssen für immer.
    Eine sehr unangenehme Arbeit, für alle beteiligten.



    Edit:
    Dieser Text enthält keine sog. "Rechtschreibfehler".
    Im Gegenteil: Differenzen zu iwelchen Veröffentlichungen totalitärer Vereinigungen, die sich einbilden, "Richtlinien" für die deutsche Sprache bestimmen zu dürfen, sind eigenes kreatives Werk des Autors und unterliegen dem Urheberrecht!

    Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Danke EDR für M*.
    Gibt auch Leute die machen es nicht beruflich.
    Beteiligten schreibt man gross.

    Edit1:
    Denke mal die meisten hier sind keine Mathematiker oder IT'ler.
    Sie haben Spass an der Programmierung und haben Freude daran wenn was funktioniert.
    Ausbildung zu einem Programmierer erfolgt sicher nicht hier.

    Edit2:
    Muss einfach nochwas dazu schreiben.
    Programmiere seit 1988 (GWbasic, Speicherung damals in Textdateien)
    Hat jahrelang funktioniert. Dann kommt irgendwann NET, Basic wird eingestellt.
    Habe eine Familie zu ernähren und nicht Microsoft hinter her zulaufen.

    Sehe nun die Reaktion,
    nun ja, lasse ich einfach mal so stehen. Sorry wenn ich da jemand auf die Füsse getreten sein sollte.
    Gruß Markus

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Westerwälder“ ()

    @ErfinderDesRades Ich kann in die "Eingabetextbox" nichts eingeben, weil dort nur zahlen erlaubt sind.

    Ich werde sicherlich nicht das letzte mal etwas in diesem Forum posten, daher bitte ich euch,
    nicht direkt etwas zu schreiben, das es "nicht gut" oder so sei. Wie gesagt, es funktioniert einwandfrei und hat viele Extras. Ich weis, dass ihr es nicht wissen könnt, weil ich nicht den ganzen Quell-code veröffentlicht hab. Ich weis aber nicht ob ich einfach Schulprojekte veröffentlichen darf.

    MFG