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. // конец программыстрока: Это озеро около заповедника.новая строка: Это заповедника.строка: Около этого заповедника находится озеро.новая строка: этого заповедника находится.строка: озеро около заповедникановая строка: заповедника