var i, k: integer;. function F(x:integer):longint;. if x = 1 then. else F:=x*F(x-1);. readln(K);. while (i>0) and (F(i) > K) do
var i, k: integer; function F(x: integer): longint; begin if x = 1 then F: =1 else F: =x*F(x-1); end; begin i: = 12; readln(K); while (i> 0) and (F(i) > K) do i: =i-1; writeln(i); end. Решение: 1) заметим, что рекурсивная функция F(x) вычисляет факториал переданного ей числа, то есть произведение x! =1× 2× 3×... × (x-1) × x 2) повторяя рассуждения предыдущей задачи, определяем, что функция выведет количество натуральных чисел, факториалы которых меньше или равны K 3) выпишем факториалы первых натуральных чисел: 1! = 1, 2! = 2, 3! = 6, 4! = 24, 5! = 120, 6! = 720, … 4) из этого ряда факториалы первых четырех чисел меньше или равны 24, поэтому при K=24 функция выведет число 4 5) программа выведет именно 4 при всех K, при которых , то есть при ; в этот диапазон входит 120-24 = 96 чисел 6) Ответ: 96. Ещё пример задания: P-04. Определите, какое число будет напечатано в результате выполнения следующего алгоритма: var a, b, t, N, P: integer; Function F(x: integer): integer; begin F: = 16*(9-x)*(9-x)+127; end; BEGIN a: = -25; b: = 25; P: = 130; N: = 0; for t: = a to b do begin if (F(t) > P) then begin N: = N+1; end; end; write(N); END. Решение: 1) заметим, что в конце работы программы на экран выводится значение переменной N 2) в программе значение N сначала обнуляется, а затем на каждом шаге цикла увеличивается на 1 при условии, что значение функции F(t) больше значения P = 130; таким образом, N – это счётчик точек с целочисленными значениями на отрезке [-25; 25], в которых значение функции больше, чем 130 3) график функция 16*(9-x)*(9-x)+127 – парабола с ветвями вверх, минимальное значение в точке x = 9 равно 127
4) значение функции при x = 8 и x = 10 (рядом с точкой минимума) равны 16+127 = 143, поэтому только в одной точке x = 9 не выполняется условие F(t) > P 5) всего на интервале [-25; 25] есть 51 точка с целочисленными координатами; во всех, за исключением одной условие F(t) > P выполняется, то есть счётчик увеличивается на 1 6) Ответ: 50. Ещё пример задания: P-03. Определите, какое число будет напечатано в результате выполнения следующего алгоритма: Var a, b, t, M, R: integer; Function F(x: integer): integer; begin F: =(x*x-4)*(x*x-4)+6; end; BEGIN a: =-10; b: =10; 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+6); END. Решение: 17) заметим, что в программе есть цикл, в котором переменная t принимает последовательно все целые значения в интервале от a до b: for t: =a to b do begin ... end; 18) до начала цикла в переменную M записывается значение a, а в переменную R – значение функции в точке a: M: =a; R: =F(a); 19) внутри цикла есть условный оператор, в котором вычисляется значение функции F(t) и сравнивается со значением переменной R: if (F(t)< R)then begin M: =t; R: =F(t); end; если новое значение функции меньше, чем значение R, в R записывается значение функции в точке t, а в переменной M запоминается само значение t (аргумент функции, соответствующий значению в R) 20) в результате анализа пп. 1-3 можно сделать вывод, что цикл ищет минимум функции F(t) на интервале от a до b, и после выполнения цикла в переменной M оказывается значение аргумента t, при котором функция достигает минимума на заданном интервале (здесь это интервал [-10, 10]) 21) функция, которая используется в программе, – это квадратичная парабола: , её ветви направлены вверх (коэффициент при положительный, равен 1); она имеет два минимума в точках и
22) обе точки минимума находятся на отрезке [-10; 10], поэтому программа найдёт одну из этих точек; вопрос: какую именно? 23) для квадратичной параболы обе точки минимума имеют одинаковую -координату, а запоминание новой точки минимума происходит только тогда, когда только что вычисленное значение F(t) станет строго меньше, чем хранящееся в переменной R:
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|