Var s: string; // строка текста
i,lf: integer; // lf - номер первого символа отдельного слова в строке
// i - переменная цикла, для просмотра строки
begin
write('строка: '); readln(s); // считывание слова
i:=1; lf:=1; // i:=1; - текущий символ слова - первый
// lf:=1; - lf указывает на первый символ слова
repeat // цикл по строке
if s[i]=' ' then // если очередной символ строки - пробел, то
begin // начало блока операторов
if UpperCase(s[i-1])=UpperCase(s[lf]) then // если последний символ
текущего
// слова равен первому символу слова без учета регистра,
то
begin // начало блока операторов
delete(s,lf,i-lf+1); // удаляем слово вместе с пробелом справа
i:=lf; // i:=lf; - переменная i указывает на следующее слово
end // конец блока операторов
else lf:=i+1; // иначе, если первый символ слова не равен
// последнему символу слова, устанавливаем lf на
// первый символ следующего слова
end; // конец блока по условию, что очередной символ - пробел
i:=i+1; // переходим к следующему символу в строке
until >length(s); // если номер очередного символа строки больше
длины // строки, то выход из цикла по строке
// если в последнем слове текста есть совпадения
// первого и последнего символа
if s[length(s)] in ['.','?','!'] then // если текст заканчивается одним из знаков
.?!
if s[lf]=s[length(s)-1] then delete(s,lf-1,length(s)-lf+1) // сравниваем с
предпоследним
// если равны, то удаляем последнее слово
else // иначе ничего не делаем
else if s[lf]=s[length(s)] then delete(s,lf-1,length(s)-lf+2); // если последний
// символ не .?!, то сравниваем первый символ
последнего
// слова с последним символом текста, если равны,
// то удаляем последнее слово
writeln('новая строка: ',s); // выводим новую строку на экран
end. // конец программы
строка: Это озеро около заповедника.
новая строка: Это заповедника.
строка: Около этого заповедника находится озеро.
новая строка: этого заповедника находится.
строка: озеро около заповедника
новая строка: заповедника