Помогите решить задачу Pascal

0 голосов
11 просмотров

Помогите решить задачу Pascal


image

Информатика (15 баллов) | 11 просмотров
Дан 1 ответ
0 голосов
Правильный ответ
// PascalABC.NET 3.3, сборка 1625 от 17.01.2018
// Внимание! Если программа не работает, обновите версию!

begin
  var x:=ReadReal('x=');
  var n:=ReadInteger('n=');
  var s:=ArrGen(n,i->Exp(Cos(x**(2*(i+1))))*Sin(x**(3*(i+1))));
  Writeln('Max=',s.Max,', min=',s.Min);
  var imin:=s.Select(t->Abs(t-t.Round)).ToArray.IndexMin;
  Writeln('Наиболее близкое к целому значение ',s[imin])
end.

Пример
x= 1.18
n= 15
Max=1.48553688166094, min=-1.27821497881311
Наиболее близкое к целому значение -0.919158357440861

Вариант без массива (экономия памяти)

begin
  var x:=ReadReal('x=');
  var n:=ReadInteger('n=');
  var s:=SeqGen(n,i->Exp(Cos(x**(2*(i+1))))*Sin(x**(3*(i+1))));
  Writeln('Max=',s.Max,', min=',s.Min);
  var imin:=s.Select(t->Abs(t-t.Round)).ToArray.IndexMin;
  Write('Наиболее близкое к целому значение ');
  if imin=0 then Writeln(s.First)
  else Writeln(s.Skip(imin).Take(1).Single)
end.
(150k баллов)
0

Спасибо большое