Распараллеливание арифметических выражений. Обратная польская запись. Процедура добавления звена в цепочку, страница 2

if (s[3]=form1.Memo1.Lines[i][3]) and (s[4]=form1.Memo1.Lines[i][4]) then

begin

form1.Memo1.Lines[i]:=s;

be:=true;

end;

if (form1.Memo1.Lines.count=cou) and (not(be)) then

form1.Memo1.Lines.add(s);

end;

Procedure CreateSSO;

var //формирование ССО

i,j:integer;

s,s2:string;

Begin

for i:=0 to form1.Memo1.Lines.Count do

begin

s:=form1.Memo1.Lines[i];

s2:=copy(s,3,6);

delete(s,1,10);

form1.Memo2.Lines.Add(s2);

if s2<>'' then

for j:=1 to e-1 do

if (exceptions[j][1]=s2[5]) and (exceptions[j][2]=s2[6]) then

form1.Memo2.Lines.Add(exceptions[j])

else

if length(s2)=2 then

if (exceptions[j][1]=s2[1]) and (exceptions[j][2]=s2[2]) then

form1.Memo2.Lines[form1.Memo2.Lines.Count-1]:=form1.Memo2.Lines[form1.Memo2.Lines.Count-1]+'->'+exceptions[j][5]+exceptions[j][6];

while length(s)>0 do

begin

s2[1]:=s2[5];

s2[2]:=s2[6];

s2[5]:=s[1];

s2[6]:=s[2];

delete(s,1,4);

form1.Memo2.Lines.Add(s2);

if e<>1 then

for j:=1 to e-1 do

if (exceptions[j][1]=s2[5]) and (exceptions[j][2]=s2[6]) then

form1.Memo2.Lines.Add(exceptions[j]);

end;

end;

end;

Procedure CreateTable(p:Ppiece; var TurnNumber:integer);

var //Процедура отображения текущего шага в таблице

q,start,c,v:Ppiece;

Begin

start:=p;

While p<>nil do

if p^.next<>nil then

if p^.next^.next<>nil then

Begin

If (p^.next^.next^.s='*') or (p^.next^.next^.s='/') or (p^.next^.next^.s='+') or (p^.next^.next^.s='-') then

If (not((p^.next^.s='*') or (p^.next^.s='/') or (p^.next^.s='+') or (p^.next^.s='-'))) and (not((p^.s='*') or (p^.s='/') or (p^.s='+') or (p^.s='-'))) then

Begin

if p^.next^.next^.s='*' then  //добавление строки в таблицу МАП умножения

Begin

If p^.next^.TurnNumber=TurnNumber then

begin

Form1.StringGrid1.Cells[1,form1.StringGrid1.RowCount-1]:='У'+inttostr(p^.next^.next^.number);

Form1.StringGrid1.Cells[2,form1.StringGrid1.RowCount-1]:=p^.next^.s;

inc(p^.next^.TurnNumber);

form1.StringGrid1.RowCount:=form1.StringGrid1.RowCount+1;

end;

If p^.TurnNumber=TurnNumber then

Begin

Form1.StringGrid1.Cells[1,form1.StringGrid1.RowCount-1]:='У'+inttostr(p^.next^.next^.number);

Form1.StringGrid1.Cells[2,form1.StringGrid1.RowCount-1]:=p^.s;

inc(p^.TurnNumber);

form1.StringGrid1.RowCount:=form1.StringGrid1.RowCount+1;

end;

end;

if p^.next^.next^.s='/' then //добавление строки в таблицу МАП деления

Begin

If p^.next^.TurnNumber=TurnNumber then

begin

Form1.StringGrid2.Cells[1,form1.StringGrid2.RowCount-1]:='Д'+inttostr(p^.next^.next^.number);

Form1.StringGrid2.Cells[2,form1.StringGrid2.RowCount-1]:=p^.next^.s;

inc(p^.next^.TurnNumber);

form1.StringGrid2.RowCount:=form1.StringGrid2.RowCount+1;

end;

If p^.TurnNumber=TurnNumber then

Begin

Form1.StringGrid2.Cells[1,form1.StringGrid2.RowCount-1]:='Д'+inttostr(p^.next^.next^.number);

Form1.StringGrid2.Cells[2,form1.StringGrid2.RowCount-1]:=p^.s;

inc(p^.TurnNumber);

form1.StringGrid2.RowCount:=form1.StringGrid2.RowCount+1;

end;

end;

if p^.next^.next^.s='+' then //добавление строки в таблицу МАП сложения

Begin

If p^.next^.TurnNumber=TurnNumber then

begin

Form1.StringGrid3.Cells[1,form1.StringGrid3.RowCount-1]:='C'+inttostr(p^.next^.next^.number);

Form1.StringGrid3.Cells[2,form1.StringGrid3.RowCount-1]:=p^.next^.s;

inc(p^.next^.TurnNumber);

form1.StringGrid3.RowCount:=form1.StringGrid3.RowCount+1;

end;

If p^.TurnNumber=TurnNumber then

Begin

Form1.StringGrid3.Cells[1,form1.StringGrid3.RowCount-1]:='C'+inttostr(p^.next^.next^.number);

Form1.StringGrid3.Cells[2,form1.StringGrid3.RowCount-1]:=p^.s;

inc(p^.TurnNumber);

form1.StringGrid3.RowCount:=form1.StringGrid3.RowCount+1;

end;

end;

if p^.next^.next^.s='-' then //добавление строки в таблицу МАП вычитания

Begin

If p^.next^.TurnNumber=TurnNumber then

begin

Form1.StringGrid4.Cells[1,form1.StringGrid4.RowCount-1]:='В'+inttostr(p^.next^.next^.number);

Form1.StringGrid4.Cells[2,form1.StringGrid4.RowCount-1]:=p^.next^.s;

inc(p^.next^.TurnNumber);

form1.StringGrid4.RowCount:=form1.StringGrid4.RowCount+1;

end;

If p^.TurnNumber=TurnNumber then

Begin

Form1.StringGrid4.Cells[1,form1.StringGrid4.RowCount-1]:='В'+inttostr(p^.next^.next^.number);

Form1.StringGrid4.Cells[2,form1.StringGrid4.RowCount-1]:=p^.s;

inc(p^.TurnNumber);

form1.StringGrid4.RowCount:=form1.StringGrid4.RowCount+1;

end;

end;

q:=p^.next^.next;

c:=p^.next;

if ((p^.mem='') and (c^.mem='')) or ((p^.mem<>'') and (c^.mem='')) then

p^.mem:=p^.mem+'->'+q^.mem //запоминаем прошлые операторы первого звена

else

if (p^.mem='') and (c^.mem<>'') then

p^.mem:=c^.mem+'->'+q^.mem //запоминаем прошлые операторы второго звена

else

begin

exceptions[e]:=p^.mem[length(p^.mem)-1]+p^.mem[length(p^.mem)]+'->'+q^.mem;

inc(e); //добавляем исключительную цепь