А что, сами думать уже разучились???
Для второго задания (первое если честно не понял о чем):
На форме Memo1 и Memo2 (в первый Мемо вводится исходный набор символов, вывод результирующего - во второй Мемо), на форму кидаем кнопку и в ее обработчик OnClick пишем следующее:
Код:
var
i:integer;
before,after:string;
currentPos:integer;
begin
//Удаляем все не относящиеся к теме символы
before:=Memo1.Lines.Text;
for i:=1 to Length(before) do
if not(before[i] in ['А'..'Я']) then
before[i]:=',';
before:=StringReplace(before,',','',[rfReplaceAll]);
after:='';
{Обработка, в результат не будут выводится токены
завершающий "К" и
начальный "Р"!!!!}
//Ищем все "строки ДО К" (в общем случае их больше одной)
currentPOS:=1;
repeat
currentPOS:=PosEx('К',before,currentPos);
after:=after+LeftStr(before,currentPos-1);
until currentPos<>0;
//ищем все "подстроки ПОСЛЕ Р" та же фигня что и для предыдущего
currentPOS:=1;
repeat
currentPOS:=PosEx('Р',before,currentPos);
after:=after+RightStr(before,Length(before)-currentPos);
until currentPOS<>0;
Memo2.Lines.Text:=after;
end;
я это даже тестил, работает. причем зассматривается случай что токены "Р" и "К" встречаются больше одного раза, следовательно результирующая последовательность в общем случае может быть больше начальной. Так же отслеживается неправильный ввод исходных данных, все токены не относящаеся к заданному в задаче множеству просто выкидываются из исходных данных.