Проверить программы онлайн · файлы остаются в браузере
10 класс, углублённый уровень. Занятие четырнадцатое. Уравнение, для которого нет формулы, решают приближённо: отделяют корни перебором с шагом и уточняют каждый половинным делением — до нужной точности.
Проверка.bat из общей папки: она запускает программу на девяти наборах
данных и сверяет найденные корни с точными. Интернет не нужен.
Шесть типов задач, по одной на каждый. Считать в уме или на бумаге: выпиши
столбиком, что происходит на каждом шаге цикла. Ответ — всё напечатанное через
пробел, так, как печатает Python: вещественное число с точкой (2.0, а не
2), дробная часть через точку, а не через запятую. Ошибся — ниже
появится разбор рисунком: таблица шагов и что напечатано, — и кнопка «Новые числа»:
реши такую же ещё раз.
Если функция непрерывна, а на концах отрезка у неё разные знаки, на этом отрезке
есть корень: от минуса к плюсу нельзя перейти, не пройдя через ноль. Проверка одной
строкой — произведение меньше нуля: f(a) * f(b) < 0.
Одинаковые знаки ничего не гарантируют: корней может не быть, а может быть два.
Программа печатает отрезки -3 -2, 0 1, 2 3 —
на каждом по корню. Последний x в range(a, b) — это
b − 1, поэтому отрезок [b − 1; b] тоже проверен.
Каждый шаг вдвое укорачивает отрезок, где лежит корень. От длины 1 до 0.001 —
всего 10 шагов: 2¹⁰ = 1024. Перебор с шагом 0.001 потратил бы тысячу вычислений.
Знак <=, а не <: если середина попала точно в корень,
f(c) = 0 — корень остаётся на отрезке.
Деление / всегда даёт вещественное число: 10 / 5 — это
2.0. Вещественные хранятся приближённо (0.1 + 0.2 — это
0.30000000000000004), поэтому их не сравнивают через ==, а цикл
пишут через «длина больше точности». Ровно три знака после точки печатает
f"{x:.3f}"; round(x, 3) для этого не годится — у него
round(2.0, 3) это 2.0.
zadanie1.py, zadanie2.py,
zadanie3.py — в одну новую папку.input(). Пиши input(), а
не input("Введите N: ") — вывод читает машина.Программа читает в первой строке два целых числа
и
, во второй — два целых
и
(−10 ≤ a < b ≤ 10). Для уравнения x³ + p·x + q = 0 она печатает все отрезки
[x; x + 1] с целыми концами внутри [a; b], на концах которых f(x) = x³ + p·x + q разного
знака, — каждый отрезок в своей строке, слева направо. Если таких нет — строку
. В целых точках f(x) ≠ 0 — это гарантируется.
-7 1 -5 5
-3 -2 0 1 2 3
Проверяется: три отрезка, ни одного, корень в последнем отрезке [b − 1; b], отрезки левее нуля и случайные уравнения.
Функция — она видит
и
программы. Дальше цикл
и условие
.
Нашёлся ли хоть один отрезок — запомни в переменной
, после цикла проверь.
Программа читает натуральное
(1 ≤ N ≤ 1000) и печатает корень уравнения x³ + x = N с точностью 0.001 — ровно три
знака после точки. Корень лежит на отрезке [0; N]: функция x³ + x − N на нём
возрастает от отрицательного значения к положительному.
15
2.331
Проверяется: N = 1 (корень меньше единицы), N = 2 и N = 10 (корни целые: 1 и 2), N = 1000 и случайные.
Отрезок ,
; цикл
, середина
; если
—
, иначе
.
После цикла печать
для середины последнего отрезка.
Ловушка. При N = 2 первая же середина — ровно корень 1, и f(c) = 0. Со
знаком вместо
программа решит, что корень
справа, и уйдёт к 2.000.
Программа читает те же данные, что задание 1:
и
, потом
и
. Она находит все корни
уравнения x³ + p·x + q = 0 на отрезке [a; b] с точностью 0.001 и печатает их по
возрастанию, каждый в своей строке, ровно с тремя знаками после точки. Если корней
нет —
. Гарантируется: в целых точках f ≠ 0, и в каждом
отрезке [x; x + 1] не больше одного корня.
-7 1 -5 5
-2.714 0.143 2.571
Проверяется: три корня, ни одного, корень в последнем отрезке, отрицательный корень и случайные уравнения.
Это задание 1 и задание 2 вместе. Отделение — тот же цикл по отрезкам; а вместо
печати отрезка — уточнение корня на нём половинным делением. Деление удобно
вынести в функцию , которая возвращает середину
последнего отрезка.
print убраны.Проверка.bat.Оболочка показывает, на каких данных программа ошиблась, что она вывела и что должна была. Исправляй и проверяй снова, попыток сколько угодно. Отметка: три задания — «5», два — «4», одно — «3».
Корень уравнения f(x) = 0 ищут приближённо: считают f в разных точках и сужают место, где лежит корень, до нужной точности.
Непрерывная f разного знака на концах отрезка — на нём есть корень. Проверка: f(a) * f(b) < 0. Одинаковые знаки ничего не гарантируют.
Перебор с шагом: for x in range(a, b), условие f(x) * f(x + 1) < 0 — на отрезке [x; x + 1] корень. Последний x — это b − 1.
Пока b − a больше точности: c = (a + b) / 2; если f(a) * f(c) <= 0 — b = c, иначе a = c. Ответ — середина последнего отрезка, ошибка не больше половины точности.
Каждый шаг делит отрезок пополам: из длины 1 до 0.001 — 10 шагов, потому что 2¹⁰ = 1024. Перебор с шагом 0.001 — тысяча вычислений.
/ всегда даёт вещественное: 10 / 5 это 2.0. Вещественные не сравнивают через ==. Три знака после точки — f"{x:.3f}".
Материалы подготовлены с использованием технологий искусственного интеллекта.