• Предмет: Информатика
  • Автор: alina123909
  • Вопрос задан 2 года назад

Помогите написать программу в Паскале Строки 1. Дана последовательность, содержащая до 5 слов, в каждом из которых до 5 строчных латинских букв; между соседними словами — не менее одного пробела, за последним словом — точка. Напечатать все слова последовательности, предварительно преобразовав каждое из них по следующему правилу: 1) перенести первую букву в конец слова; 2) если слово нечетной длины, то удалить его среднюю букву.

Ответы

Ответ дал: BobbyFresnel
0

// PascalABC.NET 3.6.3

function Cnv(s: string): string;

begin

 var n := s.Length;

 if s[n] = '.' then begin

   s := s[:n];

   Dec(n)

 end;

 if n <= 1 then Result := s

 else

 begin

   if n.IsOdd then begin

     s := s[:n div 2 + 1] + s[n div 2 + 2:];

     Dec(n)

   end;

   Result := s[n] + s[2:n] + s[1]

 end

end;

begin

 var a := ReadString.ToWords;

 a.Select(s -> Cnv(s)).Print

end.


LRSM: По условию задания, слова необходимо преобразовать, а не спроецировать. Также в задании сказано "перенести первую букву в конец слова" и "если слово нечетной длины, то удалить его среднюю букву". О переносе последней буквы в начало слова не идёт никакой речи.
BobbyFresnel: Преобразовать - это всего лишь получить новое значение в этой же переменной. В отличие от вывода значения, при котором значение переменной не изменяется. Безотносительно к способу. К тому же, особенности .NET-языков (и, в частности, PascalABС.NET) таковы, что строки в них являются неизменяемыми. Поэтому преобразоватть строку "на месте" можно лишь используя объекты класса StringBuilder, а это уже совсем другая история.
BobbyFresnel: А вот насчет того, что переносить последнюю букву в начало не надо было - Вы правы, увлекся ))
BobbyFresnel: Возвращаясь к преобразованию, Поскольку "преобразованное" значение используется только для вывода, счел возможным сохранение измененного значения не делать.
Ответ дал: LRSM
0

PascalABC.NET

Ответ:

  • begin
  • var a := ReadString[:^1].ToWords;
  • a.Transform(x -> x.Length.IsEven ? x?[2:]+x[1] : x?[2:x.Length div 2 + 1]+x?[x.Length div 2 + 2:]+x[1]);
  • a.Print
  • end.

Пример работы:

Приложения:
Вас заинтересует