
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.174] |
![]() |
|
Сообщ.
#1
,
|
|
|
ЕГЭ по информатике 2020, вариант Москва
Часть 1, № 21 Анализ программы с процедурами и функциями Задание взято с сайта http://kotolis.ru/realegeinf_2020 Условие. Напишите в ответе число, которое будет указано в результате выполнения алгоритма. Программа приведена на четырёх языках программирования. ![]() Решение. Программа на Паскале: var a, b, t, M, R: integer; ![]() ![]() 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. |