Function Intg(p, b: real; n: integer; eps: real): real; {Метод прямоугольников, рекурсия} var a, x, h, s: real; i: integer; begin a := 0; h := (b - a) / n; x := a; s := 0; for i := 1 to n do begin s := s + sin(x); x := x + h; end; if abs(s * h - p) > eps then Intg := Intg(s * h, b, 2 * n, eps) else Intg := s * h; end;
var b, eps: real;
begin write('Задайте верхний предел интегрирования и точность: '); Readln(b, eps); writeln('Значение интеграла: ', Intg(0, b, 2, eps):0:7); end.
Тестовое решение:
Задайте верхний предел интегрирования и точность: 2 0.000001 Значение интеграла: 1.4161460
Точное значение интеграла равно 1-cos(2) ≈1.416146836, т.е. заданная точность обеспечивается.
Смотрим на предназначение переменных L и M: L - счетчик того, сколько раз выполняется условие цикла (while x > 0). Т.к. в конце программы L становится равным 2, значит условие цикла (while x > 0) выполняется 2 раза. M, судя по условию (if M < x mod 10) - максимальная цифра числа x, т.к. x mod 10 - это остаток от деления числа x на десять. В конце цикла while x приравнивается x div 10; кроме того, после 2 проходов цикла, x стало равным 0. Это дает нам право считать, что начальное число x было двузначным. Т.к. в конце программы M становится равным 8, значит максимальная цифра в числе x - это 8. Значит изначально число x могло быть равно: 18 28 38 48 58 68 78 80 81 82 83 84 85 86 87 88 Т.к. требуется наибольшее, то выбираем 88.
Объяснение:
>[01.09.2020] вот