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

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

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

 
 Ответить  Открыть новую тему 
> Строки, Удаление
сообщение
Сообщение #1


Гость






rolleyes.gif Составьте программу удаления символов «А» стоящих на четных местах в полученной от пользователя строке.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

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


А какие могут быть проблемы?
Код

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


Что не можешь сделать сам?

Сообщение отредактировано: Bokul -


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Цитата(Bokul @ 19.05.2006 19:33)
А какие могут быть проблемы?

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

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

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

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


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

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


Спасибо Volvo good.gif

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

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


Сообщение отредактировано: Bokul -


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


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

Сообщение отредактировано: klem4 -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

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


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


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.


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Профи
****

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

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


Цитата(klem4 @ 20.05.2006 18:47) *

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

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

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

Сообщение отредактировано: Malice -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Да я погорячился по ходу, извиняюсь.

Я бы решал так

i := 2;
while (i <= length(s)) do
if s[i] = 'A' then begin
delete(s, i, 1);
inc(i);
end else inc(i, 2);


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 




- Текстовая версия 18.12.2017 21:55
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"