Помощь - Поиск - Пользователи - Календарь
Полная версия: Строки
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Real
rolleyes.gif Составьте программу удаления символов «А» стоящих на четных местах в полученной от пользователя строке.
Bokul
А какие могут быть проблемы?
Код

var s : строка; i: byte;
Begin
Берем строку(s);
от i:=1 до длина(s) делаем
    если (i = четное) и (s[i] = 'А')  то
           удаляем(со строки s, в позиции i, 1 элемент);
выводим результат;
конец.


Что не можешь сделать сам?
volvo
Цитата(Bokul @ 19.05.2006 19:33)
А какие могут быть проблемы?

А очень простые smile.gif

Вот тебе пример:
S := 'fAfAfA';

По строке надо от конца в начало проходить, иначе твой алгоритм идет лесом - при удалении символа в позиции №2 все остальные символы сдвинутся на 1 вправо, и обе оставшиеся буквы 'A' не будут удалены, хотя изначально находились именно на четных позициях... wink.gif

Кстати, ты можешь в своем алгоритме получить еще одну проблему - длина строки при использовании цикла For вычислится перед началом цикла, и то, что ты будешь изменять длину строки при удалении элементов никак не будет замечено. Результат - возможен выход за пределы строки.
Bokul
Спасибо Volvo good.gif

Коректируем
Код

var s : строка; i,len: byte;
Begin
Берем строку(s);
len:=длина(s);
от i:=len  до 1 делаем {роль "до" - downto}
    если (i = четное) и (s[i] = 'А')  то
           удаляем(со строки s, в позиции i, 1 элемент);
выводим результат;
конец.
klem4
И что ты изменил ? помоему ничего ... кроме направления просмотра строки.
Bokul
Цитата
И что ты изменил ? помоему ничего ... кроме направления просмотра строки.


naezd.gif
Не только, во-первых, тепер длина строки вычисляется не в цикле.
А во-вторых, больше ничего не надо изменять, все и так работает mad.gif

Вот код этого алгоритма:
Код

var s:string; i,len:byte;
begin
writeln('Enter string');
readln(s);
len:=length(s);
for i:=len downto 1 do
    if ((i mod 2)=0) and (s[i]='A') then
       delete(s,i,1);
writeln('Result :',s);
readln;
end.
Malice
Цитата(klem4 @ 20.05.2006 18:47) *

И что ты изменил ? помоему ничего ... кроме направления просмотра строки.

Точно подмечено smile.gif Этого недостаточно ?

2Bokul: Length теперь и в for можно ставить - следуя в обратном направлении за пределы строки не вылетишь.
klem4
Да я погорячился по ходу, извиняюсь.

Я бы решал так

i := 2;
while (i <= length(s)) do
if s[i] = 'A' then begin
delete(s, i, 1);
inc(i);
end else inc(i, 2);
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.