Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Дана строка символов.Заменить все вхождения символа{ на begin, а каждое вхождение символа}-на end. Решите прогу плиз.

Автор: Help 25.12.2007 22:26

Дана строка символов.Заменить все вхождения символа{ на begin, а каждое вхождение символа}-на end. Решите прогу плиз и если можно блок схему постройте.В долгу не останусь!!!

Автор: compiler 25.12.2007 23:22

у меня получилось так...

var i, l, j:integer; s :string;
begin
readln(s);
l:=length(s);
i:=0;
while i<=l do begin
case s[i] of
'{' :begin insert('begin', s, i); i:=i+5; l:=l+5 end;
'}' :begin insert('end', s, i); i:=i+3; l:=l+3 end;
end;
inc(i);
end;

for i:=length(s) downto 1 do begin
if ((s[i]='{') or (s[i]='}')) then begin
for j:=i to length(s) do
s[j]:=s[j+1];
s:=copy(s, 1, length(s)-1);//убить последний символ
end;
end;
writeln(s);
end.
не уверен что это оптимальное решение...
алгоритм следующий
1)возле <<{>>/<<}>> добавляем <<begin>>/<<end>>
2)удаляем <<{>>/<<}>>

раскидай по процивдуркам и блок схема готова:)

Автор: volvo 25.12.2007 23:33

А что, нельзя сразу заменять символ на строку и удалять его? unsure.gif

  repeat
p := pos('{', s);
if p > 0 then begin
delete(s, p, 1); insert('begin', s, p);
end;
until p = 0;

Что-то не так? Зачем лишние циклы?

Автор: compiler 25.12.2007 23:39

Цитата(volvo @ 25.12.2007 18:33) *
Что-то не так?
все так:), забыл о существовании delete()...

спасибо, что напомнил...