Einzelnen Beitrag anzeigen

J3ster

Registriert seit: 20. Jan 2009
2 Beiträge
 
#1

Problem bei Additions-Parser

  Alt 20. Jan 2009, 17:12
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.
  Mit Zitat antworten Zitat