IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Раскрыть с кобки в выражениии
сообщение
Сообщение #1


Гость








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);


Мне надо раскрыть скобки в выражении, я вошел в тупик в таком случае, когда (A+C)(A+B) , в первом цткле я такое выражение преобразую в A(A+B)+C(A+B), во втором цикле должно выйти AA+AB+CA+CB, а выходит AA+AB+CA+B, не подскажете в чем ошибка или есть какой-нибудь другой способ.





 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Ошибка в том, что pos всегда ищет с начала строки, а ты похоже думаешь что как то иначе..
По всему коду прогядувается такая логика, например:
  If pos(')',s)=(pos('(',s)-1) then

Хочешь этим найти ")(" ? Для твоего же выражения с двумя скобками не выйдет..
И далее похоже. А вообще - здесь однозначно панет рекурсией. Вдруг выражение с вложенными скобками или умножение стоит по разные стороны от скобок, все варианты не переберешь.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 9.09.2025 9:48
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name