Announcement

Collapse
No announcement yet.

Rechnen in C# - Beginner

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Rechnen in C# - Beginner

    Moin moin!

    Ich habe gerade angefangen C# zu studieren und sitze auch schon vor meinem ersten Problem.. Ich erstelle gerade einen simplen Taschenrechner..

    Dabei komme ich gerade nicht weiter..

    Ich habe folgendes vor..

    Die Zahlen zum Rechnen werden in einer Textbox eingegeben und bei dem Klick von Plus Minus oder was auch immer in ein Label eingetrage damit man eine Übersicht hat, was man rechnet

    Also ich gebe ein z.B. 123 dann klick +, dann erscheint im Label 123 +

    Dann noch eine Zahl und dann = Klicken.

    Also möchte ich gern das der Inhalt vom Label berrechnet wird..

    Was im Label steht, ist ein String soweit ich das richtig verstehe.. Wenn ich das mit "Convert.ToInt32" oder Double versuche zu convertieren, meckert er, wahrscheinlich wegen dem + oder - ..

    Bin mir inzwischen auch garncht so sicher, dass das überhaupt so gehen kann wie ich das möchte


    Danke für eure Hilfe!!!

    Gruß

    Ben

  • #2
    Hallo,

    Das Beispiel mit dem Taschenrechner hört sich immer irrsinnig einfach an, ist es aber nicht. Solang Du nur Befehle hintereinander ausführst ist das noch relativ einach... so etwas wie:

    123+456+1234234= ...

    Schwieriger wirds schon bei

    123+456*123=...

    Punkt vor Strich oder nicht? Für solche Probleme braucht man dann einen Parser, der einem den Text in berechenbare Einzelteile aufsplittet.

    Aber für den Anfang:

    Erstmal musst Du den Text in seine Einzelteile zerteilen. Ich gehe mal vom einfachsten Fall aus. Nur + und -:

    123+456+78-123=

    Entweder du suchst jetzt nach dem ersten Vorkommen eines Trennzeichens (+,-,=) (Stichwort: Klasse Strings) oder Du benutzt Regular Expressions zum Auslesen der Zahl.

    Comment


    • #3
      Hallo und willkommen,

      du solltest etwas komplexer denken und programmieren. Es sind zwei verschiedene Dinge, die du machen willst: zum einen die Addition zweier Zahlen, zum anderen die Anzeige der Aufgabe (und danach des Ergebnisses). Also musst du auch verschiedene Schritte ausführen:

      1. erste Zahl in Textbox eingeben
      2. Prüfen, ob das wirklich eine Zahl ist; dazu bietet sich int (oder double oder decimal).TryParse an
      3. Wenn ja, dann kopieren in eine Variable number1 und außerdem (!) Anzeige im Label
      4. Button für das Rechenzeichen drücken, das Rechenzeichen in einer Variablen operator merken (das bezieht sich am besten auf eine Enumeration mit allen möglichen Rechenoperatioen) und außerdem (!) Anzeige im Label
      5. zweite Zahl in Textbox eingeben
      6. wie 2; Zusatzprüfung: bei Division ungleich 0
      7. wie 3, aber kopieren in Variable number2
      8. Rechnung ausführen, Ergebnis anzeigen

      fanderlf's Lösung hat einen völlig anderen Ansatz: Es gibt einen String, der eine (einfache oder komplexe) Aufgabe enthält; der muss analysiert und verarbeitet werden. Stichwort für Google: Mathe-Parser.

      Gruß Jürgen

      Comment


      • #4
        Ahh regex.. ja das ist mir ein Begriff

        Ich versuch mich mal daran und meld mich dann wenn ich s nicht schaffe

        Danke schonmal!

        @Jürgen

        Danke auch für deine Antwort!
        Mit dem Speichern von Variablen habe ich es auch erst probiert und dies funktioniert wunderbar.
        Allerdings steh ich dann da vor dem Problem, wenn ich mehrere Variablen benötige..
        Hast du dafür auch einen Ansatz?

        Ich habe also 2 Variablen:

        private double var1, var2;

        die dann "gefüllt" werden.

        Plus den Operator..

        Aber wenn ich nun: 1+3-2+434-12 rechnen möchte habe ich ja 5 Variablen und 4 operatoren..

        Wie könnte ich das lösen?

        Danke!

        Ben
        Zuletzt editiert von BensChip; 10.09.2009, 13:34.

        Comment


        • #5
          Hallo,

          ein Taschenrechner eignet sich hervorragend um einige Techniken kennen zu lernen:



          mfG Gü
          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

          Comment


          • #6
            Zusatzprüfung: bei Division ungleich 0
            Es gibt v.a. bei Integern noch interessante Verhaltensweisen die sich die dadurch begründen dass beim "Überlauf" einfach mit der kleinsten möglichen Zahl weitergerechnet wird.

            ZB ist int.MaxValue * 2 = -2.
            Auf solche Sachen muss man auch noch aufpassen


            mfG Gü
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #7
              Oha wird also doch umfangreicher

              Danke für die Hilfe!

              Comment


              • #8
                Aber wenn ich nun: 1+3-2+434-12 rechnen möchte habe ich ja 5 Variablen und 4 operatoren..
                Kommt drauf an was du alles in deinem taschenrechner unterstützen willst.
                Wenn dir erst mal Klammern und Punkt vor Strichrechnung egal sind kommst du mit 2 Operanden(Variablen)+Operator aus. Da du ja sobald diese gefüllt den Ausdruck sofort ausrechnen kannst. Danach sind Operator und ein Operand(Variable) wieder frei.

                Comment


                • #9
                  Ach ja richtig.. Doch so einfach
                  Danke!

                  Comment


                  • #10
                    Hallo,
                    Oha wird also doch umfangreicher
                    Man kann auch woanders mal schauen, wie es gemacht werden kann: http://www.codeproject.com/KB/cs/vivounicorn.aspx
                    MfG
                    Cheat-Sheets for Developers / Programming Quotes

                    Comment


                    • #11
                      oh wow stimmt mit dem Strategy Muster lässt sich das wirklich sehr elegant lösen. Ist nur die Frage ob er sich auf dem Level auf dem er sich befindet schon mit Entwurfsmustern auseinander setzen kann/will.
                      Obwohl... je früher desto besser

                      Comment


                      • #12
                        mit dem Strategy Muster lässt sich das wirklich sehr elegant lösen.
                        Das wäre der erste Schritt. Dann mit dem Command-Pattern eine Undo/Redo machen und man hat viel gelernt

                        Die Strategie kann in C# auch mit Delegaten rechte einfach umgesetzt werden. Entspricht zwar nicht ganz dem GoF-Gedanken, aber wenns möglich warum soll es nicht genutzt werden. Muster sollen nur als Ideenlieferant dienen und nicht als 1:1 Vorlage zum Kopieren/Abschreiben.

                        mfG Gü
                        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                        Comment

                        Working...
                        X