карта : гостевая

 
 

Пример по решению задач B14 с использованием цикла с предусловием (while)

Определите, что будет напечатано в результате работы следующего фрагмента программы:
Var a,b,t,M,R :integer;
Function F(x:integer):integer;
begin  F := 3 * (x -  10 ) * ( x -  4 );
end;
BEGIN
  a:=-20; b:=20;
  M:=a; R:=F(a);
  t:=a;
  while t<b do begin
    if (F(t)<R)then begin
      M:=t;
      R:=F(t);
    end;
    t:=t+2;
  end;
  write(R);
  write(M);
END.

Решение:

1)            Анализируя программу, замечаем, что в программе есть цикл с предусловием, в котором переменная t принимает целые значения в интервале от a до b с шагом =2:

t:=a;
while t<b do begin
...
t:+t+2;
end;

2)            до начала цикла в переменную M записывается значение a, а в переменную R – значение функции в точке a:
M:=a; R:=F(a);

3) внутри цикла есть условный оператор, в котором вычисляется значение функции F(t) и сравнивается со значением переменной R:
if (F(t)<R)then begin
M:=t;
R:=F(t);
end;

если новое значение функции меньше, чем значение R, в R записывается значение функции в точке t, а в переменной M запоминается само значение t (аргумент функции, соответствующий значению в R)

4)            в результате анализа пп. 1-3 можно сделать вывод, что цикл ищет минимум функции F(t) на интервале от a до b, и после выполнения цикла в переменной M оказывается значение аргумента t, при котором функция достигает минимума на заданном интервале (здесь это интервал [-20, 20]), а в переменной R сохраняется значение самой функции

5)            функция F вычисляет значение F := 3 * (x - 10) * (x - 4);
6)            Видим, что программа ищет минимальное значение функции F(x) на интервале от a до b.
7)            запишем функцию в виде квадратного трёхчлена: F(x) = 3(x - 10)(x - 4) = 3(x^2 - 14x + 40)
8)            график этой функции – парабола, оси которой направлены вверх, поэтому функция имеет минимум
9)            найдем абсциссу точки минимума, которая совпадает с абсциссой точки минимума функции

F(x) = (x^2 - 14x + 40) => Xmin = -b / 2a = -(-14)/2*1 = 7

10) подставляя найденное значение в заданную функцию, находим соответствующее значение:

F(7) = 3(x - 10)(x - 4) = 3(7 - 10)(7 - 4) = -27

Далее рассуждаем следующим образом: начальное значение заданного диапазона -20. Шаг алгоритма = 2 следовательно значения принимаемые переменной х будут следующими:
-20
-18
-16
….
6
8
10
….
20

Найденное нами значение лежит между числами 6 и 8 – исследуем их

Х=6; F(6)  = 3 * (6 -  10 ) * ( 6 -  4 ) = -24;
Х=7; F(7)  = 3 * (7 -  10 ) * ( 7 -  4 ) = -27;
Х=8; F(8)  = 3 * (8 -  10 ) * ( 8 -  4 ) = -24;

Вспомним вывод, который мы получили на странице: Инструкция по решению задач B14 с использованием цикла с предусловием
Алгоритм программ из заданий В14 запоминает и выводит на печать min (max) функции в случае если шаг его цикла равен 1, в противном случае он запоминает ПЕРВОЕ наименьшее (наибольшее) значение для заданной функции в заданном диапазоне и для заданного шага.

Откуда становится понятно, что правильный ответ: -246 т.е. программа вначале напечатает -24, а затем на этой же строке выведет еще и 6.

 
  © Александр Козлов, 2014
671717 г.Северобайкальск
 
Рейтинг@Mail.ru