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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2016, 15:23   #1
Оля11
Новичок
Джуниор
 
Регистрация: 13.02.2016
Сообщений: 7
Сообщение Нужно задать программу, которая удаляет три символа в начале слов, оканчивающихся на th.

К примеру задаю строку ghghjhth jdfkth shfjth hjsjhfj
Программа должна вывести hjhth kth jth hjsjhfj
Оля11 вне форума Ответить с цитированием
Старый 13.02.2016, 17:41   #2
Heirat
 
Регистрация: 13.02.2016
Сообщений: 4
По умолчанию

Здравствуйте, алгоритм словами:
1 Из исходной строки s взять подстроку subs, которая явл. словом (прочитать до пробела);
2 Если два последних символа в подстроке th,
то из этой подстроки удалить три первых символа процедурой Delete
иначе вставить эту подстроку в строку answer без изменений;
3 Вставить подстроку в строку answer, пробел;
4 Повторять со всеми словами;
Heirat вне форума Ответить с цитированием
Старый 13.02.2016, 17:58   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Heirat, всё правильно, алгоритм верный!

если не сильно заморачиваться, то можно начать с такого кода:
Код:
var s, sword, answer : string;
 i : integer;
begin
  s := 'ghghjhth jdfkth shfjth hjsjhfj';

  answer := '';
  s:=s+' '; {добавили пробел в конец строки для удобства обработки}
  sword:='';
  for i:=1 to Length(s) do begin
    if s[i] <> ' ' then sword:=sword + s[i]
    else
      if Length(sword)>0 then begin
        if copy(sword,Length(sword)-1,2)='th' then Delete(sword,1,3);
        answer := answer + sword + ' ';
        sword := '';
      end;
  end;
  WriteLn(answer)
end
.

Последний раз редактировалось Serge_Bliznykov; 13.02.2016 в 18:13.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.02.2016, 18:22   #4
Оля11
Новичок
Джуниор
 
Регистрация: 13.02.2016
Сообщений: 7
Сообщение

Я создала программу. Что не так? Где iF -выдает ошибку
Код:
var  s:string;
l,i:integer;
begin
readln(s);
writeln(s);
i:=1;;
 L := Length(s);
for i := 1 to L do
begin
 If ((s[i]=' ') and (s[i-1]='h') and (s[i-2]='t'))    
or ((s[i]='h') and (s[i-1]='t') ) then 

  Delete(s,1,3);       
End;  
Writel(s);        {выводим результат}
Readln;
End.

Последний раз редактировалось Вадим Мошев; 14.02.2016 в 15:33.
Оля11 вне форума Ответить с цитированием
Старый 13.02.2016, 19:35   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Код:
If ((s[i]=' ') and (s[i-1]='h') and (s[i-2]='t'))    
or ((s[i]='h') and (s[i-1]='t') )
Чего там в строке по индексам -1 и 0?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.02.2016, 19:41   #6
Оля11
Новичок
Джуниор
 
Регистрация: 13.02.2016
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
If ((s[i]=' ') and (s[i-1]='h') and (s[i-2]='t'))    
or ((s[i]='h') and (s[i-1]='t') )
Чего там в строке по индексам -1 и 0?
Всмысле? У меня в этой строке ошибка, но я не могу понять какая.

Последний раз редактировалось Оля11; 13.02.2016 в 19:51.
Оля11 вне форума Ответить с цитированием
Старый 13.02.2016, 20:12   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Дык и написал какая - для i=1 чему равно i-1 и i-2?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.02.2016, 20:22   #8
Оля11
Новичок
Джуниор
 
Регистрация: 13.02.2016
Сообщений: 7
По умолчанию

А если так. Правильно?
var s:string;
l,i:integer;
begin
readln(s);
writeln(s);
i:=1;
L := Length(s);
for i := 1 to L do
begin
If ((s[i]=' ') and (s[i-1]='h') and (s[i-2]='t'))
or ((s[i]='h') and (s[i-1]='t') ) then

Delete(s,1,3);
End;
Writel(s); {выводим результат}
Readln;
End.
Оля11 вне форума Ответить с цитированием
Старый 13.02.2016, 20:53   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А чем отличается? Опять смотри те же i-1 и i-2 для i=1 - выход за пределы массива. Строка это массив размерности 1..L -> индекс не должен быть меньше 1 и больше L

ADD

А чем код Сергея не устроил?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 13.02.2016 в 21:03.
Аватар вне форума Ответить с цитированием
Старый 13.02.2016, 21:07   #10
Оля11
Новичок
Джуниор
 
Регистрация: 13.02.2016
Сообщений: 7
По умолчанию

Так?
var s:string;
l,i:integer;
begin
readln(s);
writeln(s);
L := Length(s);
for i := 1 to L do
begin
If ((s[i]=' ') and (s[i-1]='h') and (s[i-2]='t'))
or ((s[i]='h') and (s[i-1]='t') ) then
Delete(s,1,3);
End;
Writeln(s); {выводим результат}
Readln;
End. Все равно ошибку выдает
Оля11 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Указатели в Паскале: Программу, которая удаляет из линейного списка целых чисел первый отрицательный элемент Victor1995 Помощь студентам 8 24.12.2013 11:19
Нужно написать программу на C#, которая удаляет из текста все слова igrik Помощь студентам 2 16.07.2013 18:13
определить количество слов в тексте, оканчивающихся на гласную букву Lellya Помощь студентам 0 10.04.2011 23:15
Напишите программу, которая удаляет второй и третий абзацы активного документа. Artur1992 Microsoft Office Word 2 09.01.2011 10:22
Delphi Написать программу, которая удаляет начальные пробелы из введенной с клавиатуры строки. Xetag Помощь студентам 2 08.06.2010 19:55