Дана последовательность, содержащая от 2 до 30 слов, в каждом из которых от 2 до 10 латинских букв; между соседними словами—не менее одного пробела, за последним словом—точка. Напечатать все слова, отличные от последнего слова, предварительно преобразовав каждое из них по следующему правилу:
а) перенести первую букву в конец слова;- Pascal(Паскаль)

uses crt;
var s,s1,s2:string;
i,k:integer;
function ResBuk(a:string):string;{функция перестановки букв}
begin
insert(a[1],a,length(a)+1);{вставляем первую букву в конец}
delete(a,1,1); {удаляем первую букву}
ResBuk:=a;
end;
begin
clrscr;
write('s: ');readln(s);
insert(' ',s,pos('.',s)); {вставляем пробел перед точкой для удобства}
while pos('  ',s)>0 do delete(s,pos('  ',s),1); {удаляем лишние пробелы}
for i:=pos('.',s)-2 downto 1 do {ищем предпоследний перед точкой пробел}
if s[i]=' ' then
    begin
      k:=i; {запоминаем его позицию}
      break;
    end;
s1:=copy(s,k+1,pos('.',s)-k-2); {запоминаем последнее слово}
while (pos(' ',s)>0)and(s[i]<>'.') do {пока есть пробелы и не точка}
      begin
         s2:=copy(s,1,pos(' ',s)-1); {читаем очередное слово}
         if s2<>s1 then writeln(ResBuk(s2)); {если не равно последнаму, выводим в измененном виде}
         delete(s,1,pos(' ',s)); {удаляем прочитанное слово с пробелом}
     end;
readln
end.

Результат работы программы

Leave a Comment

15 − = 11