uses crt;
var count,i:integer;
st,buf:string;
slova:array[1..100]of string;
begin
clrscr;
readln(st);
count:=1;
repeat
if (st[1]=' ') or (length(st)=0) then while st[1]=' ' do delete(st,1,1)
else
begin
while (st[1]<>' ') and (length(st)>0) do
begin
buf:=buf+st[1];
delete(st,1,1);
end;
slova[count]:=buf;
buf:='';
inc(count);
end;
until (length(st)=0) and (length(buf)=0);
for i:=1 to (count-1) div 2 do
begin
buf:=slova[i];
slova[i]:=slova[count-i];
slova[count-1]:=buf;
end;
for i:=1 to count-1 do write(slova[i],' ');
readln;
end.
Вариант 2
var
a,t:string;
b:array[1..100]of string;
k,i:integer;
begin
readln(a); {ввели строку}
a:=' '+a; {добавили пробел в начало, теперь все слова начинаются с пробела, легче работать}
repeat {этот цикл мы повторяем для каждого предложения с точкой в конце}
k:=0; {обнуляем счётчик слов}
for i:=1 to pos('.',a)-1 do {ищем слова в очередном предложении, когда увидим пробел -начало слова}
if a[i]=' 'then inc(k) else b[k]:=b[k]+a[i]; {и счётчик слов увеличится на 1, а если символ - не пробел, то добавим его к очередному слову}
for i:=1 to k div 2 do {проходим по массиву слов данного предложения до середины}
begin {меняем местами слова 1 - с последним и т.д}
t:=b[i];
b[i]:=b[k-i+1];
b[k-i+1]:=t;
end;
for i:=1 to k do {строим предложение из слов: добавляем после слова пробел, а после последнего- точку}
begin
write(b[i]);
if i<>k then write(' ')else write('. ');
end;
for i:=1 to k do {удаляем из строки первое предложение и заново будем искать точку.}
b[i]:='';
delete(a,1,pos('.',a));
until pos('.',a)=0; {всё повторяем пока в строке не кончатся точки (т.е. предложения)}
readln;
end.