for g:=1 to 26 do
Begin
If pos(')',s)=(pos('(',s)-1) then
Begin
s9:=copy(s,1,pos(')',s)-1);
s8:=copy(s,pos(')',s)+1,length(s)-pos('(',s)+1);
s10:=s8;
delete(s,1,Length(s8)+length(s9)+1);
for ch5 := 'A' to 'Z' do
begin
if pos(ch5, s9) > 0 then
prs1 := prs1 + ch5;
end;
s9:=prs1;
writeln(s9);
For m:=1 to (length(s9)-1) do
Begin
S8:=s8+'+'+s8;
End;
Insert(s9[1],s8,1);
For m:=1 to (length(s9)-1) do
Begin
Insert(s9[1+m],s8,pos(s9[1],s8)+length(s10)+2);
End;
s:=s+s8;
End;
If pos(per[g],s)=(pos('(',s)-1) then
begin
If pos('+',s)>pos('(',s) then
if pos('+',s)<pos(')',s) then {A*(A+B) }
begin
insert(per[g],s,pos('+',s)+1);
delete(s,pos('(',s)+length(s),1);
{ delete(s,pos('(',s),1);
delete(s,pos(')',s),1); }
End;
If pos(per[g],s)=(pos('(',s)-1) then {A*(A*B)}
begin
delete(s,pos('(',s),1);
delete(s,pos('(',s)+length(s),1);
End;
End;
End;
Writeln(s);
Ошибка в том, что pos всегда ищет с начала строки, а ты похоже думаешь что как то иначе..
По всему коду прогядувается такая логика, например:
If pos(')',s)=(pos('(',s)-1) then
Рекурсией? Это например как, на ловах хотя бы...? Тоесть мне вообще надо это все дело подругому делать?
uses crt;
function upr (s:string):string;
var i,n,k:integer;
ss,s1,s2:string;
c:char;
begin
if pos ('(',s)=0 then begin upr:=s; exit; end;
I:=1; n:=pos('(',s)+1; k:=0;
repeat
if s[n]='(' then begin inc (i); inc (k); end;
if s[n]=')' then dec (i);
inc (n);
until i=0;
if k>0 then begin {есть вложеннные скобки, надо начинать с них}
s:=upr(copy(s,1,pos('(',s))+
upr(copy(s,pos('(',s)+1,n-pos('(',s)-2))+
copy (s,n-1,255));
end;
{if (s[pos('(',s)-1] in ['A'..'Z']) and умножение справа, аналогично делается
(s[pos(')',s)+1] in ['A'..'Z']) then
}
{ умножение скобок
}
if (s[pos('(',s)-1] in ['A'..'Z']) and
not(s[pos(')',s)+1] in ['A'..'Z']) then begin {умножение слева}
i:=pos('(',s)-1;
s1:='';
while (s[i] in ['A'..'Z']) and (i>0) do begin s1:=s[i]+s1; dec (i); end;
ss:=copy(s,1,i);
i:=pos('(',s)+1;
repeat
s2:='';
while (s[i] in ['A'..'Z']) and (i<length(s)) do begin s2:=s2+s[i]; inc (i); end;
ss:=ss+s1+s2;
if s[i]<>')' then
while not(s[i] in (['A'..'Z'])) and (i<length(s)) do begin ss:=ss+s[i]; inc (i); end;
until s[i]=')';
ss:=ss+copy (s,i+1,255); s:=ss;
end;
upr:=upr(s); {строка на всякий случай, ведь может быть несколько простых операций раскрытия
а мы раскрываем только первую}
end;
begin
writeln(upr('D(A(A+B)+B(C+B))+C(E+F)'));
end.