AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Erste Versuche zu Parsen um mit String zu rechnen
Thema durchsuchen
Ansicht
Themen-Optionen

Erste Versuche zu Parsen um mit String zu rechnen

Ein Thema von MarquiseDeSade · begonnen am 8. Jun 2007 · letzter Beitrag vom 10. Jun 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von MarquiseDeSade
MarquiseDeSade

Registriert seit: 18. Apr 2007
Ort: Mainz
55 Beiträge
 
Turbo Delphi für Win32
 
#1

Erste Versuche zu Parsen um mit String zu rechnen

  Alt 8. Jun 2007, 14:41
Hallo DP´ler

Eine kurze Beschreibung was ich mir Überlegt habe. Ich möchte einen Taschenrechner so programmieren, dass der User durch klicken auf Buttons willkürliche Rechnungen durchführen kann.

Zum Beispiel:
2+22+4-258*635/741 (Die Eingabe erfolgt über Buttons, sowohl die Zahlen als auch Operatoren)

Nun besteht ja das Problem Punkt vor Strich.

Mein Ansatz:

Delphi-Quellcode:
var
  Form1: TForm1;

  speicher :string;
  plus,minus,mal,geteilt :integer;

...
...
...

{Button für die Rechenarten}
{-----------------------------------------------------------}
procedure TForm1.Button_plusClick(Sender: TObject);

begin
  speicher:=speicher+edit1.text+'+';
  edit1.Text:='';
end;
procedure TForm1.Button_minusClick(Sender: TObject);
begin
  speicher:=speicher+edit1.text+'-';
  edit1.Text:='';
end;
procedure TForm1.Button_malClick(Sender: TObject);

begin
  speicher:=speicher+edit1.text+'*';
  edit1.Text:='';
end;
procedure TForm1.Button_geteiltClick(Sender: TObject);
begin
  speicher:=speicher+edit1.text+'/';
  edit1.Text:='';
end;
{-----------------------------------------------------------}

...
...
...
procedure TForm1.Button_gleichClick(Sender: TObject);

begin
speicher:=speicher+edit1.text;

//Übergabe der Position des Zeichens im String
plus:=pos('+',speicher);
minus:=pos('-',speicher);
mal:=pos('*',speicher);
geteilt:=pos('/',speicher);
Nun zu meinen Problemen:
Ich habe leider erst sehr wenige Grundkenntnisse und ich komme hier nicht weiter. Eigentlich habe ich vor, den String bis zu den jeweiligen Operatoren zu zerlegen und ihn als Integer einer Variable zu übergeben. Pos liefert mir aber nur das erste übereinstimmende Zeichen wieder. Wie löse ich also das Problem, wenn in einem String mehrere Plus-Zeichen auftauchen.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: Erste Versuche zu Parsen um mit String zu rechnen

  Alt 8. Jun 2007, 14:47
Such mal nach Hier im Forum suchenparsen oder Hier im Forum suchenParser da solltest du einiges finden

Du solltest zuerst einen binären Baum erstellen, der den Ausdrück repräsentiert, den kannst du dann ner (rekursieven) Funktion übergeben, die dir dann das Ergebnis ausrechnet
  Mit Zitat antworten Zitat
Benutzerbild von Jakob Ullmann
Jakob Ullmann

Registriert seit: 17. Feb 2007
218 Beiträge
 
Lazarus
 
#3

Re: Erste Versuche zu Parsen um mit String zu rechnen

  Alt 8. Jun 2007, 14:51
Nimm doch die Kompo TParser (so heisen sicherlich viele) - die findest du bei www.torry.net.
Jakob
  Mit Zitat antworten Zitat
Benutzerbild von MarquiseDeSade
MarquiseDeSade

Registriert seit: 18. Apr 2007
Ort: Mainz
55 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Erste Versuche zu Parsen um mit String zu rechnen

  Alt 8. Jun 2007, 15:36
Zitat von jfheins:
Such mal nach Hier im Forum suchenparsen oder Hier im Forum suchenParser da solltest du einiges finden

