unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls; type TForm1 = class(TForm) GroupBox1: TGroupBox; Edit1: TEdit; Label1: TLabel; Button1: TButton; Button2: TButton; StringGrid1: TStringGrid; Button3: TButton; Label2: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; var elements: array of string[4]; a,b,count: integer; input:string; implementation {$R *.dfm} procedure prepare; begin count:=0; input:=form1.edit1.text; setlength(elements, 1); elements[0]:=''; end; procedure adjustform; begin form1.stringgrid1.rowcount:=count+1; form1.stringgrid1.height:=((count+1)*24)+15; if count > 2 then form1.Height:=((count+1)*24)+70 else form1.height:=165; end; procedure fillarray; var i:integer; begin for i := 1 to length(input) do if input[i] = ',' then begin count:=count+1; setlength(elements, count+1); elements[count] := ''; end{then} else elements[count]:=elements[count] + input[i]; end; procedure fillgrid; var i:integer; begin for i := 0 to count do form1.stringgrid1.cells[0,i]:=elements[i]; end; function stringinteger(instring: string): boolean; begin result:=strtointdef(instring,0)=strtointdef(instring,1); end; procedure TForm1.Button1Click(Sender: TObject); begin prepare; //setzt Variablen fillarray; //füllt dynamisches Array mit den //Strings zwischen den Kommas adjustform; //Passt Größe von Form1 und Stringgrid an fillgrid; //Füllt das Stringgrid mit den Werten aus dem Array button2.Enabled:=true; button3.enabled:=false; label2.caption := ''; end; procedure TForm1.Button2Click(Sender: TObject); var i,j:integer; begin for i := 0 to count do if stringinteger(elements[i]) = false //Prüft ob elements[i] ein Integer ist then begin //falls nicht muss es ein Rechenzeichen sein a:=strtoint(elements[i-2]); //und Berechnung wird gestartet b:=strtoint(elements[i-1]); case elements[i][1] of '+': a:=a+b; '-': a:=a-b; '*': a:=a*b; '/': a:=a div b; end;{case} elements[i-2]:=inttostr(a); //Berechneter Wert wird an passender Stelle ins for j := (i-1) to count do //Array eingefügt elements[j]:=elements[j+2]; //Arrayinhalte von hinten werden nachgerückt count:=count-2; break; //Schelife wird abgebrochen da immer nur ein end;{then} //Rechenzeichen verarbeitet werden soll for i:= 0 to count do begin //Stringgrid wird akutalisiert stringgrid1.cells[0,i]:=elements[i]; if count = 0 then begin button2.enabled := false; button3.enabled := true; end;{then} end;{for} adjustform; end; procedure TForm1.Button3Click(Sender: TObject); var i,j:integer; step:boolean; begin prepare; fillarray; step:=true; button1.Enabled:=true; button2.Enabled:=false; while step do for i := 0 to count do if stringinteger(elements[i]) = false then begin a:=strtoint(elements[i-2]); b:=strtoint(elements[i-1]); case elements[i][1] of '+': a:=a+b; '-': a:=a-b; '*': a:=a*b; '/': a:=a div b; end;{case} elements[i-2]:=inttostr(a); for j := (i-1) to count do elements[j]:=elements[j+2]; count:=count-2; step:=true; break; end{then} else step := false; label2.caption:=elements[0]; end; end.