48240 (Программа–конструктор для построения МП–транслятора по его параметрам с последующей проверкой задаваемых пользователем цепочек), страница 4
Описание файла
Документ из архива "Программа–конструктор для построения МП–транслятора по его параметрам с последующей проверкой задаваемых пользователем цепочек", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "48240"
Текст 4 страницы из документа "48240"
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 (x0) 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.