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.