На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Rust
  
> ЕГЭ по информатике 2020, часть 1, № 21, анализ программы с процедурами и функциями
    ЕГЭ по информатике 2020, вариант Москва
    Часть 1, № 21
    Анализ программы с процедурами и функциями
    Задание взято с сайта
    http://kotolis.ru/realegeinf_2020

    Условие. Напишите в ответе число, которое будет указано в результате выполнения алгоритма. Программа приведена на четырёх языках программирования.
    user posted image

    Решение.
    Программа на Паскале:
    var a, b, t, M, R: integer;
    ExpandedWrap disabled
      function F(x: integer): integer;
         begin
            F:= 2(x*x – 9)*(x*x – 9) + 5
         end;
      begin
         a:= -20; b:= 20;
         M:= a; R:= F(a);
         for t:= a to b do
              if (F(t) < R) then begin
                 M:= t; R:= F(t)
         end;
      writeln(M + 18);
      end.


    Вначале ответим на вопрос, что делает программа.
    В программе задана некая функция F.
    Затем в точке a вычисляется начальное значение функции F(a).
    Это начальное значение запоминается в переменной R:= F(a), а точка, в которой оно вычислено, запоминается в переменной M:= a.
    Затем в цикле мы идём по целочисленным точкам t от a до b, в каждой точке вычисляем значение функции F(t) и сравниваем его с R:
    если новое значение F(t) оказывается меньше R, то оно запоминается в R и M.
    Программа ищет минимум функции F в целочисленных точках в диапазоне от a до b, запоминает последнюю точку M, на которой этот минимум достигается (точка минимума может быть не единственна!) и печатает значение M + 18.

    Задача не такая простая, поиск минимума функции – дело ответственное.
    Потому что нужно не только найти точки минимума функции, но и обязательно проверить, попадают ли эти точки в заданный диапазон от a до b. Диапазон могут задать и так, что все точки минимума окажутся вне диапазона. И как быть в таком случае?
    Конечно, можно построить график функции на заданном отрезке [a, b], определить участки, где функция монотонно возрастает/убывает и найти точки минимума. Или сделать то же самое с помощью производной. Но, поскольку функция имеет специальный вид, обойдёмся и без графика, и без производной.

    Итак, нужно найти минимум дискретной функции 2(x*x – 9)*(x*x – 9) + 5, заданной в целочисленных точках отрезка [-20, +20].
    Не будем пока обращать внимание на диапазон.
    1. Минимум функции 2(x*x – 9)*(x*x – 9) + 5 находится в тех же точках, что и минимум функции 2(x*x – 9)*(x*x – 9).
    2. Минимум функции 2(x*x – 9)*(x*x – 9) находится в тех же точках, что и минимум функции (x*x – 9)*(x*x – 9).
    (Вот если бы умножали на –2, тогда бы минимум функции –2(x*x – 9)*(x*x – 9) соответствовал максимуму функции (x*x – 9)*(x*x – 9)).
    3) Функция (x*x – 9)^2 всегда неотрицательна, потому что это квадрат.
    Минимальное значение квадрата – 0.
    (x*x – 9)^2 = 0, x*x – 9 = 0, x*x = 9
    x1 = –3, x2 = 3.
    Обе точки попадают в заданный диапазон.
    Но вначале в цикле встречаем точку –3 и запоминаем её в M как точку минимума. Для точки 3 условие уже не выполнится.

    Ответ: 15 .

    Теперь рассмотрим случай, когда обе точки минимума не попадают в заданный диапазон.
    Например, был бы задан диапазон [–20, –10] или [10, 20].
    Рассмотрим диапазон [–20, –10].
    Так как x в квадрате, то чем больше абсолютная величина |x|, тем больше (x*x – 9)^2. На отрезке [–20, –10] функция (x*x – 9)^2 монотонно убывает, максимум в точке –20, минимум в точке –10.
    Аналогично, на отрезке [10, 20] функция монотонно возрастает, минимум в точке 10, максимум в точке 20.
    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0,0142 ]   [ 14 queries used ]   [ Generated: 24.07.21, 08:38 GMT ]