All pastes #752590 Raw Edit

Unbenannt

public text v1 · immutable
#752590 ·published 2007-10-28 15:23 UTC
rendered paste body
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.