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

program Project1;
 
const
  //Множество разделителей слов.
  D = [' ', '.', ',', ':', ';', '!', '?', '-', #9, #10, #13];
  //Множество согласных букв.
  Ds = [
    //Кириллица.
    'б', 'в', 'г', 'д', 'ж', 'з', 'к', 'л', 'м', 'н', 'п',
    'р', 'с', 'т', 'ф', 'х', 'ц', 'ч', 'ш', 'щ',
    'Б', 'В', 'Г', 'Д', 'Ж', 'З', 'К', 'Л', 'М', 'Н', 'П',
    'Р', 'С', 'Т', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ',
    //Латиница.
    'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p',
    'q', 'r', 's', 't', 'v', 'w', 'x', 'z',
    'B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P',
    'Q', 'R', 'S', 'T', 'V', 'W', 'X', 'Z'
  ];
var
  S, W1, W2 : String;
  i, Pos1, Pos2, PosW, Len, LenW, LenWMax : Integer;
begin
  repeat
    //Исходный текст.
    Writeln('Задайте текст:');
    Readln(S);
 
    //Поиск координат первого из самых длинных слов,
    //которые начинаются на согласную букву.
    Len := Length(S);
    LenWMax := 0;
    PosW := 0;
    Pos1 := 0;
    Pos2 := 0;
    for i := 1 to Len do begin
      //Пропускаем разделители.
      if S[i] in D then Continue;
      //Отслеживаем начало слова.
      if (i = 1) or (S[i - 1] in D) then Pos1 := i;
      //Отслеживаем конец слова.
      if (i = Len) or (S[i + 1] in D) then begin
        Pos2 := i;
        //Если слово начинаются на согласную букву.
        if S[Pos1] in Ds then begin
          //Вычисляем длину очередного найденного слова.
          LenW := Pos2 - Pos1 + 1;
          //Если это слово длиннее всех ранее найденных слов, то
          //запоминаем его координаты и его длину.
          if LenW > LenWMax then begin
            LenWMax := LenW;
            PosW := Pos1;
          end;
        end;
      end;
    end;
 
    //После выхода из предыдущего цикла имеем:
    //Pos1, Pos2 - координаты последнего слова в тексте.
 
    //Меняем местами слова.
    if Pos1 <> PosW then begin
      W1 := Copy(S, PosW, LenWMax);
      LenW := Pos2 - Pos1 + 1;
      W2 := Copy(S, Pos1, LenW);
      Delete(S, Pos1, LenW);
      Insert(W1, S, Pos1);
      Delete(S, PosW, LenWMax);
      Insert(W2, S, PosW);
    end;
 
    //Показываем результат.
    Writeln('Текст после обработки:');
    Writeln(S);
 
    Writeln('Повторить - Enter. Выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.

Leave a Comment

+ 29 = 36