• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

текстовый файл(турбо паскал)

  • Автор темы Автор темы zaaz
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
Z

zaaz

Скобки. Текст (например, арифметическое выражение) содержит многократно вложенные круглые скобки. Исправить его, оставив скобки первого уровня круглыми, второго - заменить на квадратные, третьего и последующих - на фигурные. Убедиться в корректности использования скобок. Пример: In (sin ((a+B)c-d)) заменить выражением In {sin [(a+B)c-d]}.

помогите пожалуйста составить программку паскаль!
 
А ты мне чем поможешь в аське? что здесь тебе не устраивает?

Товарищ предлагает платную помощь. А цену обсудить лично..

Что касается задачи, возможно решение в лоб:

проверяете корректность скобок(считаете количество открытых/закрытых)

Далее проходим в цикле по строке|например ((q+w) +((q+w)/23)) |
Находим первую скобку |s[1]|
Находим количество скобок до ее закрытия,
т.е. находим открытую +1, находим закрытую -1, изначально 1 открыта, закроется при 0.
отрезаем от строки открывающую и закрывающую скобки.
проходим по строке еще раз пока есть скобки.

Подозреваю, что за один проход решается но цикл не сложный при наличие желания думаю решите..
 
Ну наверное для кого то это очень легко,но для меня как для начинающего программиста это не кажется легким))я в сути немножко смог разобраться, а это изложить не могу..
 
Ну наверное для кого то это очень легко,но для меня как для начинающего программиста это не кажется легким))я в сути немножко смог разобраться, а это изложить не могу..
Если честно смысл не понял.. но если есть конкретные вопросы здесь всегда помогут
 
Далее проходим в цикле по строке|например ((q+w) +((q+w)/23)) |
Находим первую скобку |s[1]|
Находим количество скобок до ее закрытия,
т.е. находим открытую +1, находим закрытую -1, изначально 1 открыта, закроется при 0.
отрезаем от строки открывающую и закрывающую скобки.
проходим по строке еще раз пока есть скобки.
Вот, но сделано немного по другому :
1. считает максимальное количество уровней путем если ( то текущий уровень+1 если ) то текущий уровень -1 потом если максимальный уровень меньше текущего уровеня то записываем в максимальный уровень текущий.
2. проходим строку:
наткнулись на ( увеличиваем уровень на 1 и заменяем символ на символ уровня под номером равным количество уровней-текущий уровень-1
наткнулись на ), аналогично, но с начала заменяем а потом уменьшаем текущий уровень на 1​


Код:
var i,level,maxlevel,l,r:integer;
s,s2:string;
begin
writeln('vvedite stroku');
readln(s);
s2:=s;
maxlevel:=0;
level:=0;
l:=0;
r:=0;

for i:=1 to length(s) do
begin
if s[i]='(' then l:=l+1;
if s[i]=')' then r:=r+1;
end;

if l<>r then
begin
writeln('ERROR');
readln;
exit;
end;

for i:=1 to length(s) do
begin
if s[i]='(' then level:=level+1;
if s[i]=')' then level:=level-1;
if level>maxlevel then maxlevel:=level;
end;

for i:=1 to length(s) do
begin
if s[i]='(' then
begin
level:=level+1;
if level=maxlevel then s[i]:='(' else
if level=maxlevel-1 then s[i]:='[' else
s[i]:='{';
end;

if s[i]=')' then
begin
if level=maxlevel then s[i]:=')' else
if level=maxlevel-1 then s[i]:=']' else
s[i]:='}';
level:=level-1;
end;
end;

writeln('before : ','',s2);
writeln('after : ','',s);
writeln('max level = ',maxlevel);
readln;
end.
 
спасибо) но вот мне недавно помогли решить задачу, но оно по другому выглядит..

Добавлено:
Код:
program Fanis;
uses crt;
var s,st:string;
x1,x2:integer;
x11,x22:integer;
i:integer;
level:integer;
begin
readln(s);
x1:=0;
x2:=0;
for i:=1 to length(s) do
begin
if s[i] = '(' then inc(x1);
if s[i] = ')' then inc(x2);
end;
if x1<>x2 then writeln('не верное количество скобок');

if x1=x2 then
begin
writeln('Изночально : '+s);
level:=x1;
for i:=1 to length(s) do
begin
if s[i] = '(' then
begin
dec(level);
if (level = 0) then s[i]:='(';
if (level = 1) then s[i]:='[';
if (level > 1) then s[i]:='{';
end;
if s[i] = ')' then
begin
if (level = 0) then s[i]:=')';
if (level = 1) then s[i]:=']';
if (level > 1) then s[i]:='}';
inc(level);
end;
end;
writeln('Получилось : '+s);
end;
end.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!