Gleichung zerlegen (Parsen) (mit punkt vor strich regel und Klammern)



  • Moin Moin Jungs! und Mädls natürlich auch

    Ich hab da ma so ein Problem

    Muss in C++ einen "Zeilenrechner" machen. Soll heißen:

    Man gibt in die cmdbox eine Gleichung ein (z.B. 2(2+8-3(5+5/2)(2-3)-4*3)+3** )

    Ihr seht schon was ich meine.
    Das Programm muss natürlich erst Klammern erkennen die Klammern Parsen dann PUnkt vor Strich können und auch ein 3(5+5) erkennen obwohl da eigentlich 3*(5+5) steht.

    Aber ich Spule mal zurück.

    Fürs erste würde mir ja schon reichen wenn ich erstmal hilfe bei Punkt vor Strich kriege... einfach nur Gedankenstöße keine kompletten Lösungen (Das überlasse ich dann doch mir 😕 )

    Bin noch nicht soooo lange bei C++ dabei und hab so meine schwierigkeiten das die Gleichung überhaupt erstmal mit nem Pointer oder so durchgegangen wird (oder wenn man das ganze mit Array lösen "muss" wie das gehen soll)

    Weiß auch garnicth recht wo ich Anfangen soll XD naja vielleicht habt ihr ja bisl was für mich 🙂

    PS: Über Parser hab ich mich informiert... das Open C++ Buch bin ich fleißig am Studieren.

    Danke

    FG 😉



  • Da gab es schonmal einen Thread, der dir vielleicht eine Hilfe oder zumindest ein Denkanstoß sein könnte:

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-218107-and-highlight-is-punkt+strich.html



  • Du musst den Ausdruck in einen Baum zerlegen. In den Blättern stehen die Ziffern, die durch die Operationen mit der höchsten Priorität zusammengefasset werden. In Deinem Beispiel also 5 und 2 aus (5+5/2). Dann werden die inneren Klammerausdrücke ausgewertet, usw. und zum Schluss 2 * (ganze Klammer).



  • Das geht mit der mittelbaren bzw. indirekten Rekursion.

    Gib mir eine E-mail adresse, und ich schick dir ein 9-Seitiges PDF darüber. Wir hatten das Thema im Unterricht, also kann ich dir im Notfall auch Codesnippets geben. Allerdings solltest du es generell selbst machen.

    Generell brauchst du nur die 3 Syntaxgraphen
    Ausdruck, Term, Faktor

    (kurze Info dazu: Würden alle Taschenrechner diese Methode anwenden, wären BELIEBIG VIELE Klammernebenen möglich!!!!!!!!!)

    mfg XaTrIxX

    edit: Tachyon spricht genau das selbe wie ich an, ist genau das selbe.



  • Für den ANfang reicht vermutlich das hier schon aus, damit du das Prinzip verstehst...:

    Hier ein Arbeitsblatt (ist zwar PASCAL, aber gleicher Ansatz):
    http://img3.imagebanana.com/img/3h7w5bk/rechnen.png

    Ist genau das, was die anderen auch meinen... 😉

    Ansonsten hab ich das hier als gut befunden:
    simplemath



  • Danke für eure ersten Antworten.

    Ich habe hier im Forum auch schon einiges gelesen zu diesem Thema trotzdem dachte ich mir eröffnest du mal ein neues ist ja einwenig anders (jedenfalls von der Zielsetzung) als die anderen es geschrieben haben ...

    Ich werde mir die Links durchgucken und sobald ich zuhause bin poste ich noch meine email-adresse hier rein wo du mir das PDF schicken kannst wär echt klasse

    Danke schonmal im VOrraus... ich hoffe bei Fragen kann ich mich weiterhin melden 🙂

    Gruß



  • Hab einfach mal so getan was ich jetzt schritt für SChritt tun würde wenn ich das Programm wäre...

    2*(2+8-3*(5+5/2)(2-3)-43)+3
    2
    (2+8-3*(5+5/2)-1-43)+3
    2
    (2+8-3*(5+2.5)-1-43)+3
    2
    (2+8-3*7.5-1-4*3)+3
    2*(2+8-22.5-1-43)+3
    2
    (2+8-22.5-1-12)+3
    2*(-25.5)+3
    -51+3
    -48

    ist doch irgendwas falsch... XD oder?

    und das mit dem Polnischen dings... bzw Aufbaumen...

    das wär ja dann *2 ((2+8-3*(5+5/2)(2-3)-43)+3)
    *2 ((2+8-3*(5+(5/2))(2-3)-(4
    3))+3)

    oder so... ach ich habs glaube noch nicht ganz verstanden 😃



  • Wie der Baum dann aussieht, wird in dem PDF auch abgehandelt. Seh zwar grad, die Lösung fehlt, aber anhand des PDF schaffst du die selber.

    Aber ohne E-Mail Adresse kann ich dir ja kaum helfen 😕



  • cplusplus@kwilkowski.de

    daaaaaaaa ist sie doch schon 🙂

    Danke schonmal



  • langeweile schrieb:

    Für den ANfang reicht vermutlich das hier schon aus, damit du das Prinzip verstehst...:

    Hier ein Arbeitsblatt (ist zwar PASCAL, aber gleicher Ansatz):
    http://img3.imagebanana.com/img/3h7w5bk/rechnen.png

    Ist genau das, was die anderen auch meinen... 😉

    Ansonsten hab ich das hier als gut befunden:
    simplemath

    Moin Ich bins... endlich Registreirt

    Das Symplemath ist genau das was ich brauche 🙂 Danke dafür nur versteh ich zusammenhängend fast nichts in dem Quellcode 😃 nur einzelne Phrasen ... nunja es funktioniert ! nicht schlecht

    Ich werde es weiterhin angucken vielleicht kriege ich Stück für Stück erleuchtung und kriege das dann auch selber hin 🙂

    "weiß garnicht wo ich anfangen soll ..."

    So rann an die Arbeit 😋

    Danke

    gruß


Anmelden zum Antworten