Задача 8. Яйца
В рамках программы колонизации Марса компания «Спейс Инжиниринг» вывела особую породу черепах, которые, по задумке, должны размножаться, откладывая яйца в марсианском грунте. Откладывать яйца слишком близко к поверхности опасно из-за радиации, а слишком глубоко — из-за давления грунта и недостатка кислорода. Вообще, факторов очень много, но специалисты проделали большую работу и предположили, что уровень опасности для черепашьих яиц рассчитывается по формуле D = x^3 − 3x^2 − 12x + 10, где x — глубина кладки в метрах, а D — уровень опасности в условных единицах. Для тестирования гипотезы нужно взять пробу грунта на безопасной, согласно формуле, глубине.
Напишите программу, находящую такое значение глубины х, при котором уровень опасности как можно более близок к нулю. На вход программе подаётся максимально допустимое отклонение уровня опасности от нуля, а программа должна рассчитать приблизительное значение х, удовлетворяющее этому отклонению. Известно, что глубина точно больше нуля и меньше четырёх метров. Обеспечьте контроль ввода.
Пример:
Введите максимально допустимый уровень опасности: 0.01
Приблизительная глубина безопасной кладки: 0.732421875 м
Python
Помогите решить задачу в питоне, пожалуйста.
Для будущих поколений питонистов
def formula(x):
return x ** 3 - 3 * x ** 2 - 12 * x + 10
# поиск глубины при помощи половинного деления
def calculate_safe_depth(danger_lvl):
min_depth = 0
max_depth = 4
result = (min_depth + max_depth) / 2
# поиск до тех пор пока не удовлетворит заданной точности
while abs(formula(result)) >= danger_lvl:
# какой из сторон точнее, т.е. ближе к 0
if abs(formula(min_depth)) < abs(formula(max_depth)):
max_depth = result
else:
min_depth = result
result = (min_depth + max_depth) / 2
return result
def main_function():
accept_danger_lvl = float(input('Введите максимально допустимый уровень опасности: '))
result = calculate_safe_depth(accept_danger_lvl)
print('Приблизительная глубина безопасной кладки: ', result, 'm')
main_function()
Дмитрий Магадеев
Глубже 2 метров закопать не позволяет.
Тимофей Андрианов
Будь благословенен ^^^
def f(x): return x ** 3 - 3 * x ** 2 - 12 * x + 10
x, e = [0.0, 4.0], float(input('Введите максимально допустимый уровень опасности: '))
while x[1] - x[0] >= e:
~~t = sum(x) / 2
~~x[f(x[0]) * f(t) < 0] = t
print('Приблизительная глубина безопасной кладки:', sum(x) / 2, 'м')
x, e = [0.0, 4.0], float(input('Введите максимально допустимый уровень опасности: '))
while x[1] - x[0] >= e:
~~t = sum(x) / 2
~~x[f(x[0]) * f(t) < 0] = t
print('Приблизительная глубина безопасной кладки:', sum(x) / 2, 'м')
Дмитрий Бурдинский
Большое вам спасибо, всё работает. Я извиняюсь за такую наглость можно, пожалуйста, код без использования списков и методов работы со строками
Green Happi
А без ' f ' можно это решить?
Green Happi
Понял, спасибо большое, я просто не прошел еще эту часть)
Марат Уторбаев
Благодарю Вас, Андрей. Коротко и ясно. И без удаления гланд через задний проход)
depth_min = 0
depth_max = 4
depth = 2
denger_max = float(input('Введите максимальный уровень опасности: '))
denger = depth ** 3 - 3 * depth ** 2 - 12 * depth + 10
#('Глубина ', depth, 'Опасность ', denger)
if denger_max <= 0:
print('Ошибка. Максимально допустимый уровень опасности должен быть больше нуля.')
else:
while abs(denger) > denger_max:
if denger > 0:
depth_min = depth
else:
depth_max = depth
depth = depth_min + (depth_max - depth_min) / 2
denger = depth ** 3 - 3 * depth ** 2 - 12 * depth + 10
print('Приблизительная глубина безопасной кладки: ', depth,'m')
depth_max = 4
depth = 2
denger_max = float(input('Введите максимальный уровень опасности: '))
denger = depth ** 3 - 3 * depth ** 2 - 12 * depth + 10
#('Глубина ', depth, 'Опасность ', denger)
if denger_max <= 0:
print('Ошибка. Максимально допустимый уровень опасности должен быть больше нуля.')
else:
while abs(denger) > denger_max:
if denger > 0:
depth_min = depth
else:
depth_max = depth
depth = depth_min + (depth_max - depth_min) / 2
denger = depth ** 3 - 3 * depth ** 2 - 12 * depth + 10
print('Приблизительная глубина безопасной кладки: ', depth,'m')
Исправленный ответ.
d_from = 0
d_to = 4
max_danger = float(input('Введите максимально допустимый уровень опасности: '))
depth = d_from + (d_to - d_from) / 2
danger = depth ** 3 - 3 * depth ** 2 - 12 * depth + 10
if max_danger < 0:
print('Ошибка: максимально допустимый уровень опасности - абсолютная величина и должна быть больше нуля.')
else:
print('Depth:', depth, 'Danger:', danger)
while abs(danger) > max_danger:
if danger > 0:
d_from = depth
else:
d_to = depth
depth = d_from + (d_to - d_from) / 2
danger = depth ** 3 - 3 * depth ** 2 - 12 * depth + 10
print('Depth:', depth, 'Danger:', danger)
print('Приблизительная глубина безопасной кладки:', depth,'м')
d_from = 0
d_to = 4
max_danger = float(input('Введите максимально допустимый уровень опасности: '))
depth = d_from + (d_to - d_from) / 2
danger = depth ** 3 - 3 * depth ** 2 - 12 * depth + 10
if max_danger < 0:
print('Ошибка: максимально допустимый уровень опасности - абсолютная величина и должна быть больше нуля.')
else:
print('Depth:', depth, 'Danger:', danger)
while abs(danger) > max_danger:
if danger > 0:
d_from = depth
else:
d_to = depth
depth = d_from + (d_to - d_from) / 2
danger = depth ** 3 - 3 * depth ** 2 - 12 * depth + 10
print('Depth:', depth, 'Danger:', danger)
print('Приблизительная глубина безопасной кладки:', depth,'м')
Михаил Сафронов
извиняюсь, а исходя из чего вы вывели 'depth' на пятой строчке
def hazard_calculation(variable):
danger_level = variable ** 3 - 3 * variable ** 2 - 12 * variable + 10
return danger_level
danger = float(input('Введите максимальнй уровень опасности: '))
depth_min = 0
depth_max = 4
middle_depth = (depth_min + depth_max) / 2
danger_middle = hazard_calculation(middle_depth)
while abs(danger_middle) > danger:
if danger_middle < 0:
depth_max = middle_depth
else:
depth_min = middle_depth
middle_depth = (depth_min + depth_max) / 2
danger_middle = hazard_calculation(middle_depth)
print('Максимальный уровень глубины безопасной кладки:', middle_depth)
danger_level = variable ** 3 - 3 * variable ** 2 - 12 * variable + 10
return danger_level
danger = float(input('Введите максимальнй уровень опасности: '))
depth_min = 0
depth_max = 4
middle_depth = (depth_min + depth_max) / 2
danger_middle = hazard_calculation(middle_depth)
while abs(danger_middle) > danger:
if danger_middle < 0:
depth_max = middle_depth
else:
depth_min = middle_depth
middle_depth = (depth_min + depth_max) / 2
danger_middle = hazard_calculation(middle_depth)
print('Максимальный уровень глубины безопасной кладки:', middle_depth)
max_danger = float(input('Введите макс. допустимый уровень опасности: '))
d_from = 0
d_to = 4
depth = d_from + (d_to - d_from) / 2
danger = depth ** 3 - 3 * depth ** 2 - 12 * depth + 10
if max_danger < 0:
print('Ошибка. допустимо только больше 0')
else:
print('Depth:', depth, 'Danger:', danger)
while abs(danger) > max_danger:
if danger > 0:
d_from = depth
else:
d_to = depth
depth = d_from + (d_to - d_from) / 2
danger = depth ** 3 - 3 * depth ** 2 - 12 * depth + 10
print('Depth:', depth, 'Danger:', danger)
print('Приблизительная глубина безопасной кладки: ', depth, 'm')
d_from = 0
d_to = 4
depth = d_from + (d_to - d_from) / 2
danger = depth ** 3 - 3 * depth ** 2 - 12 * depth + 10
if max_danger < 0:
print('Ошибка. допустимо только больше 0')
else:
print('Depth:', depth, 'Danger:', danger)
while abs(danger) > max_danger:
if danger > 0:
d_from = depth
else:
d_to = depth
depth = d_from + (d_to - d_from) / 2
danger = depth ** 3 - 3 * depth ** 2 - 12 * depth + 10
print('Depth:', depth, 'Danger:', danger)
print('Приблизительная глубина безопасной кладки: ', depth, 'm')
Похожие вопросы
- Помогите решить задачу на питоне. пожалуйста.
- Помогите решить задачу на питон!!
- Помогите решить задачу на Питоне
- Помогите решить задачу в питоне
- Помогите мне пожалуйста решить задачу на питоне!
- Помогите пожалуйста решить задачи на питоне:
- Помогите пожалуйста решить задачу на питоне...
- Питон. Нужно помочь решить задачу с циклом for
- Пожалуйста, помогите решить задачу на Python. Упражнения 57,58,59,60.
- Снова не могу решить задачу по питону.