Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
19
Добавлен:
30.03.2015
Размер:
10.56 Кб
Скачать
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.20153.98 Кб19Unit2.~dfm
  • #
    30.03.20154.97 Кб19Unit2.~pas
  • #
    30.03.201516.07 Кб19Unit3.dcu
  • #
    30.03.201551 б19Unit3.ddp
  • #
    30.03.20154.48 Кб19Unit3.dfm
  • #
    30.03.201510.56 Кб19Unit3.pas
  • #
    30.03.201551 б19Unit3.~ddp
  • #
    30.03.20154.48 Кб19Unit3.~dfm
  • #
    30.03.201510.52 Кб20Unit3.~pas
  • #
    30.03.20153.52 Кб19Unit4.dcu
  • #
    30.03.201551 б19Unit4.ddp