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

program Project1;
 
const
  //Разделители слов.
  D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13];
var
  S, Sw, Sw1 : String;
  Ch : Char;
  i, Pos2, Len, LenW : Integer;
  F : Boolean;
begin
  repeat
    Writeln('Задайте строку:');
    Readln(S);
 
    Writeln('Список слов, отличных от последнего слова.');
    Writeln('Дополнительно, в этих словах первая буква перенесена в конец:');
    Len := Length(S);
    Pos2 := 0;
    F := True;
    for i := Len downto 1 do begin
      //Пропускаем разделители.
      if S[i] in D then Continue;
      //Отслеживаем конец слова.
      if (i = Len) or (S[i + 1] in D) then Pos2 := i;
      //Отслеживаем начало слова.
      if (i = 1) or (S[i - 1] in D) then begin
        //Выделяем очередное слово из строки.
        LenW := Pos2 - i + 1;
        Sw := Copy(S, i, LenW);
        if F then begin
          //Это последнее слово в строке.
          F := False;
          Sw1 := Sw;
        end else if Sw <> Sw1 then begin
          //Это не последнее слово, отличное от последнего в строке.
          //Переставляем первую букву в конец и распечатываем.
          Ch := Sw[1];
          Sw[1] := Sw[LenW];
          Sw[LenW] := Ch;
          Writeln(Sw);
        end;
      end;
    end;
 
    Writeln('Повторить - Enter, выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.

Leave a Comment

50 − = 40