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.pngIst 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
-48ist 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)-(43))+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
-
-
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.pngIst genau das, was die anderen auch meinen...
Ansonsten hab ich das hier als gut befunden:
simplemathMoin 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ß