Рассмотрим страшную задачу B14 из демонстрационной версии ЕГЭ 2013 года по теме«Анализ алгоритма / программы»

Задача:

Определите, какое число будет напечатано в результате выполнения следующего алгоритма.

var a,b,t,M,R :integer;
Function F(x:integer):integer; begin F := 3*(x-8)*(x-8) 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.

Решение:

Если скопировать предложенную программу в среду программирования (например, Pascal ABC) и запустить то ответ появится сразу на экране, но, разумеется, необходимо самому найти решение.

Прежде всего определим, Что это задача на анализ алгоритма, а значит будем анализировать программный код.

  • в программе описана функция F(x) = 3(x-8)2
  • искомая переменная M изначальна равна F(-20) = 3·(-28)2 вычислять это, разумеется, не нужно!
  • в результате выполнения цикла переменная M может перееопределяться и принимать значения t принимая значения в интервале [-20, 20].
  • переопределение происходит в случае если F(t)<R
  • после переопределения M (M принимает значение t) происходит переопределение R (R := F(t))

Теперь когда ход алгоритма ясен, замечаем, что переопределение M будет происходить в начале на каждом витке цикла:

3·(-27)2 < 3·(-28)2

3·(-26)2 < 3·(-27)2

Это будет происходить до тех пор пока будет происходить уменьшение функции на заданном интервале, т.е. пока функция не достигнет своего минимума.

Минимум функции F(t) достигается при t=8. Далее функция будет возрастать, а значит переопределения переменной M Последнее значение, которое примет функция M=8.

Ответ: программа выведет на экран число 8.