Предмет: Информатика, автор: daryacat7923

Дана последовательность, содержащая от 2 до 30 слов, в каждом из
которых от 2 до 10 латинских букв, между соседними словами заданы не менее одного пробела, за последним словом точка. Напечатать все слова, отличные от последнего слова, предварительно преобразовав каждое из них по следующему
правилу: если слово нечетной длины, то удалить его среднюю букву.

Ответы

Автор ответа: Fixsix
0

Ответ:

uses crt;

const   m=30;

const   n=10;

var      i,j:integer;

         c:char;

         a:array[1..m,1..n] of char;

         fl,error_n:boolean;

begin

for i:=1 to m do

for j:=1 to n do

a[i,j]:=' ';

j:=1; i:=0; c := '1';  error_n := false;

writeln('Введите от 2-х до',m,'слово длинной не болеее 10 символов. В конце поставьте точку.');

while c <> '.' do

 begin

  inc(i);

  read(c);

  while c = ' ' do read(c);

  while (c <> ' ') and (c <> '.') do

   begin

    a[i,j] := c;

    read(c);

    inc(j);

   end;

  if j = 2 then error_n := true;

  j := 1;

 end;

if error_n then writeln(', Ошибка!!! Присутствуют слова, длина которых меньше 2');

if i = 1 then writeln ('Ошибка!!! Кол-во слов меньше 2');

readln;

if error_n or (i = 1) then writeln('Имеются ошибки. Перезапустите программу и введите корректные данные')

else

for i:=2 to m do

begin

 fl:=true;

 j := 1;

 while ((a[i,j] <> ' ')and (a[i,1]<>' ')) and fl do

  begin

   if a[i,j] <> a[1,j] then fl := false;

   inc(j);

  end;

   if (a[i,j] <> ' ')or (a[1,j]<>' ') then fl := false;

 j := 1;

 if not fl then

  begin

   while a[i,j+1] <> ' ' do inc(j);

   for j:=j to n-1 do a[i,j]:=a[i,j];

   for j:=1 to n do write(a[i,j]);

  end;

end;

end.

Объяснение:

Похожие вопросы
Предмет: Математика, автор: 546890765