С клавиатуры вводится строка, состоящая из слов, разделенных пробелами. Инвертировать все четные слова в этой строке — Pascal(Паскаль)

uses crt;
var
   a:array [1..100] of string;
   z,n:integer;
   d:string;
function words(s:string; var b:array of string):integer;
var
   i,j:integer;
begin
     j:=1;
     for i:=1 to length(s) do
         if s[i]<>' ' then
            b[j]:=b[j]+s[i]
          else
              if s[i+1]<>' ' then
                 j:=j+1;
     words:=j+1;
 
end;
function invert(s:string):string;
var
   i:integer;
   st:string;
begin
     st:='';
     for i:=length(s) downto 1 do
         st:=st+s[i];
     invert:=st;
end;
begin
     clrscr;
     readln(d);
     n:=words(d,a);
     for z:=1 to n do
         if z mod 2=1 then
            write(invert(a[z]),' ')
         else
            write(a[z],' ');
 
     readln;
end.

Следующий вариант

uses crt;
var s,s1,s2:string;
    n,i,j,k:byte;
    c:char;
begin
clrscr;
writeln('Введите последовательность слов, разделенных пробелами');
readln(s);
s2:='';
i:=1;n:=0;
while i<=length(s) do
if (s[i]<>' ')and ((s[i-1]=' ')or(i=1)) then{если буква, а перед ней пробел, или она первая}
 begin
  k:=i;s1:='';n:=n+1;
  while (s[k]<>' ')and(k<=length(s))do {пока не пробел и не конец строки}
   begin
    s1:=s1+s[k];
    k:=k+1;{идем вперед}
   end;
  if n mod 2=0 then{если номер четный}
  for j:=1 to length(s1)div 2 do
   begin
    c:=s1[j];
    s1[j]:=s1[length(s1)-j+1];{переворачиваем слово}
    s1[length(s1)-j+1]:=c;
   end;
  s2:=s2+s1; {пишем в новую строку}
  i:=i+length(s1);{перепрыгиваем}
 end
else
 begin
  s2:=s2+s[i];{если не слово, пишем и идем вперед}
  i:=i+1;
 end;
write(s2);
readln
end.

Leave a Comment

4 + 3 =