Переставить местами слова в каждом предложении (первое с последним, второе с предпоследним и т.д.) — Pascal(Паскаль)

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.

Leave a Comment

− 4 = 5