а)
program Project1;
const
// Разделители слов.
D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13];
var
S, Sw, Sw1: String;
i, j, k, Pos2, Len, LenW: Integer;
F, FRes: Boolean;
begin
repeat
Writeln('Задайте строку:');
Readln(S);
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
// Это не последнее слово, отличное от последнего в строке.
// Проверка симметричности.
k := LenW;
FRes := True;
for j := 1 to LenW div 2 do
begin
if Sw[j] <> Sw[k] then
begin
FRes := False;
Break;
end;
k := k - 1;
end;
if FRes then
Writeln(Sw);
end;
end;
end;
Writeln('Повторить - Enter, выход - любой символ + Enter.');
Readln(S);
until S <> '';
end.
б)
program Project1;
const
// Разделители слов.
D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13];
var
S, Sw, Sw1: String;
i, j, Pos2, Len, LenW: Integer;
F, FRes: 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
// Это не последнее слово, отличное от последнего в строке.
// Проверка встречается ли первая буква в слове хотябы ещё один раз.
FRes := False;
for j := 2 to LenW do
begin
if Sw[j] = Sw[1] then
begin
FRes := True;
Break;
end;
end;
if FRes then
Writeln(Sw);
end;
end;
end;
Writeln('Повторить - Enter, выход - любой символ + Enter.');
Readln(S);
until S <> '';
end.