![]() |
Mit Strings rechnen
Hallo,
ich will einen Rechner programmieren, mit dem man rechnen kann wenn eine einzige Eingabe in ein Editfeld macht. Also zum Beispiel '(3+4)*5'. Ich habe mir geacht mit OnKeyPress koennte ich jeder Rechenzeichen als String erfassen, und jede Ziffernfolge als Zahl. Bespiel '33+4': a[1] := 33; s[1] := +; a[2] := 4; Wie rechne ich das jetzt? mfG |
Re: Mit Strings rechnen
such mal hier im forum mit dem stichwort "parser"
|
Re: Mit Strings rechnen
Hi,
Daraus werd ich nicht schlau... 1000Artikel und meines Erachtgens nach keiner der meine Frage beantwortet. Kannst du es mir nicht selber beantworten? Danke! mfG |
Re: Mit Strings rechnen
Zitat:
Ich verwende wenn ich sowas brauche den ![]() Selbst so etwas zu programmieren ist wie du, wenn du dir das ansiehst, wohl merkst sehr aufwändig und es gibt kein einfaches "Rezept" dafür. Als erstes musst du den String auftrennen. Dann Operanden erstellen, usw. usw. Wenns einfach sein soll, such mal nach ![]() ![]() Danach musst du dann die Ergebnisse auswerten. z.b. mit einer Case Struktur. Alles in allem wird das ein bisschen dauern. Trotzdem viel Erfolg. |
Re: Mit Strings rechnen
Verstehst du mich falsch oder ich dich.
Der String ist aufgespaltet, nur wie bekomme ich den String '+' in die rechnung //ergebnis := 33 + 4// ?? mfG |
Re: Mit Strings rechnen
Hallo,
>> '33+4': a[1] := 33; s[1] := +; a[2] := 4; i s[1]='+' then begin ergebnis:= IntToStr(a[1]) + IntToStr(a[2]); end; Unter Delphi kannsz du sowas nicht einfach "selber rechnen". Das musst du tippern. Das Problem ist aber, dass z.B. 33+4*5 nicht in der Reihenfolge deines "Parsens" berechnet werden darf(Punkt vor Strich). Ein Parser zerlegt diesen Strin etwa PLUS(33, MUL(4,5)) und berechnet von Innen nach Aussen. Intern ist es ein Baum, der hier bei MUL anfängt als Knoten. Wenn du das nicht verstehst, les einen der Artikel, wenn du den nicht verstehst, nen anderen ;) (naja, tschulligung) Ist halt nicht so einfach. Heiko |
Re: Mit Strings rechnen
Hi,
und es gibt kein Befehl, der sowas wie A:= a[1] s[1] a[2]; oder A:= a[1] strtorechenzeichen(s[1]) a[2]; macht? mfG |
Re: Mit Strings rechnen
Hallo,
nein. kann man aber einfach selber schreiben. Nehmen wir mal an, dass wir nur Integer haben.
Delphi-Quellcode:
Man könnte hier mit Pascal-Scripting arbeiten (soehe google).
function TueFeinRechne(const Wert1, Was, Wert2: String): Integer;
begin Result:= 0; if Was='+' then begin Result:= StrToInt(Wert1)+StrToInt(Wert2); end; if Was='-' then begin Result:= StrToInt(Wert1)-StrToInt(Wert2); end; usw. end; Damit kann Pascal-Quelltext kompiliert werden. Heiko |
Re: Mit Strings rechnen
Und wie stellst du dir das vor, dass es auch geht, wenn jemand:
sqrt((23-2)^2+725) eintippt? mfG |
Re: Mit Strings rechnen
Lol
Nein nicht das ich wüste. Wobei es wirklich nicht schwer ist so einen Parser zu schreiben. Wenn du Dich ein bischen Mit Gramatiken auskennst würde ich dir auch noch den Rekursive Decent Parser Empfehlen. Der ist echt einfach implementiert und wenns nicht all zu Schnell gehen mus reicht der durchaus... sollte glatt mal ein Sample mit so was baun ;). Generell kannst du aber Jeden ausdruck Parsen . Du solltest dir vielleicht mal meinen ![]() Da gibst du deinen String ein und der Gibt dir die TokenListe zurück. Das kannst du dann schon viel besser verarbeiten ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz