AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mit Strings rechnen

Ein Thema von naudoc · begonnen am 9. Mär 2007 · letzter Beitrag vom 9. Mär 2007
Antwort Antwort
Seite 1 von 2  1 2      
naudoc

Registriert seit: 7. Nov 2006
92 Beiträge
 
#1

Mit Strings rechnen

  Alt 9. Mär 2007, 15:36
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
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#2

Re: Mit Strings rechnen

  Alt 9. Mär 2007, 15:38
such mal hier im forum mit dem stichwort "parser"
  Mit Zitat antworten Zitat
naudoc

Registriert seit: 7. Nov 2006
92 Beiträge
 
#3

Re: Mit Strings rechnen

  Alt 9. Mär 2007, 15:59
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
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Mit Strings rechnen

  Alt 9. Mär 2007, 16:09
Zitat von naudoc:
Daraus werd ich nicht schlau... 1000Artikel und meines Erachtgens nach keiner der meine Frage beantwortet. Kannst du es mir nicht selber beantworten?
Wenns denn so einfach wäre..
Ich verwende wenn ich sowas brauche den Kompilierenden Matheparser von Dax. Der hat ein paar Fehlerchen drin, die man aber gut selbst entfernen kann(zumindest die auf die ich damals gestoßen bin)
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 Hier im Forum suchenPos und Hier im Forum suchenPosEx damit kannst du den String durchsuchen und ihn zerlegen.
Danach musst du dann die Ergebnisse auswerten. z.b. mit einer Case Struktur.

Alles in allem wird das ein bisschen dauern. Trotzdem viel Erfolg.
Benjamin
  Mit Zitat antworten Zitat
naudoc

Registriert seit: 7. Nov 2006
92 Beiträge
 
#5

Re: Mit Strings rechnen

  Alt 9. Mär 2007, 16:14
Verstehst du mich falsch oder ich dich.
Der String ist aufgespaltet, nur wie bekomme ich den String '+' in die rechnung //ergebnis := 33 + 4// ??

mfG
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Mit Strings rechnen

  Alt 9. Mär 2007, 16:24
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
Heiko
  Mit Zitat antworten Zitat
naudoc

Registriert seit: 7. Nov 2006
92 Beiträge
 
#7

Re: Mit Strings rechnen

  Alt 9. Mär 2007, 16:29
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Mit Strings rechnen

  Alt 9. Mär 2007, 16:33
Hallo,

nein. kann man aber einfach selber schreiben.
Nehmen wir mal an, dass wir nur Integer haben.

Delphi-Quellcode:
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;
Man könnte hier mit Pascal-Scripting arbeiten (soehe google).
Damit kann Pascal-Quelltext kompiliert werden.


Heiko
Heiko
  Mit Zitat antworten Zitat
naudoc

Registriert seit: 7. Nov 2006
92 Beiträge
 
#9

Re: Mit Strings rechnen

  Alt 9. Mär 2007, 16:35
Und wie stellst du dir das vor, dass es auch geht, wenn jemand:
sqrt((23-2)^2+725)
eintippt?

mfG
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#10

Re: Mit Strings rechnen

  Alt 9. Mär 2007, 16:37
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 Tokengenerator ansehn.

Da gibst du deinen String ein und der Gibt dir die TokenListe zurück. Das kannst du dann schon viel besser verarbeiten
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz