Информатика ЕГЭ 21 задание разбор
Напишите в ответе наименьшее значение входной переменной k, при котором программа выдает тот же ответ, что и при входном значении k=20.
var k, i : longint; function f(n: longint) : longint; begin f := -(n+1) * (n+1) * (n+1); end; function g(n: longint) : longint; begin g := -2*n + 2; end; begin readln(k); i := 1; while f(i) > g(k) do i:= i+1; writeln(i) end.
Ответ: 15
- функция f возвращает отрицательный куб увеличенного на единицу параметра этой функции (если i=1, то n=1, функция f(n) возвратит -2 3 ):
- значение функции g зависит только от введенного k, т.к. k является параметром функции; значение g(k) постоянно и не меняется в программе (т.к. k не меняется);
- при k = 20 функция g возвращает -38:
- после ввода k проверяется условие цикла, который постоянно увеличивает i на единицу, пока f(i) > g(k) , или, другими словами, пока отрицательное значение куба числа i+1 больше -38:
- построим таблицу значений функции f(i) и самого i: if(i)Работает ли условие цикла при k=201-2 3 =-8-28 > -38 — да2-3 3 =-27-27 > -38 — да3-4 3 =-64-64 > -38 — нет
- т.е. при i = 3 цикл завершится, а при i = 2 цикл еще работает;
- из функции g видим, что чем больше ее аргумент, тем меньшее значение она выдает;
- чтобы найти наименьшее значение k, надо взять наибольшее значение функции g(k) (при таком же значении i), для которого бы цикл еще продолжал работать, это число -28:
- для того чтобы найти k, подставим значение в функцию g(k):
- поскольку n — это и есть k, то k = 15
Напишите в ответе наибольшее значение входной переменной k, при котором программа выдает тот же ответ, что и при входном значении k=9.
var k, i: longint; function f(n: longint): longint; begin f := -n * (n + 1); end; function g(n: longint): longint; begin g := -2 * n + 2; end; begin readln(k); i := 1; while f(i) > g(k) do i := i + 1; writeln(i) end.
Ответ: 11
- функция f возвращает произведение числа на последующее число со знаком минус (если i=2, то n=2, функция f(n) возвратит -2 * 3):
- значение функции g зависит только от введенного k, т.к. k является параметром функции; значение g(k) постоянно и не меняется в программе (т.к. k не меняется);
- при k = 9 функция g возвращает -16:
- после ввода k проверяется условие цикла, который постоянно увеличивает i на единицу, пока f(i) > g(k) , или, другими словами, пока -i * (i+1) больше -16:
- построим таблицу значений функции f(i) и самого i: if(i)Работает ли условие цикла при k=91-1*2 =-2-2 > -16 — да2-2*3 =-6-6 > -16 — да3-3*4=-12-12 > -16 — да4-4*5=-20-20 > -16- нет
- т.е. при i = 4 цикл завершится, а при i = 3 цикл еще работает;
- построим систему уравнений:
- найдем k согласно значениям промежутка:
- получаем k в промежутке:
- Наибольшее k на этом промежутке: k = 11 .
Напишите в ответе число, равное количеству различных значений входной переменной k, при которых приведённая ниже программа выводит тот же ответ, что и при входном значении k=14. Значение k=14 также включается в подсчёт различных значений k.
var k, i: longint; function f(n: longint): longint; begin f := 2 * n * n + 5; end; begin readln(k); i := 1; while f(i) < k do i := i + 1; if f(i) - k <= k - f(i - 1) then writeln(i) else writeln(i - 1); end.
Ответ: 8
2. Поиск числа, которое будет напечатано (график параболы)Определите, какое число будет напечатано в результате выполнения следующего алгоритма.
var a,b,t,M,R : integer; function F(x: integer) : integer; begin F := 4 * (x+2)*(x-4); end; begin a:=-20; b:=20; M:=a; R:= F(a); for t:=a to b do begin if (F(t)<R) then begin M:=t; R:=F(t); end; end; write(M); end.
Ответ: 1
- В цикле происходит поиск наименьшего значения функции F(t) на отрезке от a до b (строка 12 программы).
- В функции F - квадратное уравнение, которое на графике представляет собой параболу. t - это точка x параболы, а F(t) - у параболы. То есть в цикле организован поиск наименьшего y на отрезке параболы от a до b.
- Преобразуем квадратное уравнение:
- Так как программа выводит на экран M (М - это и есть х), то нам необходимо найти такой x, при котором функция F(x) возвращает наименьшее значение.
- Из уравнения видим, что ветви параболы направлены вверх (старший коэффициент 4x 2 - положительный). Парабола может выглядеть примерно так:
Определите, какое число будет напечатано в результате выполнения следующего алгоритма.
var a,b,t,M,R : integer; function F(x: integer) : integer; begin F := -3 * (x+2)*(x-6); end; begin a:=-20; b:=20; M:=a; R:= F(a); for t:=a to b do begin if (F(t)<R) then begin M:=t; R:=F(t); end; end; write(M); end.
Ответ: -20
- В цикле происходит поиск наименьшего значения функции F(t) на отрезке от a до b.
- В самой функции F - квадратное уравнение, что означает на графике параболу. Тогда t - это точка x параболы, а F(t) - у параболы. То есть в цикле организован поиск наименьшего y на отрезке параболы от a до b.
- Преобразуем квадратное уравнение:
- Так как программа выводит на экран значение M, то необходимо найти такой x, при котором функция F(x) выдает наименьшее значение (М - это и есть х).
- Из уравнения видим, что ветви параболы направлены вниз (старший коэффициент -3x 2 - отрицательный)
- Так как мы рассматриваем только интервал от -20 до 20, то наименьшее значение y на этом промежутке параболы будет либо в точке x=-20, либо в точке x=20.
y минимален либо при х=20, либо при х=-20
Определите, какое целое значение H нужно ввести, чтобы число, напечатанное в результате выполнения следующего алгоритма, было наибольшим. Если таких значений несколько, то в ответ запишите минимальное из них.
var a,b,t,M,R,H : integer; function F(H, x: integer) : integer; begin F := (x-10)*(x-H); end; begin readln(H); a:=-20; b:=40; M:=a; R:= F(H,a); for t:=a to b do begin if (F(H,t)<R) then begin M:=t; R:=F(H,t); end; end; write(M); end.
Ответ: 70
- В цикле происходит поиск наименьшего значения функции F(H,t) на отрезке от a до b.
- Величина H в программе не изменяется, то есть выполняет роль константы; она передаётся в функцию и влияет на значение функции.
- В самой функции F - квадратное уравнение, что означает, что график этой функции - парабола. Тогда t - это точка оси x параболы, а F(H,t) - у параболы. То есть в цикле организован поиск наименьшего y на отрезке параболы от a до b.
- Рассмотрим квадратное уравнение:
- Так как в результате работы программы выводится M, то нам необходимо найти такой x, при котором функция F(H,x) выдает наименьшее значение (М - это и есть х).
- Из уравнения видим, что ветви параболы направлены вверх (старший коэффициент 1*x 2 - положительный). Парабола может иметь такой вид:
Напишите в ответе число, которое будет напечатано в результате выполнения следующего алгоритма.
var a, b, t, M, R :longint; function F(x: longint): longint; begin F:= 2*(x*x-1)*(x*x-1)+27; end; begin a:=-20; b:=20; M:=a; R:=F(a); for t:= a to b do begin if (F(t) <= R) then begin M:=t; R:=F(t) end end; write(M+R) end.
Ответ: 28
-
Рассмотрим алгоритм:
Определите число, которое будет напечатано в результате выполнения следующего алгоритма.
var a, b, t, M, R : longint; function F(x: longint) : longint; begin F := abs(abs(x - 6) + abs(x + 6) - 16) + 2; end; begin a := -20; b := 20; M := a; R := F(a); for t := a to b do begin if (F(t) <= R) then begin M := t; R := F(t) end end; write(M + R) end.
Ответ: 10
- В 9-й строке алгоритма программы находится цикл, счетчик которого (t) принимает целые значения в интервале от a (-20) до b (20):
- В начале программы переменной M присваивается значение a, а переменной R присваивается результат функции с параметром a (в точке a):
- В цикле с помощью условного оператора сравнивается значение функции F(t) со значением переменной R. В случае истинности условия в R присваивается меньшее значение функции, а в M присваивается параметр функции, которая возвратила меньшее значение.
- Таким образом, в цикле происходит поиск минимума функции F(t) на интервале от a до b. В итоге в переменной M оказывается значение параметра t, при котором функция достигает минимума на интервале от a до b.
- Перепишем функцию в более понятном виде:
- Рассмотрев функцию, можно сказать, что на графике она имеет минимумы в тех точках, где выполняется равенство:
- Решим данное уравнение:
- в скобках под знаком модуля необходимо получить нули и отметить данные точки на числовой оси:
- для интервала (–∞; –6) раскроем модули, установив их с обратным знаком:
- полученное значение -8 находится в интервале (–∞; –6), поэтому является решением уравнения;
- раскроем модули для полуинтервала [–6; 6):
- раскроем модули для полуинтервала [6; ∞):
- полученное значение принадлежит полуинтервалу [6; ∞), значит, является решением уравнения.
- Таким образом, мы нашли точки минимума (x = – 8 и x = 8), которые принадлежат отрезку [–20; 20].
- В обеих полученных точках значение функции равно 2, какую же точку необходимо считать за минимум? Поскольку в условии F(t)
Определите число, которое будет напечатано в результате выполнения следующего алгоритма.
var a, b, t, М, R: longint; function F(x: longint): longint; begin F := abs(x - 4) + abs(x + 6) + abs(2 * x - 14) + 2; end; begin a := -20;b := 20; M := a;R := F(a); for t := a to b do begin if (F(t) <= R) then begin M := t; R := F(t) end end; write(M + R) end.