Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
56
Добавлен:
30.03.2015
Размер:
11 Кб
Скачать
unit Unit3;

interface

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

type
  TForm3 = class(TForm)
    Edit1: TEdit;
    OK: TButton;
    Button2: TButton;
    del: TSpeedButton;
    tabl: TStringGrid;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    plus: TSpeedButton;
    umn: TSpeedButton;
    nul: TBitBtn;
    one: TBitBtn;
    skobl: TButton;
    skobr: TButton;
    Enter: TButton;
    procedure Button2Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure tablClick(Sender: TObject);
    procedure plusClick(Sender: TObject);
    procedure umnClick(Sender: TObject);
    procedure OKClick(Sender: TObject);
    procedure delClick(Sender: TObject);
    procedure nulClick(Sender: TObject);
    procedure oneClick(Sender: TObject);
    procedure skoblClick(Sender: TObject);
    procedure skobrClick(Sender: TObject);
    procedure EnterClick(Sender: TObject);
    procedure Ent(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;
  kor,kop:array [1..50] of integer;
  ur:array [0..21,0..21] of boolean;
  oper:array [0..21,0..50] of integer;
  s,ns,p,np:array [0..21,0..21] of integer;
  ki,jj,ik,ii,n,m,i,j,k,k1,k2,k3,k4,k5,cod1,nur,per,op,inv,numscob:integer;
  usl1,open:boolean;
  y:TObject;
  ne,ne1:string;
  st:TListBox;
implementation

uses Unit1,Unit2;

{$R *.dfm}

procedure TForm3.Button2Click(Sender: TObject);
begin
for i:=0 to 49 do
  oper[form1.mmOutput.ItemIndex,i]:=kop[i+1];
form3.Close;
end;

procedure TForm3.FormActivate(Sender: TObject);
begin
ne:=form1.mmOutput.Items[form1.mmOutput.ItemIndex];
form3.Caption:='Ввод функции '+ne[1]+ne[2];
if unit1.uslD then
begin
k:=0;
k1:=-1;
k2:=0;
k3:=-1;
inv:=1;
for i:=0 to 11 do
begin
if tabl.Cells[i,0]<>'' then
  inc(k3);
if tabl.Cells[i,1]<>'' then
  begin
  inc(k);
  inv:=2;
  end;
end;
for i:=0 to k+k3 do
  begin
  inc(k1);
  tabl.Cells[k1,inv]:='n'+tabl.Cells[k1,k2];
  if i=11 then
    begin
    inc(inv);
    inc(k2);
    k1:=-1;
    end;
  end;
unit1.uslD:=false;
end;
per:=-1;
k5:=1;
n:=length(edit1.Text);
if n=3 then
begin
plus.Enabled:=false;
umn.Enabled:=false;
nul.Enabled:=true;
one.Enabled:=true;
tabl.Enabled:=true;
del.Enabled:=true;
skobl.Enabled:=true;
skobr.Enabled:=true;
ok.Enabled:=false;
enter.Enabled:=false;
end
else
begin
plus.Enabled:=true;
umn.Enabled:=true;
nul.Enabled:=false;
one.Enabled:=false;
tabl.Enabled :=false;
ok.Enabled:=false;
enter.Enabled:=false;
del.Enabled:=true;
skobl.Enabled:=true;
skobr.Enabled:=true;
end;
//if i=0 then
for i:=0 to 49 do
  begin
  kop[i+1]:=oper[form1.mmOutput.ItemIndex,i];
  //kor[i]:=0;
  end;
  ki:=0;
  numscob:=0;
for jj:=0 to 50 do
  if (oper[form1.mmOutput.ItemIndex,jj]>20)and(oper[form1.mmOutput.ItemIndex,jj]<100) then
   begin
   numscob:=oper[form1.mmOutput.ItemIndex,jj];
     if kor[ki]=numscob then
       dec(ki)
     else
       begin
       inc(ki);
       kor[ki]:=numscob;
       end;
   end;
i:=0;
if numscob=0 then
numscob:=21
else
inc(numscob);
//ki:=0;
end;

procedure TForm3.tablClick(Sender: TObject);
begin
if k1<>-1 then
begin
n:=tabl.Col;
m:=tabl.row;
if tabl.Cells[n,m]<>'' then
begin
ne:=Edit1.Text;
k:=length(ne);
if (i=0)and (k<>3) then
begin
repeat
inc(i);
until oper[form1.mmOutput.ItemIndex,i]=252;
oper[form1.mmOutput.ItemIndex,i]:=0;
end;
k:=1;
edit1.Text:=edit1.Text+tabl.Cells[n,m];


if ((m=1)or(m=3))and(inv=3) then
begin
oper[form1.mmOutput.ItemIndex,i]:=n+12;
inc(i);
end
else
begin
oper[form1.mmOutput.ItemIndex,i]:=n;
inc(i);
end;

if ((m=1)and(inv=1))or((m>1)and(inv=3)) then
begin
oper[form1.mmOutput.ItemIndex,i]:=250;
inc(i);
end;

plus.Enabled:=true;
umn.Enabled:=true;
nul.Enabled:=false;
one.Enabled:=false;
tabl.Enabled :=false;
enter.Enabled:=true;
end;
end;
end;

procedure TForm3.plusClick(Sender: TObject);
begin
ne:=Edit1.Text;
k:=length(ne);
if (i=0)and (k<>3) then
begin
repeat
inc(i);
until oper[form1.mmOutput.ItemIndex,i]=252;
oper[form1.mmOutput.ItemIndex,i]:=0;
end;
oper[form1.mmOutput.ItemIndex,i]:=240;
edit1.Text:=edit1.Text+'+';
plus.Enabled:=false;
umn.Enabled:=false;
nul.Enabled:=true;
one.Enabled:=true;
tabl.Enabled :=true;
enter.Enabled:=false;
inc(i);
end;

procedure TForm3.umnClick(Sender: TObject);
begin
ne:=Edit1.Text;
k:=length(ne);
if (i=0)and (k<>3) then
begin
repeat
inc(i);
until oper[form1.mmOutput.ItemIndex,i]=252;
oper[form1.mmOutput.ItemIndex,i]:=0;
end;
oper[form1.mmOutput.ItemIndex,i]:=230;
edit1.Text:=edit1.Text+'*';
plus.Enabled:=false;
umn.Enabled:=false;
nul.Enabled:=true;
one.Enabled:=true;
tabl.Enabled :=true;
enter.Enabled:=false;
inc(i);
end;

procedure TForm3.OKClick(Sender: TObject);
begin

if i<>0 then
begin
oper[form1.mmOutput.ItemIndex,i]:=252;
inc(op);
end;
form1.mmOutput.Items[form1.mmOutput.ItemIndex]:=Edit1.Text;
if op=Form1.mmOutput.Count then
open:=true;
if (open)and(Unit2.open)then
  begin
  Form1.bbOutputF.Caption:='Сброс';
  Form1.play.Enabled:=true;
  Form1.Next.Enabled:=true;
  Form1.f11.Enabled:=true;
  open:=False;
  Unit2.open:=false;
  end;

  
form3.Close;
end;

procedure TForm3.delClick(Sender: TObject);
begin
skobr.Enabled:=true;
skobl.Enabled:=true;
ne:=Edit1.Text;
k:=length(ne);
edit1.Text:=ne[1]+ne[2]+ne[3];
if (i=0)and (k<>3) then
begin
repeat
inc(i);
until oper[form1.mmOutput.ItemIndex,i]=252;
oper[form1.mmOutput.ItemIndex,i]:=0;
end;
if (ne[k]='0')or(ne[k]='I') then
begin
i:=i-1;
oper[form1.mmOutput.ItemIndex,i]:=0;
k:=k-1;
umn.Enabled:=false;
plus.Enabled:=false;
nul.Enabled:=true;
one.Enabled:=true;
tabl.Enabled :=true;
enter.Enabled:=false;
end
else
if (ne[k]='(')or(ne[k]=')') then
begin
i:=i-1;
oper[form1.mmOutput.ItemIndex,i]:=0;
k:=k-1;
ent(y);
if (ne[k]='(') then
begin
{dec(ki);
dec(numscob);
kor[ki]:=numscob;}
umn.Enabled:=false;
plus.Enabled:=false;
nul.Enabled:=true;
one.Enabled:=true;
tabl.Enabled :=true;
enter.Enabled:=true;
end;
if (ne[k]=')') then
begin
umn.Enabled:=true;
plus.Enabled:=true;
nul.Enabled:=false;
one.Enabled:=false;
tabl.Enabled :=false;
enter.Enabled:=false;
end;
end
else
if (ne[k]='+')or(ne[k]='*') then
begin
i:=i-1;
oper[form1.mmOutput.ItemIndex,i]:=0;
k:=k-1;
umn.Enabled:=true;
plus.Enabled:=true;
nul.Enabled:=false;
one.Enabled:=false;
tabl.Enabled :=false;
enter.Enabled:=true;
end
else
if ne[k-2]='n' then
begin
i:=i-1;
oper[form1.mmOutput.ItemIndex,i]:=0;
i:=i-1;
oper[form1.mmOutput.ItemIndex,i]:=0;
k:=k-3;
umn.Enabled:=false;
plus.Enabled:=false;
nul.Enabled:=true;
one.Enabled:=true;
tabl.Enabled :=true;
enter.Enabled:=false;
end
else
begin
if ne[k-3]='n' then
begin
i:=i-1;
oper[form1.mmOutput.ItemIndex,i]:=0;
k:=k-2;
end;
if ne[k-2]='S' then
k:=k-1;
if i<>0 then
begin
i:=i-1;
oper[form1.mmOutput.ItemIndex,i]:=0;
k:=k-2;
end;
umn.Enabled:=false;
plus.Enabled:=false;
nul.Enabled:=true;
one.Enabled:=true;
tabl.Enabled :=true;
enter.Enabled:=false;
end;

for j:=4 to k do
edit1.Text:=edit1.Text+ne[j];
end;

procedure TForm3.nulClick(Sender: TObject);
begin
ne:=Edit1.Text;
k:=length(ne);
if (i=0)and (k<>3) then
begin
repeat
inc(i);
until oper[form1.mmOutput.ItemIndex,i]=252;
oper[form1.mmOutput.ItemIndex,i]:=0;
end;
oper[form1.mmOutput.ItemIndex,i]:=100;
edit1.Text:=edit1.Text+'0';
plus.Enabled:=true;
umn.Enabled:=true;
nul.Enabled:=false;
one.Enabled:=false;
tabl.Enabled :=false;
enter.Enabled:=true;
inc(i);
end;

procedure TForm3.oneClick(Sender: TObject);
begin
ne:=Edit1.Text;
k:=length(ne);
if (i=0)and (k<>3) then
begin
repeat
inc(i);
until oper[form1.mmOutput.ItemIndex,i]=252;
oper[form1.mmOutput.ItemIndex,i]:=0;
end;
oper[form1.mmOutput.ItemIndex,i]:=200;
edit1.Text:=edit1.Text+'I';
plus.Enabled:=true;
umn.Enabled:=true;
nul.Enabled:=false;
one.Enabled:=false;
tabl.Enabled :=false;
enter.Enabled:=true;
inc(i);
end;

procedure TForm3.skoblClick(Sender: TObject);
begin
ne:=Edit1.Text;
k:=length(ne);
if (i=0)and (k<>3) then
begin
repeat
inc(i);
until oper[form1.mmOutput.ItemIndex,i]=252;
oper[form1.mmOutput.ItemIndex,i]:=0;
end;


oper[form1.mmOutput.ItemIndex,i]:=numscob;
edit1.Text:=edit1.Text+'(';
plus.Enabled:=false;
umn.Enabled:=false;
nul.Enabled:=true;
one.Enabled:=true;
tabl.Enabled :=true;
enter.Enabled:=false;
inc(ki);
kor[ki]:=numscob;
inc(numscob);
inc(i);
end;

procedure TForm3.skobrClick(Sender: TObject);
begin
ne:=Edit1.Text;
k:=length(ne);
if (i=0)and (k<>3) then
begin
repeat
inc(i);
until oper[form1.mmOutput.ItemIndex,i]=252;
oper[form1.mmOutput.ItemIndex,i]:=0;
end;




oper[form1.mmOutput.ItemIndex,i]:=kor[ki];
edit1.Text:=edit1.Text+')';
plus.Enabled:=true;
umn.Enabled:=true;
nul.Enabled:=false;
one.Enabled:=false;
tabl.Enabled :=false;
enter.Enabled:=true;
dec(ki);
inc(i);
end;

procedure TForm3.EnterClick(Sender: TObject);
begin
ki:=0;
for jj:=0 to 50 do
  if (oper[form1.mmOutput.ItemIndex,jj]>20)and(oper[form1.mmOutput.ItemIndex,jj]<100) then
   begin
   numscob:=oper[form1.mmOutput.ItemIndex,jj];
     if kor[ki]=numscob then
       dec(ki)
     else
       begin
       inc(ki);
       kor[ki]:=numscob;
       end;
   end;
if ki=0 then
begin
ik:=MessageDlg('Функция заданна корректно',MtInformation,[mbOk],0);
plus.Enabled:=false;
umn.Enabled:=false;
nul.Enabled:=false;
one.Enabled:=false;
tabl.Enabled :=false;
ok.Enabled:=true;
del.Enabled:=false;
skobr.Enabled:=false;
skobl.Enabled:=false;
enter.Enabled:=false;
ne:=Edit1.Text;
//form3.Caption:='Ввод функции '+ne;
end
else
begin
ik:=MessageDlg('Проверте скобки',MtError,[mbOk],0);
plus.Enabled:=false;
umn.Enabled:=false;
nul.Enabled:=false;
one.Enabled:=false;
tabl.Enabled :=false;
ok.Enabled:=false;
del.Enabled:=true;
end;
end;

procedure TForm3.Ent(Sender: TObject);
begin
  ki:=0;
for jj:=0 to 50 do
  if (oper[form1.mmOutput.ItemIndex,jj]>20)and(oper[form1.mmOutput.ItemIndex,jj]<100) then
   begin
   numscob:=oper[form1.mmOutput.ItemIndex,jj];
     if kor[ki]=numscob then
       dec(ki)
     else
       begin
       inc(ki);
       kor[ki]:=numscob;
       end;
   end;
if numscob=0 then
numscob:=21
else
inc(numscob);
end;

end.
Соседние файлы в папке Синтез4
  • #
    30.03.20154 Кб56Unit3.~dfm
  • #
    30.03.201511 Кб57Unit3.~pas
  • #
    30.03.201516 Кб56Unit3.dcu
  • #
    30.03.201551 б56Unit3.ddp
  • #
    30.03.20154 Кб56Unit3.dfm
  • #
    30.03.201511 Кб56Unit3.pas
  • #
    30.03.20154 Кб57Unit4.dcu
  • #
    30.03.201551 б56Unit4.ddp
  • #
    30.03.20152 Кб56Unit4.dfm
  • #
    30.03.2015504 б56Unit4.pas
  • #
    30.03.201551 б56Unit5.~ddp