Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem bei Additions-Parser (https://www.delphipraxis.net/127878-problem-bei-additions-parser.html)

J3ster 20. Jan 2009 16:12


Problem bei Additions-Parser
 
Hallo Leute,
ich muss für ein Schulprojekt einen Parser (offensichtlich in Delphi) programmieren. Dieser Parser soll zunächst einmal beliebig viele Additionen durchführen können, soll jedoch später so erweitert werden, dass alle Rechenarten unter Beachtung der Rechenregeln bearbeitet werden können. Allerdings habe ich mich schon in dieser Projektphase bei o.g. Problem festgehängt und ich finde den Fehler einfach nicht. Das große Problem ist, dass der erste und der letzte der eingegebenen Summanden vom Programm nicht mit in die Rechnung einbezogen werden.
Eure Hilfe wäre super.

Vielen Dank schon mal im Vorraus,
J3ster

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,StrUtils;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
term : string;
positioncounter, counter,I : integer;
position : array of integer;
summanden : array of real;
summe : real;

begin
  term:=Edit1.Text;
  SetLength(position,1);
  counter:=0;

  if Pos('+',term) <> 0 then
    begin
      position[counter]:=Pos('+',term);
      positioncounter:=position[counter];

      while PosEx('+',term,positioncounter+1)<>0 do
        begin
          counter:=counter+1;
          SetLength(position,counter+1);
          position[counter]:=PosEx('+',term,positioncounter+1);
          positioncounter:=position[counter];
        end;

      SetLength(Summanden,counter+1);

      Summanden[0]:= strtoint(copy(term,1,Position[0]-1));

      for I := 1 to counter -1 do
        begin
          Summanden[I]:= strtoint(copy(term,Position[I]+1,(Position[I+1]-Position[I]-1)));
        end;

      summe:=0;

      for I := 0 to counter do
        begin
          summe:=summe+summanden[I];
        end;

      Label1.Caption:=FloatToStr(summe);
    end;

end;

end.


// Der zweite und der letze Summand werden bei der Addition nicht einbezogen.

taaktaak 20. Jan 2009 16:32

Re: Problem bei Additions-Parser
 
mal so als Denkansatz...
Delphi-Quellcode:
while PosEx('+',term,positioncounter+1)<>0 do
        begin
          counter:=counter+1;
          SetLength(position,counter+1); // count=0 >> LängeNeu =1
hier müsste Länge=2 gesetzt werden, da du vor der while-Schleife ja schon einen Wert in das Array geschrieben hast...

// PS: Ein herzliches Willkommen in der DP!

Florian Hämmerle 20. Jan 2009 16:35

Re: Problem bei Additions-Parser
 
Vielleicht hilft dir das hier weiter:
Parser-Tutorial

mfg Flö

J3ster 20. Jan 2009 17:38

Re: Problem bei Additions-Parser
 
Vielen vielen Dank,

eure Antworten haben mir beide viel weiter geholfen.

Grüße,
J3ster

Florian Hämmerle 20. Jan 2009 17:41

Re: Problem bei Additions-Parser
 
Ich arbeite auch gerade an sowas.... Soll aber später ne kleine Scriptsprache werden...
Aber klein anfangen ist wichtig!!

Also übernimm dich nicht sondern mach alles schön nacheinander sonst gibts wahrscheinlich nur murks....

übrigens:
Delphi OpenGL hat zwei gute Tutorials zu Scriptsprachen. Das erste könnte auch für dich interessant sein. Mgl.weise auch das zweite...
DGL-tutorials

mfg Flö


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 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