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.