Du solltest zuerst einen binären Baum erstellen, der den Ausdrück repräsentiert, den kannst du dann ner (rekursieven) Funktion übergeben, die dir dann das Ergebnis ausrechnet


Ich finde, dass die Ergebnisse der Suchfunktion mir als Anfänger nicht genug her geben, um mein Problem davon abzuleiten und eine Lösung zu finden...

Gibt es vielleicht einen guten Beitrag, der einem die Grundlagen vermittelt? Würde ich mit Pos und Copy dem Problem Herr werden ? Ich probiere schon ein bissl rum, aber zufrieden bin ich noch nicht....



Zitat von Jakob Ullmann:
Nimm doch die Kompo TParser (so heisen sicherlich viele) - die findest du bei www.torry.net.
Ich lerne nichts, wenn ich mir fertige Sachen irgendwo herhole und sie dann noch nichtmal verstehe
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Erste Versuche zu Parsen um mit String zu rechnen

  Alt 8. Jun 2007, 15:39
Warst du schonmal auf dieser Seite?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von MarquiseDeSade
MarquiseDeSade

Registriert seit: 18. Apr 2007
Ort: Mainz
55 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Erste Versuche zu Parsen um mit String zu rechnen

  Alt 8. Jun 2007, 15:54
Jap, war ich schon.... fand ich jetzt nicht so überragend

Ich merke schon, es wird besser sein, ein wenig rumzuprobieren und dann konkrete Probleme zu posten.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Erste Versuche zu Parsen um mit String zu rechnen

  Alt 8. Jun 2007, 15:58
Zitat von MarquiseDeSade:
Jap, war ich schon.... fand ich jetzt nicht so überragend
Echt? Das ist doch super erklärt!

Nimm dir doch einfach mal die paar Zeile Quellcode unter Grundprinzip (damit geht allerdings nur + und *) und schau mal im Debugger was passiert.

Die einzige Hürde, die du nehmen musst sind "rekursive Funktionen", also Funktionen die sichselber aufrufen (im Beispiel: "TermToReal")
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von MarquiseDeSade
MarquiseDeSade

Registriert seit: 18. Apr 2007
Ort: Mainz
55 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Erste Versuche zu Parsen um mit String zu rechnen

  Alt 8. Jun 2007, 16:47
Huhu

Mh, ich stoß hier bei dem Beispiel an meine Grenzen. Ich glaub ich such mir eine andere Möglichkeit, denn das Parsen scheint nicht mein Ding zu sein... zumal mir das alles zu aufwenig erscheint. Es muss doch eine einfachere Möglichkeit geben !!
  Mit Zitat antworten Zitat
Gremlin

Registriert seit: 18. Apr 2006
Ort: Im Süden
176 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Erste Versuche zu Parsen um mit String zu rechnen

  Alt 8. Jun 2007, 17:12
Die Seite fand ich relativ interessant und passt zu deinem Thema

Hier gehts lang


a) Auch wenn du es am Anfang vielleicht nicht verstehst, dann lies es nochmal durch
b) goto a)
Gruss Gremlin
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#10

Re: Erste Versuche zu Parsen um mit String zu rechnen

  Alt 8. Jun 2007, 17:18
Wenn du wirklich nur die vier Grundrechenarten und keine Klammern unterstützen willst, existiert in der Tat eine einfache Möglichkeit ohne Lexer oder Baum. Du benötigst eine Funktion
Parse(aTerm: string): Double bzw. Int In dieser Funktion suchst du nach einem Operator, in dieser Reihenfolge: +,-,*,/. Ist die Suche erfolgreich, rufst du deine Funktion rekursiv mit den Teiltermen links und rechts vom Operator auf und verbindest die Ergebnisse durch den Operator. Für + also zum Bleistift:
Delphi-Quellcode:
Result := Parse(TermLinks) + Parse(TermRechts);
// Exit;
Sobald kein Operator mehr gefunden wurde, muss der restliche Term eine Zahl sein (oder eben nicht -> Exception).
Sebastian
Moderator in der EE
  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 21:51 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