Rechnung in einem String
Übersicht

SatanBetreff: Rechnung in einem String |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mein Problem sieht so aus.
Ich habe einen String, in dem steht eine Rechnung, ZB: a$="2+(4*7)". Ist es irgendwie möglich die Rechnung jetzt zu berechnen, so das hier zB b=30 herauskommen würde? Hier ist nochmal ein BeispielCode zum Problem: Code: [AUSKLAPPEN] Global win = CreateWindow("Taschenrechner 1.0", 0, 0, 300, 400, 0)
canvas = CreateCanvas (0, 0, 300, 400, win) SetBuffer CanvasBuffer(canvas) a$="2+(4*7)" ;Hier jetzt etwas, mit dem ich die Rechnung im String a$ berechnen kann WaitKey() |
||
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
https://www.blitzforum.de/foru...ingrechner
-> Forumssuche benutzen! Edit: Nicht ganz das richtige... Besser: http://www.shadowturtle.de/sit...howcode=11 |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
Satan |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ohh... das is ja verdammt schwer... gibts da nich villeicht was etwas leichteres?
Trotzdem Danke ![]() |
||
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich könnte dir meine Rechenfunktion geben, die kann aber weder Klammern noch Punkt-vor-Strich. | ||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was du brauchst ist Instr![]() ![]() ![]() ![]() ![]() ![]() mfg ozzi |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
ComNik |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde so vor gehen/gehe so vor:
1. Den string anallysieren und Tokens erstellen. Beispiel: 5 + (10*2+3) Daraus wird Code: [AUSKLAPPEN] Token 5:digit Token +:operator Token (:operator Token 10:digit Token *:operator Token 2:digit Token +:operator Token 3:digit Token ):operator Daraus wird ein sytaxbaum erstellt. Hier muss punkt vor strich etc... beachtet werden. Also zu unserem beispiel: (pseudo...) Code: [AUSKLAPPEN] a = 10 * 2 b = 3 c = a + b d = 5 + c etc... Diese Form ist warum wichtig? Weil ein Interpreter nun keinerlei probleme hat das zu interpretieren und auszuführen. So einen Lexer zu erstellen ist aber ein bisschen umständlich. (aber nicht unmöglich ![]() Natürlich gibt es einfache varianten mit hilfe von string befehlen etc... Bei komplizierten Termen wird das aber ein ziemliches rumgehacke. lg ComNik |
||
WIP: Vorx.Engine |
![]() |
coolo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Lexer ist der leichteste Part eines solchen Systems ![]() Aber ich würde dir ein anderes und leichteres System vorschlagen. Da du hier keine Scriptsprache Programmieren willst sondern einen einfachen Stringrechner. Das Stichwort lautet Rekursion. Das heißt das der lange und komplizierte Term in kleinere "Aufgaben" zerteilt wird. Beispiel: 8+5*8 * hat eine höhere Priorität als + deswegen wird zuerst 5*8 gerechnet, dann steht dort 8+40 Jetzt wird 8+40 gerechnet 48 (5+5*(4-5))*89-100 Zuerst wird die innerste Klammer gesucht und ausgerechnet das wäre in diesem Fall 4-5 Nun sieht der Term folgends aus: (5+5*1)*89-100 (5+5)*89-100 10*89-100 890-100 790 ist das Ergebnis Dieses Verfahren kann man vergleichsweise einfach implementieren. Man muss nur auf den Operator vorang acht geben. |
||
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project! "Eigenzitate sind nur was für Deppen" -Eigenzitat |
![]() |
ComNik |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sorry, ich musste ja irgendwie zeit schinden bis coolo kommt und alle meine fehler beseitigt ![]() Wenn es um lexer, parser scriptsprachen geht ist er der richtige mann ähm junge. |
||
WIP: Vorx.Engine |
Satan |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
coolo hat Folgendes geschrieben: Der Lexer ist der leichteste Part eines solchen Systems
![]() Aber ich würde dir ein anderes und leichteres System vorschlagen. Da du hier keine Scriptsprache Programmieren willst sondern einen einfachen Stringrechner. Das Stichwort lautet Rekursion. Das heißt das der lange und komplizierte Term in kleinere "Aufgaben" zerteilt wird [...] Ja, auf diese idee bin ich auch gekommen, aber könntest du mir vllt mal den Anfang dafür aufschreiben? Denn ich habs mal ausprobiert, aber ich schaffs nich... (Bin noch ein Anfänger) Danke! |
||
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ein solcher Stringrechner lässt sich vergleichsweise einfach erstellen. Das einzige, womit du aufpassen musst, sind die einzelnen Datentypen, aber wenn du von vornherein alles mit Floats berechnest, wird der Code nicht übermässig kompliziert.
Der Trick besteht darin, die normale Darstellung von "2*3+5" in die sogenannte Postfixnotation umzuwandeln, welche dann so aussieht: "2 3 * 5 +". Diese Notation ist sehr einfach am Computer zu berechnen, weshalb eigentlich nur das Umwandeln Probleme bereiten dürfte. Durch eine Google - Suche findest du sicher genug Lektüre dazu - auf die Schnelle habe ich diese Seite gefunden, die das relativ gut erklärt. Wenn du den Postfixausdruck hast, geht die Berechnung dann wirklich einfach. Diese Seite erklärt die grundlegende Herangehensweise. @Nicdel: Ich schätze, du meintest das hier ![]() |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group