Пусть дан текст, заканчивающийся точкой. Текст состоит из слов, разделенных пробелами. Слова представляют собой произ- вольную последовательность символов, отличных от пробела. На- печатайте все слова, которые состоят из тех же литер, что и по- следнее слово текста — Pascal(Паскаль)

program Project1;
 
const
  (*Множество разделителей.*)
  D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13];
  N = 100;
var
  S : String;
  Arr : array[1..N] of String;
  i, j, Pos1, Len, LenA : Integer;
  //Множество символов.
  D1, D2 : set of Char;
begin
  repeat
    Writeln('Задайте текст:');
    Readln(S);
 
    Len := Length(S);
    Pos1 := 0;
    LenA := 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
        (*Добавляем слово в массив.*)
        LenA := LenA + 1;
        Arr[LenA] := Copy(S, Pos1, i - Pos1 + 1);
      end;
    end;
 
    if LenA = 0 then begin
      Writeln('В тексте нет слов.');
      S := '';
      Continue;
    end else begin
      Writeln('Последнее слово в тексте:');
      Writeln(Arr[LenA]);
    end;
 
    (*Определям множество букв, которые содержатся в последнем слове.*)
    D1 := [];
    for i := 1 to Length(Arr[LenA]) do
      D1 := D1 + [ Arr[LenA][i] ]
    ;
    (*Выполняем перебор всех слов, кроме последнего*)
    Writeln('Перечень слов, состоящих из тех же букв, что и последнее слово:');
    for i := 1 to LenA - 1 do begin
      (*Составляем множество букв для очередного слова.*)
      D2 := [];
      for j := 1 to Length(Arr[i]) do
        D2 := D2 + [ Arr[i][j] ]
      ;
      if D1 = D2 then Writeln(Arr[i]);
    end;
 
    Writeln('Повторить - Enter. Выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.

Leave a Comment

19 + = 28