Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PZ_DP_2012_chast_2.docx
Скачиваний:
3
Добавлен:
26.09.2019
Размер:
302.12 Кб
Скачать

If(New)then

Break;

end;

end;

Stepner:=S;

//mmo2.Lines.Add(BackStr);

end;

function TForm1.ScoberU(S: String): String;

var

I,j,l,k,Step,Error,Num1,SavePoint:integer;

Numeric, BackStr, Block, S1, S2, T : string;

New,bl:Boolean;

FirstP : Array of string;

SecondP : Array of string;

begin

New := True;

while(New) do

begin

New:=false;

for i:=2 to Length(S)-1 do //Берем счет со второго символа до предпоследнего

begin

if(S[i]='*') then

begin

l:=0;

k:=0;

Step:=0;

j:=0;

Numeric:='';

Block:='';

If(isUr(s[I]))then

begin

T:=S[i];

//mmo2.Lines.Add(T);

//New:=True;

// -144*(x+2)

if((not isPMUR(s[i-1]) and not IsSC(s[i-1])) and (IsSC(s[i+1])))then //-144*(x+2) 15+144*(x+2)-10

begin

for j:=i-1 downto 1 do

begin

If(isPmur(s[j]))then

Break;

end;

//mmo2.Lines.Add(IntToStr(j));

if(j>0)then

begin

SavePoint:=j;

Num1:=i-j+1;

Numeric := Copy(S, j, i-j);

end

else

begin

Numeric := Copy(S, j+1, i-j-1);

Num1:=i-j;

SavePoint:=j+1;

end;

If(isUr(Numeric[1]))then

Delete(Numeric, 1,1);

//mmo2.Lines.Add(Numeric);

//получаем скобку

bl:=true;

for j:=i+2 to Length(S)-1 do

begin

if (s[j+1]='(') then

begin

bl:=false;

Break;

end;

if (s[j+1]=')')then

Break;

end;

if (bl) then //I+2 начало J конец -4*(-2+5*х)

begin

//mmo2.Lines.Add(inttostr(j));

//mmo2.Lines.Add(Copy(S,I+2,J-I-1));

//mmo2.Lines.Add(S[i+2]);

//New:=True;

l:=i+2;

New:=True;

for k:=j downto l+1 do

begin

//mmo2.Lines.Add(S[k]);

if ((isPM(S[k-1]))or(k=l+1))then

begin

if ((k=l+1)and(not isPM(S[k-1]))) then

Insert(Numeric+T, S, k-1)

else

Insert(Numeric+T, S, k);

//mmo2.Lines.Add(S[k-1]);

if ((S[k-1]='-')and(S[k]='-'))then

begin

S[k-1]:='+';

Delete(S,k,1);

end

else if ((S[k-1]='+')and(S[k]='-'))then

Delete(S,k-1,1)

else if ((S[k-1]='-')and(S[k]='+'))then

Delete(S,k,1)

else if ((S[k-1]='+')and(S[k]='+'))then

Delete(S,k,1);

end;

end;

//mmo2.Lines.Add(IntToStr(SavePoint));

if( SavePoint <> 1 ) then

begin

case s[SavePoint] of

'-':Insert('+', S, SavePoint);

'+':Insert('+', S, SavePoint);

'*':Insert('*', S, SavePoint);

'/':Insert('/', S, SavePoint);

end;

SavePoint:=SavePoint+1;

end;

Delete(S,SavePoint,Num1);

end;

end

else if((not IsSC(s[i+1])) and (IsSC(s[i-1])))then // (x+2)*-12*x ((х+1)*у)

begin

for j:=i+1 to Length(S)-1 do

begin

if((isPMUR(s[j+1]))or(isSC(s[j+1])))then

Break;

end;

Numeric := Copy(S, i+1, j-i);

//mmo2.Lines.Add(Numeric);

Delete(S,i,j-i+1);

bl:=true;

for j:=i-2 downto 2 do

begin

if (s[j-1]=')') then

begin

bl:=false;

Break;

end;

if (s[j-1]='(')then

Break;

end;

if (bl) then // (x+2)*-12*x

begin

New:=True;

for k:=i-2 downto j+1 do

begin

//mmo2.Lines.Add(S[k]);

if ((isPM(S[k-1]))or(k=j+1))then

begin

if ((k=j+1)and(not isPM(S[k-1]))) then

Insert(Numeric+T, S, k-1)

else

Insert(Numeric+T, S, k);

//mmo2.Lines.Add(S[k-1]);

if ((S[k-1]='-')and(S[k]='-'))then

begin

S[k-1]:='+';

Delete(S,k,1);

end

else if ((S[k-1]='+')and(S[k]='-'))then

Delete(S,k-1,1)

else if ((S[k-1]='-')and(S[k]='+'))then

Delete(S,k,1)

else if ((S[k-1]='+')and(S[k]='+'))then

Delete(S,k,1);

end;

end;

end;

end

else if((IsSC(s[i+1])) and (IsSC(s[i-1]))and(s[i]='*'))then // (x+2)*(12*x) --------------------------

begin

bl:=true;

k:=2;

for j:=i+2 to Length(S)-1 do

begin

if (s[j+1]='(') then

begin

bl:=false;

Break;

end;

if (s[j+1]=')')then

Break;

end;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]