p^.mem:=c^.mem+'->'+q^.mem //запоминаем прошлые операторы второго звена
end;
memolinessearch(p^.mem); //формируем временный ССО
p.s:=p.s+p^.next^.next^.s+p^.next^.s; //изменение звена с первым операндом
p^.next:=p^.next^.next^.next; //изменения связи звеньев
dispose(q); //удаление звена со знаком
dispose(c); //удаление звена со вторым операндом
p:=p^.next; //переход на следующее звено
end
else
p:=p^.next //переход на следующее звено
else
p:=p^.next; //переход на следующее звено
end else
Begin
p:=start; //возврат на первое звено
if p^.next<>nil then CreateTable(p, TurnNumber); //рекурсивный вызов для отображения следующего такта
exit;
end
else
p:=p^.next; //переход на следующее звено
p:=start; //возврат на первое звено
if p^.next<>nil then CreateTable(p, TurnNumber); //рекурсивный вызов для отображения следующего такта
end;
Function polska_zap(vvod:string):String;
var //Функция, перевода пример к виду ПОЗ
x,j,i,l:integer;
s,vivod:string;
s2:char;
begin
vivod:=vvod;
l:=length(Vivod);
for i:=1 to l-1 do //сдвиг умножений и делений враво
begin
if (vivod[i]='/')or(vivod[i]='*') then
begin
if vivod[i+1]='(' then
begin
x:=0;
j:=i;
repeat
s2:=vivod[j];
vivod[j]:=vivod[j+1];
j:=j+1;
if vivod[j]=')' then x:=x-1;
if vivod[j]='(' then x:=x+1;
vivod[j]:=s2;
until x=0;
end
else
if vivod[i+1]in['A'..'Z','a'..'z'] then
begin
j:=i;
s2:=vivod[j];
vivod[j]:=vivod[j+1];
vivod[j+1]:=s2;
end;
end;
end;
for i:=1 to l-1 do //сдвиг плюсов и минусов вправо
begin
if ((vivod[i]='+')or(vivod[i]='-'))and((vivod[i+1]<>'+')and(vivod[i+1]<>'-')and(vivod[i+1]<>')')) then
begin
x:=0;
j:=i;
repeat
s2:=vivod[j];
vivod[j]:=vivod[j+1];
j:=j+1;
if vivod[j]=')' then x:=x-1;
if vivod[j]='(' then x:=x+1;
vivod[j]:=s2;
until ((x=0)and((vivod[j+1]='+')or(vivod[j+1]='-')or(vivod[j+1]=')')))or(j=l)
end;
end;
s:=vivod;
vivod:='';
for i:=1 to l do //удаление скобок
begin
if (s[i]='(')or(s[i]=')') then
else vivod:=vivod+s[i];
end;
polska_zap:=vivod;
end;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
for i:=1 to length(edit2.Text) do //создание цепочки
AddPiece(MainP,edit2.Text[i],0,'');
Stringgrid1.ColWidths[2]:=300; //форматирование ширины столбцов
Stringgrid1.ColWidths[1]:=50;
Stringgrid1.ColWidths[0]:=100;
Stringgrid2.ColWidths[2]:=300;
Stringgrid2.ColWidths[1]:=50;
Stringgrid2.ColWidths[0]:=100;
Stringgrid3.ColWidths[2]:=300;
Stringgrid3.ColWidths[1]:=50;
Stringgrid3.ColWidths[0]:=100;
Stringgrid4.ColWidths[2]:=300;
Stringgrid4.ColWidths[1]:=50;
Stringgrid4.ColWidths[0]:=100;
m1:=1; m2:=1; m3:=1; m4:=1;
for i:=1 to length(edit2.Text) do //создание клона
AddPiece(TempP,edit2.Text[i],0,'');
StringGrid1.RowCount:=1;
StringGrid1.Cells[0,0]:='МАП умножение'; //заполнение атрибутов
StringGrid2.RowCount:=1; //таблицы
StringGrid2.Cells[0,0]:='МАП деление';
StringGrid3.RowCount:=1;
StringGrid3.Cells[0,0]:='МАП сложение';
StringGrid4.RowCount:=1;
StringGrid4.Cells[0,0]:='МАП вычитание';
CreateTable(TempP,TurnNumber); //заполнение таблицы на текущем шаге
CreateSSO; //выводим ССО
StringGrid1.RowCount:=form1.StringGrid1.RowCount-1; //чистка пустых строк
StringGrid2.RowCount:=form1.StringGrid2.RowCount-1;
StringGrid3.RowCount:=form1.StringGrid3.RowCount-1;
StringGrid4.RowCount:=form1.StringGrid4.RowCount-1;
Dispose(TempP); //удаленние клона
TempP:=nil;
button1.Enabled:=false;
button3.Enabled:=true;
label4.Caption:=inttostr(strtoint(label4.Caption)+1); //наращиевание счётчика
end;
procedure TForm1.Button3Click(Sender: TObject);
var
Pp:Ppiece;
begin
Turn(MainP); //выполнение следующего шага
Pp:=MainP;
m1:=1; m2:=1; m3:=1; m4:=1;
while Pp<>nil do //создание клона текущей цепи
begin
AddPiece(TempP,pp^.s,pp^.number,pp^.mem);
Pp:=pp^.next;
end;
StringGrid1.RowCount:=1;
StringGrid1.Cells[1,0]:=''; //очищение таблицы
StringGrid1.Cells[2,0]:='';
StringGrid2.RowCount:=1;
StringGrid2.Cells[1,0]:='';
StringGrid2.Cells[2,0]:='';
StringGrid3.RowCount:=1;
StringGrid3.Cells[1,0]:='';
StringGrid3.Cells[2,0]:='';
StringGrid4.RowCount:=1;
StringGrid4.Cells[1,0]:='';
StringGrid4.Cells[2,0]:='';
CreateTable(TempP,TurnNumber); //заполенние таблицы на текущем шаге
StringGrid1.RowCount:=form1.StringGrid1.RowCount-1; //чистка пустых строк
StringGrid2.RowCount:=form1.StringGrid2.RowCount-1;
StringGrid3.RowCount:=form1.StringGrid3.RowCount-1;
StringGrid4.RowCount:=form1.StringGrid4.RowCount-1;
Dispose(TempP); //удаление клона
TempP:=nil;
label4.Caption:=inttostr(strtoint(label4.Caption)+1); //наращиевание счётчика
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
edit2.Text:=polska_zap(edit1.Text); //вызов функции перевода в ПОЗ
end;
end.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.