Дана строка символов.Заменить все вхождения символа{ на 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
А что, нельзя сразу заменять символ на строку и удалять его?
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()...
спасибо, что напомнил...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.