Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Топ:
Методика измерений сопротивления растеканию тока анодного заземления: Анодный заземлитель (анод) – проводник, погруженный в электролитическую среду (грунт, раствор электролита) и подключенный к положительному...
Комплексной системы оценки состояния охраны труда на производственном объекте (КСОТ-П): Цели и задачи Комплексной системы оценки состояния охраны труда и определению факторов рисков по охране труда...
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного хозяйства...
Интересное:
Средства для ингаляционного наркоза: Наркоз наступает в результате вдыхания (ингаляции) средств, которое осуществляют или с помощью маски...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Дисциплины:
2020-04-01 | 117 |
5.00
из
|
Заказать работу |
|
|
Для ввода данных в ПП в большинстве случаев организовывается выбор вводимых данных из возможных. На экран выводится форма содержание которой зависит от вводимых ею данных, она имеет выпадающий список, содержащий данные, перед занесением этих данных в распознаватель организуется предпроцессор который определяет возможен ли ввод. Таким способом осуществляется ввод новых символов, магазинных символов(они добавляются если не содержатся в автомате), начального состояния автомата(символы вводимые пользователем должны содержаться в автомате). В случае разбора цепочек, также организовывается предпроцессор в котором происходит проверка принадлежности вводимых данных алфавиту входных символов. Во всех случаях возникновения ошибок появляется окно содержащее сообщение об ошибке.
Руководство пользователя, инструкция по инсталляции
Требования к аппаратным средствам
Для эффективной работы спроектированного программного комплекса необходимо выполнение следующих требований к аппаратному и программному обеспечению:
· CPU не ниже Pentium-133
· 8 Mb оперативной памяти (желательно 32 Mb)
· минимум 1Mb свободного дискового пространства
· 1 Mb видеопамяти
· операционная система Windows 95/98/2000/NT.
· Манипулятор мышь.
Приложение было тестировано на следующих конфигурациях:
· Intel Celeron 400, 32 Mb RAM, Windows 98
· Intel Pentium || Celeron 266, 64 Mb RAM, Windows 98
· AMD K6 || 333, 64 Mb RAM, Windows NT 4.0
· Intel Pentium 166, 16 Mb RAM, Windows 95
Вывод
В ходе разработки курсового проекта я ближе ознакомился с теорией МП- трансляторов, научился писать программы - конструкторы для построения МП – транслятора по его параметрам с последующей проверкой задаваемых цепочек, закрепил знания по системному программированию. Разрабатывая программу, я научился применять знания дискретной математике, что облегчает работу программиста.
|
В дальнейшем хотелось бы улучшить программный продукт -улучшить интерфейс.
Листинг программы:
unit DmKurs;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
MPunit, ComCtrls, ToolWin, Menus, StdCtrls, ExtCtrls, Grids,Addun,
ActnList, ImgList, ExtDlgs, Buttons, ButtonComps, RunText;
type
TMainPr = class(TForm)
StatusBar1: TStatusBar;
MainMenu1: TMainMenu;
pc1: TPageControl;
File1: TMenuItem;
Help1: TMenuItem;
New1: TMenuItem;
Save1: TMenuItem;
Load1: TMenuItem;
N1: TMenuItem;
Exit1: TMenuItem;
tsEdit: TTabSheet;
ActionList1: TActionList;
alCreateNew: TAction;
ImageList1: TImageList;
tsCheck: TTabSheet;
dgMP: TDrawGrid;
alRepaint: TAction;
ToolBar1: TToolBar;
tbNew: TToolButton;
alSave: TAction;
sd1: TSaveDialog;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
alLoad: TAction;
od1: TOpenDialog;
pm: TPopupMenu;
New2: TMenuItem;
Save2: TMenuItem;
Load2: TMenuItem;
N2: TMenuItem;
Exit2: TMenuItem;
spd1: TSavePictureDialog;
tsAdd: TTabSheet;
alExit: TAction;
tlSavePicture: TToolButton;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
alHelp: TAction;
ToolButton3: TToolButton;
N6: TMenuItem;
N7: TMenuItem;
GroupBox2: TGroupBox;
buSymbAdd: TButton;
buDelSymb: TButton;
buClear: TButton;
Panel6: TPanel;
Label15: TLabel;
buNextStep: TButton;
lbStep: TListBox;
rgCheck: TRadioGroup;
buCheck: TButton;
plStData: TPanel;
buStopTrace: TBitBtn;
Panel1: TPanel;
lbResult: TLabel;
plChain: TEdit;
GroupBox1: TGroupBox;
mmNotes: TMemo;
Panel3: TPanel;
Label9: TLabel;
sgStartMag: TStringGrid;
buStartAdd: TButton;
buStartDel: TButton;
Panel4: TPanel;
Label10: TLabel;
cbStartingSt: TComboBox;
Panel5: TPanel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
cbStEd: TComboBox;
cbMagStEd: TComboBox;
cbSymbEd: TComboBox;
buCellEdit: TButton;
Panel2: TPanel;
Panel7: TPanel;
Label1: TLabel;
Label4: TLabel;
Label6: TLabel;
Label8: TLabel;
lbStNum: TLabel;
lbFirstSt: TLabel;
Label7: TLabel;
sgMagList: TStringGrid;
sgSymbList: TStringGrid;
sgMagStart: TStringGrid;
Panel8: TPanel;
sgGood: TStringGrid;
Label5: TLabel;
rgWhatAdd: TRadioGroup;
Panel9: TPanel;
Button1: TButton;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure tsAddShow(Sender: TObject);
procedure tsEditShow(Sender: TObject);
procedure buStartAddClick(Sender: TObject);
procedure buStartDelClick(Sender: TObject);
procedure alCreateNewExecute(Sender: TObject);
procedure cbStartingStChange(Sender: TObject);
procedure buCellEditClick(Sender: TObject);
procedure sgGoodSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure buSymbAddClick(Sender: TObject);
procedure buDelSymbClick(Sender: TObject);
procedure buClearClick(Sender: TObject);
procedure buCheckClick(Sender: TObject);
procedure PaintMP;
procedure ChangeGood(i,j:integer);
procedure dgMPDrawCell(Sender: TObject; ACol, ARow: Integer;
|
Rect: TRect; State: TGridDrawState);
procedure alRepaintExecute(Sender: TObject);
procedure dgMPTopLeftChanged(Sender: TObject);
procedure dgMPSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure alSaveExecute(Sender: TObject);
procedure alLoadExecute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure buStopTraceClick(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure Step;
procedure SetTrace;
procedure buNextStepClick(Sender: TObject);
procedure alExitExecute(Sender: TObject);
procedure alHelpExecute(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainPr: TMainPr;
MP:TMPRasp;
Color1:Integer=clRed;
Color2:Integer=clWhite;
Color3:Integer=clYellow;
Color4:Integer=clFuchsia;
implementation
uses EditUn, AboutUn;
const CellSize=60;
LineEnd='¶';
drx=4;
dry=4;
Ready:boolean=false;
StepOver:boolean=false;
Num1=4;
TracePar:array [1..Num1] of String=
('Номер символа в строке: ',
'Символ: ',
'Текущее состояние: ',
'Верхний символ магазина: ');
SaveDir='Save';
PicturesDir='Pictures';
var DrawSt,DrawMg,DrawSmb:boolean;
tmp:TBitmap;
TempParams:TSaveMP;
initialdir:string;
St,tt,ss:word;
TraceResult:boolean;
SymbI:integer;
Chain:string;
{$R *.DFM}
procedure TMainPr.FormClose(Sender: TObject; var Action: TCloseAction);
var MDR:integer;
begin
if Ready then begin
MDR:=MessageDlg('Сохранить текущий МП-транслятор?',mtConfirmation,[mbYes,mbNo,mbCancel],0);
if MDR<>MrCancel then begin
if MDR=mrYes then alSaveExecute(Sender);
Mp.Del;
Mp.Free;
TMP.free;
Ready:=false;
end
else Action:=caNone;
end;
end;
procedure TMainPr.tsAddShow(Sender: TObject);
var i,j:byte;
begin
if Ready then begin
with mp.params do begin
sgGood.ColCount:=MagSymbNum+1;
sgGood.RowCount:=StateNum+1;
for j:=1 to StateNum do
sgGood.cells[0,j]:='S'+inttostr(j);
for i:=1 to MagSymbNum do begin
sgGood.cells[i,0]:=MagSymbols[i];
for j:=1 to StateNum do begin
if MP.Good[j,i] then
sgGood.Cells[i,j]:='Доп.'
else
sgGood.Cells[i,j]:='Отв.'
end;
end;
end;
lbStNum.caption:=inttostr(Mp.Params.StateNum);
lbFirstSt.caption:=inttostr(Mp.Params.StartingState);
sgMagList.colcount:=mp.Params.MagSymbNum;
sgSymbList.colcount:=mp.Params.SymbNum+1;
sgMagStart.ColCount:=length(mp.params.StartingMagState);
for i:=1 to mp.Params.MagSymbNum do begin
sgMagList.Cells[i-1,0]:=mp.Params.MagSymbols[i];
end;
if Mp.Params.SymbNum=0 then sgSymbList.Cells[0,0]:=LineEnd
else
for i:=1 to mp.Params.SymbNum do begin
sgSymbList.Cells[i,0]:=mp.Params.Symbols[i];
end;
for i:=1 to Length(mp.Params.StartingMagState) do begin
sgMagStart.Cells[i-1,0]:=mp.Params.StartingMagState[i];
end;
end;
end;
procedure TMainPr.tsEditShow(Sender: TObject);
var i:byte;
begin
if Ready then begin
With MP.Params do begin
sgStartMag.ColCount:=length(StartingMagState);
for i:=1 to Length(StartingMagState) do begin
sgStartMag.Cells[i-1,0]:=StartingMagState[i];
end;
if DrawSt then begin
cbStartingSt.items.clear;
for i:=1 to StateNum do begin
cbStartingst.items.add('S'+inttostr(i));
end;
cbStEd.items.clear;
cbStartingst.ItemIndex:=StartingState-1;
cbStartingst.text:=cbStartingst.items[cbStartingst.ItemIndex];
for i:=1 to StateNum do begin
cbStEd.items.add('S'+inttostr(i));
end;
cbStEd.ItemIndex:=StartingState-1;
cbStEd.text:=cbStEd.items[cbStEd.ItemIndex];
end;
if DrawMg then begin
cbMagStEd.items.clear;
for i:=1 to MagSymbNum do begin
cbMagStEd.items.add(MagSymbols[i]);
end;
cbMagStEd.text:=cbMagStEd.items[0];
end;
if DrawSmb then begin
cbSymbEd.items.clear;
for i:=1 to SymbNum do begin
cbSymbEd.items.add(Symbols[i]);
|
end;
cbSymbEd.text:=cbSymbEd.items[0];
end;
end;
DrawSt:=false;
DrawMg:=false;
DrawSmb:=false;
end;
end;
procedure TMainPr.buStartAddClick(Sender: TObject);
var MR:word;
begin
if ready then begin
WhatAdd:=MgA;
Send:=copy(Mp.Params.MagSymbols,2,Length(Mp.Params.MagSymbols));
MR:=Adding.ShowModal;
if MR=100 then begin
MP.Params.StartingMagState:=Mp.Params.StartingMagState+res;
end;
tsEdit.Hide;
tsEdit.Show;
end;
end;
procedure TMainPr.buStartDelClick(Sender: TObject);
begin
if ready then begin
if length(Mp.Params.StartingMagState)>1 then begin
Mp.Params.StartingMagState:=
copy(Mp.Params.StartingMagState,1,Length(Mp.Params.StartingMagState)-1);
end;
tsEdit.Hide;
tsEdit.Show;
end;
end;
procedure TMainPr.alCreateNewExecute(Sender: TObject);
label 1;
var c:word;
begin
if not ready then begin
Ready:=true;
1: MP:=TMPRasp.Create;
lbResult.Caption:='';
mmNotes.Clear;
Mp.Init;
tsAdd.Hide;
tsAdd.show;
DrawSt:=true;
DrawMg:=true;
DrawSmb:=true;
TMP:=TBitmap.create;
mmNotes.text:='';
plChain.Text:='';
dgMP.DefaultColWidth:=CellSize;
dgMP.DefaultRowHeight:=CellSize;
paintMP;
end
else begin
c:=MessageDlg('Сохранить файл?',mtConfirmation,[mbYes,mbNo,mbCancel],0);
case c of
mrYes: begin
alSaveExecute(Sender);
goto 1;
end;
mrNo: begin
goto 1;
end;
mrCancel: begin
;
end;
end;
end;
end;
procedure TMainPr.cbStartingStChange(Sender: TObject);
begin
if ready then begin
if cbStartingSt.ItemIndex<>-1 then
Mp.Params.StartingState:=cbStartingSt.ItemIndex+1;
end;
end;
procedure TMainPr.buCellEditClick(Sender: TObject);
var MR:integer;
begin
if ready then begin
ii:=cbStEd.ItemIndex+1;
if length(trim(cbMagStEd.text))=1 then
jj:=mp.MagSymbPos(cbMagStEd.text[1]);
if length(trim(cbSymbEd.text))=1 then
kk:=mp.SymbPos(cbSymbEd.text[1]);
if (ii>0) and (jj>0) and (kk>0) then begin
Mr:=Editing.ShowModal;
if mr=111 then begin
PaintMP;
mp.cell[ii,jj,kk]:=temp;
end;
end
else
MessageDlg('Неверно определена ячейка!'
,mtWarning,[mbOk],0);
end;
end;
procedure TMainPr.sgGoodSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
begin
ChangeGood(ARow,ACol);
sgGood.Hide;
sgGood.Show;
end;
procedure TMainPr.buSymbAddClick(Sender: TObject);
var MR:Integer;
begin
if ready then begin
WhatAdd:=SmbA;
Send:=copy(Mp.Params.Symbols,1,Length(Mp.Params.Symbols));
MR:=Adding.ShowModal;
if MR=100 then begin
plChain.Text:=plChain.Text+res;
lbResult.Caption:='';
end;
tsCheck.Hide;
tsCheck.Show;
end;
end;
procedure TMainPr.buDelSymbClick(Sender: TObject);
begin
plChain.Text:=copy(plChain.Text,1,Length(plChain.Text)-1);
lbResult.Caption:='';
end;
procedure TMainPr.buClearClick(Sender: TObject);
begin
plChain.Text:='';
lbResult.Caption:='';
end;
procedure TMainPr.buCheckClick(Sender: TObject);
var s:string;
i:integer;
ok:boolean;
begin
if Ready then begin
s:=plChain.Text;
if Length(s)=0 then begin
MessageDlg('Не введена цепочка',mtWarning,[mbOk],0);
plChain.SetFocus;
end
else begin
ok:=true;
for i:=1 to length(s) do begin
if pos(s[i],MP.Params.Symbols)=0 then ok:=false;
end;
if ok then begin
case rgCheck.ItemIndex of
0: begin
if Mp.CheckChain(s) then
s:='ДОПУСК '
else
s:='НЕТ ДОПУСКА';
MessageDlg(s+' цепочки',mtinformation,[mbOk],0);
lbResult.Caption:=S;
end;
1: begin
if plChain.Text<>'' then begin
tsEdit.enabled:=false;
bucheck.Enabled:=false;
buSymbAdd.Enabled:=false;
buDelSymb.Enabled:=false;
buClear.Enabled:=false;
|
buNextStep.Enabled:=True;
buStopTrace.Enabled:=True;
plChain.enabled:=false;
StepOver:=True;
plStData.Caption:='';
TempParams.Params:=Mp.Params;
TempParams.Good:=Mp.Good;
TempParams.cell:=Mp.Cell;
lbStep.Items.Clear;
With MP do begin
SymbI:=1;
TraceResult:=false;
State:=Params.StartingState;
Chain:=plChain.Text;
Stack.Init(Params.StartingMagState);
Ss:=SymbPos(Chain[SymbI]);
tt:=MagSymbPos(Stack.Top);
St:=State;
end;
SetTrace;
PaintMP;
end;
end;
end;
end
else begin
MessageDlg('Некоторые символы строки не соответствуют алфавиту',mtWarning,[mbOk],0);
plChain.SetFocus;
end;
end;
end;
end;
procedure TMainPr.PaintMP;
begin
if Ready then
with MP.Params do begin
dgMP.ColCount:=SymbNum+3;
dgMp.RowCount:=StateNum*MagSymbNum+1;
dgMP.hide;
dgMP.Show;
end;
end;
procedure TMainPr.dgMPDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var a:trect;
x,y,y1,y2:word;
s,D:string;
TC:TMPCell;
begin
if ready then begin
a.Left:=1;
a.Top:=1;
a.Right:=CellSize;
a.Bottom:=CellSize;
tmp.Height:=Cellsize;
tmp.width:=Cellsize;
x:=Acol-1;
y:=ARow;
with mp.params do begin
if y mod MagSymbNum = 0 then
y1:=y div MagSymbNum
else y1:=(y div MagSymbNum)+1;
if y mod MagSymbNum = 0 then
y2:=MagSymbNum
else y2:=y mod MagSymbNum;
with tmp.canvas do begin
if (Acol<2) or (Arow=0) then
Brush.Color:=Color1
else
if (x=Symbnum+1) then
Brush.Color:=Color4
else
Brush.Color:=Color2;
Rectangle(a);
if StepOver and (((y1=st) and (y2=tt) and (x=ss) and (x>0))
or ((y1=st) and (y2=tt) and (ss=0) and (x=Length(Symbols)+1)))
then begin
Brush.Color:=Color3;
Rectangle(a);
end;
if (Arow=0) and (acol>1) then begin
if (x<=SymbNum) then
TextOut((tmp.Width-TextWidth(Symbols[x])) div 2,
(tmp.Height-TextHeight(Symbols[x])) div 2,Symbols[x])
else TextOut((tmp.Width-TextWidth(LineEnd)) div 2,
(tmp.Height-TextHeight(LineEnd)) div 2, LineEnd);
end;
if (Acol=0) and (arow>0) then begin
TextOut((tmp.Width-TextWidth('S'+inttostr(y1))) div 2,
(tmp.Height-TextHeight('S')) div 2,'S'+inttostr(y1));
end;
if (Acol=1) and (arow>0) then begin
TextOut((tmp.Width-TextWidth(MagSymbols[y2])) div 2,
(tmp.Height-TextHeight(MagSymbols[y2])) div 2,MagSymbols[y2]);
end;
if (Acol>1) and (arow>0) then begin
if (x>SymbNum) then begin
if MP.Good[y1,y2] then s:='Доп.'
else s:='Отв.';
TextOut((tmp.Width-TextWidth(s)) div 2,
(tmp.Height-TextHeight(s)) div 2,s);
end
else begin
TC:=MP.Cell[y1,y2,x];
if tc.NextState=Err then begin
s:='Ошибка';
TextOut((tmp.Width-TextWidth(s)) div 2,
(tmp.Height-TextHeight(s)) div 2,s);
end
else begin
MoveTo(0,tmp.height div 3);
Lineto(tmp.width div 2,2*tmp.height div 3);
LineTo(tmp.width,tmp.height div 3);
Moveto(tmp.width div 2,2*tmp.height div 3);
Lineto(tmp.width div 2,tmp.height-14);
Moveto(0,tmp.height-14);
Lineto(tmp.width,tmp.height-14);
if MP.Cell[y1,y2,x].WithSymb then s:='П'
else s:='Д';
TextOut(tmp.Width-(TextWidth(s)+drx),
tmp.Height-(TextHeight(s)+dry)-14,s);
s:='S'+inttostr(TC.NextState);
TextOut(drx,tmp.Height-(TextHeight(s)+dry)-12,s);
s:=editing.cbWhatDo.Items[tc.mag];
if length(s)>1 then s:=copy(editing.cbWhatDo.Items[tc.mag],1,3)+'.';
TextOut((tmp.Width-(TextWidth(s)))div 2,dry+TextHeight(s),s);
s:=tc.Pushing;
TextOut((tmp.Width-(TextWidth(s)))div 2,dry,s);
D:=tc.Vihod;
TextOut((tmp.Width-TextWidth(D)) div 2,tmp.Height-14,D);
end;
end;
end;
end;
end;
dgMp.canvas.CopyRect(Rect,tmp.canvas,a);
end;
end;
procedure TMainPr.alRepaintExecute(Sender: TObject);
begin
if ready then begin
dgMP.Hide;
dgMp.Show;
end;
end;
procedure TMainPr.dgMPTopLeftChanged(Sender: TObject);
begin
PaintMP;
end;
procedure TMainPr.dgMPSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
var x,y,y1,y2:word;
Mr:integer;
begin
if not StepOver and Ready then begin
x:=Acol-1;
y:=ARow;
with mp.params do begin
if y mod MagSymbNum = 0 then
y1:=y div MagSymbNum
else y1:=(y div MagSymbNum)+1;
if y mod MagSymbNum = 0 then
y2:=MagSymbNum
else y2:=y mod MagSymbNum;
if (x>0) and (x<=SymbNum) and (Arow>0) then begin
ii:=y1;
jj:=y2;
kk:=x;
cbStEd.ItemIndex:=y1;
cbMagStEd.ItemIndex:=y2;
cbSymbEd.ItemIndex:=x;
cbStEd.text:=cbStEd.items[y1];
cbMagStEd.text:=cbMagStEd.items[y2];
cbSymbEd.text:=cbSymbEd.items[x];
Mr:=Editing.ShowModal;
if mr=111 then begin
mp.cell[ii,jj,kk]:=Result;
PaintMP;
end;
end
else
if (y>0) and (x=SymbNum+1) then begin
changeGood(y1,y2);
|
if pc1.ActivePageIndex=0 then begin
tsAdd.Hide;
tsAdd.Show;
end;
end;
end;
end;
end;
procedure TMainPr.ChangeGood(i, j: integer);
begin
if MessageDlg('Выдействительно хотите изменить состояние ячейки',mtConfirmation,[mbOk,mbCancel],0)=mrOk
then mp.SetGood(i,j);
PaintMP;
end;
procedure TMainPr.alSaveExecute(Sender: TObject);
var tmp:Shortstring;
begin
if ready then begin
TMP:= mmNotes.text;
sd1.initialdir:=initialdir+SaveDir;
if sd1.execute then begin
mp.savetofile(tmp,sd1.filename);
end;
end;
end;
procedure TMainPr.alLoadExecute(Sender: TObject);
label 1;
var c:integer;
note:string;
begin
od1.initialdir:=initialdir+savedir;
if ready then begin
c:=MessageDlg('Сохранить текущий МП-транслятор?',mtConfirmation,[mbYes,mbNo,mbCancel],0);
case c of
mrYes: begin
alSaveExecute(Sender);
end;
mrNo: begin
;
end;
mrCancel: begin
goto 1;
end;
end;
end;
if od1.Execute then begin
pc1.Enabled:=true;
Ready:=true;
MP:=TMPRasp.Create;
MP.LoadFromFile(od1.FileName,note);
mmNotes.text:=note;
plChain.Text:='';
tsAdd.Hide;
tsAdd.show;
tsEdit.Hide;
tsEdit.show;
tsCheck.hide;
tsCheck.show;
DrawSt:=true;
DrawMg:=true;
DrawSmb:=true;
TMP:=TBitmap.create;
dgMP.DefaultColWidth:=CellSize;
dgMP.DefaultRowHeight:=CellSize;
paintMP;
end;
1: end;
procedure TMainPr.FormCreate(Sender: TObject);
var s:string;
i:integer;
begin
Application.Title:='ОДМ. МП-транслятор';
s:=paramstr(0);
i:=length(s);
while s[i]<>'\' do
i:=i-1;
initialdir:=copy(s,1,i);
end;
procedure TMainPr.buStopTraceClick(Sender: TObject);
begin
if ready then begin
tsEdit.enabled:=true;
bucheck.Enabled:=true;
buSymbAdd.Enabled:=true;
buDelSymb.Enabled:=true;
buClear.Enabled:=true;
buNextStep.Enabled:=False;
buStopTrace.Enabled:=False;
plChain.enabled:=true;
StepOver:=False;
MP.Params:=TempParams.Params;
MP.Good:=TempParams.Good;
MP.cell:=TempParams.Cell;
if TraceResult then lbResult.caption:='ДОПУСК'
else lbResult.caption:='НЕТ ДОПУСКА';
PaintMP;
end;
end;
procedure TMainPr.FormResize(Sender: TObject);
begin
PaintMp;
end;
procedure TMainPr.SetTrace;
var i:integer;
s:string;
begin
plStData.caption:=MP.Stack.Data;
lbStep.Items.clear;
for i:=1 to Num1 do begin
case i of
1: begin
s:=inttostr(SymbI);
end;
2: begin
if SymbI>Length(Chain) then s:=LineEnd
else s:=Mp.Params.Symbols[ss];
end;
3: begin
s:='S'+inttostr(St);
end;
4: begin
s:=MP.Stack.Top;
end;
end;
lbStep.Items.Add(TracePar[i]+s);
end;
end;
procedure TMainPr.Step;
begin
With mp do begin
if (State<>Err) and (SymbI<=Length(Chain)) then begin
Ss:=SymbPos(Chain[SymbI]);
if Ss>0 then begin
tt:=MagSymbPos(Stack.Top);
St:=State;
With Cell[St,Tt,Ss] do begin
SetMag(Mag,Pushing);
State:=NextState;
if WithSymb then SymbI:=SymbI+1;
end;
Ss:=SymbPos(Chain[SymbI]);
tt:=MagSymbPos(Stack.Top);
St:=State;
end
Else State:=Err;
end;
If (State<>Err) and (SymbI=Length(Chain)+1) then begin
tt:=MagSymbPos(Stack.Top);
TraceResult:=Good[State,tt];
buNextStep.Enabled:=False;
end
else if State=Err then begin
lbResult.caption:='НЕТ ДОПУСКА';
buNextStep.Enabled:=False;
end;
end;
end;
procedure TMainPr.buNextStepClick(Sender: TObject);
var s:string;
begin
Step;
SetTrace;
PaintMp;
if buNextStep.Enabled=False then begin
if TraceResult then
s:='ДОПУСК '
else
s:='НЕТ ДОПУСКА';
MessageDlg(s+' цепочки',mtinformation,[mbOk],0);
lbResult.Caption:=S;
end;
end;
procedure TMainPr.alExitExecute(Sender: TObject);
begin
MainPr.Close;
end;
procedure TMainPr.alHelpExecute(Sender: TObject);
begin
Application.HelpCommand(HELP_finder,0);
end;
procedure TMainPr.N5Click(Sender: TObject);
begin
About.ShowModal;
end;
procedure TMainPr.Button1Click(Sender: TObject);
var MR:word;
begin
if ready then begin
with rgWhatAdd do begin
case ItemIndex of
0: begin WhatAdd:=St; Send:=''; end;
1: begin WhatAdd:=MgS; Send:=Mp.Params.MagSymbols; end;
2: begin WhatAdd:=Smb; Send:=Mp.Params.Symbols; end;
end;
end;
MR:=Adding.ShowModal;
if MR=100 then begin
with rgWhatAdd do begin
case ItemIndex of
0: begin
if not mp.AddState
then MessageDlg('Невозможно добавить новое состояние!'
,mtWarning,[mbOk],0);
DrawSt:=True;
end;
1: begin
if not mp.AddMagState(res)
then MessageDlg('Невозможно добавить новый магазинный символ!'
,mtWarning,[mbOk],0);
DrawMg:=True;
end;
2: begin
if not mp.AddSymb(res)
then MessageDlg('Невозможно добавить новый символ!'
,mtWarning,[mbOk],0);
DrawSmb:=True;
end;
end;
PaintMp;
end;
end;
tsEdit.Hide;
tsEdit.Show;
end;
end;
end.
|
|
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!