В
Все
М
Математика
О
ОБЖ
У
Українська мова
Д
Другие предметы
Х
Химия
М
Музыка
Н
Немецкий язык
Б
Беларуская мова
Э
Экономика
Ф
Физика
Б
Биология
О
Окружающий мир
Р
Русский язык
У
Українська література
Ф
Французский язык
П
Психология
А
Алгебра
О
Обществознание
М
МХК
В
Видео-ответы
Г
География
П
Право
Г
Геометрия
А
Английский язык
И
Информатика
Қ
Қазақ тiлi
Л
Литература
И
История
kotuk333
kotuk333
15.02.2021 21:49 •  Информатика

1. Почему другие программы не имеют доступа к открытому в программе файлу, когда он заблокирован в соответствии с правилами?
2. Почему рекомендуется закрывать файлы вручную, если
при закрытии программы файлы закрываются автоматически? В каких случаях это имеет значение?
3. Почему, когда нужно работать с файлами, используется
переменная файла, а не его имя?

Показать ответ
Ответ:
avamini2007
avamini2007
25.07.2020 16:53
Представим, что мы знаем ответ на вопрос "чему равна сумма всех выписанных чисел при выполнении вызова F(n)" для всех n < k. Попробуем понять, как найти ответ для n = k.

Что делает F(n)? Читаем текст программы: сначала выводит n, а потом (если n > 0) запускает F(n - 1) и F(n - 3). Обозначим S(n) - сумму всех чисел после вызова F(n), тогда (при n > 0) 
S(n) = n + S(n - 1) + S(n - 3)

Для неположительных n получаем, что S(n) = n (т.к. F(n) просто выводит n и завершает работу, не запуская никаких других F).

Остается только расписать, чему равно S(5)...
S(-2) = -2
S(-1) = -1
S(0) = 0
S(1) = 1 + S(0) + S(-2) = 1 + 0 - 2 = -1
S(2) = 2 + S(1) + S(-1) = 2 - 1 - 1 = 0
S(3) = 3 + S(2) + S(0) = 3 + 0 + 0 = 3
S(4) = 4 + S(3) + S(1) = 4 + 3 - 1 = 6
S(5) = 5 + S(4) + S(2) = 5 + 6 + 0 = 11

ответ. 11.



При исследовании рекурсивных алгоритмов бывает полезно понять, сколько вызовов функций делает программа (например, если рисовать дерево вызовов, это будет показывать количество "стрелочек" на этом дереве). Представим себе, что мы стали выполнять алгоритм на бумаге, попробуем понять, сколько чисел придется выписывать.
Если #(N) - число вызовов процедуры F при наивном вычислении F(N). Понятно, что #(N) = #(N - 1) + #(N - 3) (при N <= 0 #(N) = 1). Не задаваясь целью получить точную формулу для #(N), получим только оценку (на самом деле, весьма показательную).
Очевидно, что #(N - 1) >= #(N - 3), тогда #(N) >= 2 * #(N - 3).
Так как #(0) = 1, то #(3) >= 2 * #(0) = 2, #(6) >= 2 * #(3) >= 2^2, #(9) >= 2 * #(6) >= 2^3, и вообще #(3N) >= 2^N
Отсюда можно предположить, что #(N) растет не медленнее, чем 2^(N/3) >= 1.25^N. Если 1,25^N кажется медленно растущей функцией - это вовсе не так, для N = 100 (это немного, наверно?) получим число, большее миллиарда. Так что если не запоминать промежуточные результаты, результат будет считаться ооочень долго. S(N) также растет быстро, но это уже другая проблема.
0,0(0 оценок)
Ответ:
Catania2
Catania2
10.08.2022 04:34
Преобразуем левую часть уравнения с использованием схемы Горнера:
x^3+2x^2+3x+5=0; \ 5+x(3+x(2+x))=0

PascalABC.Net
function f(x: real): real;
begin
  f := 5+x*(3+x*(2+x));
end;

var
  a, b, x, fa, fb, fx, eps: real;

begin
  Write('Введите через пробел границы интервала [a;b] и точность:');
  Readln(a, b, eps);
  fa := f(a);
  if abs(fa) <= eps then Writeln('x=', a, ', y=', fa)
  else begin
    fb := f(b);
    if abs(fb) <= eps then Writeln('x=', b, ', y=', fb)
    else
    if fa * fb > 0 then Writeln('На указанном интервале корней нет')
    else
      repeat
        x := (a + b) / 2;
        fx := f(x);
        if abs(fx) <= eps then Writeln('x=', x, ', y=', fx)
          else
        if fa * fx > 0 then a := x else b := x;
      until abs(fx) <= eps
  end
end.

Результат решения:
Введите через пробел границы интервала [a;b] и точность:-2 -1 0.01
x=-1.84375, y=-9.1552734375E-05
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота