Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2010, 21:22   #1
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию Строки. Паскаль

Код:
N:=1;
for j:=1 to length(st)-n do {проход по слову, длина строки-n, для того чтобы не трогал последнюю букву} 
   begin
   h:=length(st);
   if st[j]=st[h] then
   begin
   delete(st,j,1);
   inc(n);
   end;
   end;
отрывок кода, должен удалять все буквы в слове которые совпадают с последней буквой в этом слове.Последняя бука при этом не должна удаляться.
пример
ввод:
азбука.
должно получиться:
збука.
Все легко согласен, но вот не могу сообразить где ошибка в алгоритме, он почему то удаляет у меня и последний символ тоже.
Базиля вне форума Ответить с цитированием
Старый 12.01.2010, 21:39   #2
fbus
Форумчанин
 
Аватар для fbus
 
Регистрация: 23.10.2008
Сообщений: 460
По умолчанию

for i:=1 to length(st)-1 do
if st[i] = st[length(st)] then delete....
помойму так
fbus вне форума Ответить с цитированием
Старый 12.01.2010, 21:44   #3
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Цитата:
fbus
при удалении буквы, перед нею стоящие сдвигаются, поэтому параметр цикла нужно уменьшить на то кол-во раз, сколько раз удалялась буква.
Базиля вне форума Ответить с цитированием
Старый 12.01.2010, 21:53   #4
NSV
Форумчанин
 
Аватар для NSV
 
Регистрация: 27.05.2009
Сообщений: 127
По умолчанию

создай две строки и копируй из первой во вторую
NSV вне форума Ответить с цитированием
Старый 12.01.2010, 21:53   #5
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

а может лучше просто цикл с конца начинать?
Код:
i := Length(St) - 1;
while i >= 1 do
      if St[I] = St[Length(St)] then Delete(St, i, 1)
      else Dec(i);

Последний раз редактировалось Alex_FF; 12.01.2010 в 21:57.
Alex_FF вне форума Ответить с цитированием
Старый 12.01.2010, 21:58   #6
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Alex_FF
спасибо
а что у меня не правильного?
Базиля вне форума Ответить с цитированием
Старый 12.01.2010, 22:10   #7
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

Цитата:
Сообщение от Базиля Посмотреть сообщение
Alex_FF
спасибо
а что у меня не правильного?
В паскале в цикле for начальный и конечный индекс цикла считаются один раз при инициализации цикла. Поэтому от того, что ты отнимаешь N от конечного индекса толку нету, т. к. заново при следующей итерации цикла индексы не пересчитываются.
Alex_FF вне форума Ответить с цитированием
Старый 12.01.2010, 22:12   #8
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Alex_FF
тьфу! точно спасибо, что-то как-то из головы это вылетело
Базиля вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль (строки) Polusha Помощь студентам 1 28.12.2009 18:38
Паскаль строки! Antonio_getscool Помощь студентам 1 18.12.2009 11:45
Паскаль. Строки. Nubas Помощь студентам 5 25.10.2009 22:40
Паскаль, строки Паскалька^^ Помощь студентам 7 25.10.2009 15:39
паскаль(( строки(( lumenка Паскаль, Turbo Pascal, PascalABC.NET 0 23.05.2009 17:53