Как улучшить программу, решающую квадратные уравнения по теореме Виета, на Ruby? Я, в качестве домашнего задания для обучения Ruby, решил создать программу, решающую приведённые квадратные уравнения по теореме Виета. Вот вкратце что это такое: Напомню саму формулу квадратного уравнения: ax^2+bx+c=0;
Сумма корней приведенного квадратного трехчлена равна его второму коэффициенту с противоположным знаком, а произведение - свободному члену .
В случае с приведёнными уравнениями (если коэффициент A == 1) есть условиеЖ
x1+x2 == -b;
x1*x2 == c;
Но с неприведёнными уравнениями приходится ещё и делить на коэффициент "A", то есть:
x1+x2 == -b/a;
x1*x2 == c/a
С приведёнными уравнениями я программу написал:puts "Введите коэффициент B"
b = gets.chomp.to_i
puts "Введите коэффциент C"
c = gets.chomp.to_i
x1 = -b
x2 = 0
while (x1+x2 != -b or x1*x2 != c)
x2 = x2 + 1
x1 = x1 - 1
end
puts x1
puts x2
С неприведёнными у меня получилось так, но то-ли я вхожу в бесконечный цикл, то ли решения нет.puts "Введите коэффициент A"
a = gets.chomp.to_i
puts "Введите коэффициент B"
b = gets.chomp.to_i
puts "Введите коэффциент C"
c = gets.chomp.to_i
x1 = -b
x2 = 0
while (x1+x2/a != -b or x1*x2/a != c or noSolution == true)
x2 = x2 + 0.1
x1 = x1 - 0.1
if x2

21 Авг 2019 в 06:10
199 +1
0
Ответы
1

Для улучшения программы, можно использовать другой подход к решению квадратных уравнений по теореме Виета. Вместо перебора всех возможных значений x1 и x2, можно воспользоваться формулами известными из курса алгебры:

x1 = (-b + sqrt(b^2 - 4ac)) / 2a
x2 = (-b - sqrt(b^2 - 4ac)) / 2a

Таким образом, в программе можно добавить расчёт дискриминанта и проверку на его значение (если дискриминант меньше 0, то корней нет), а затем вычисление корней по формулам.

Примерно так может выглядеть улучшенная версия программы:

puts "Введите коэффициент A"
a = gets.chomp.to_i
puts "Введите коэффициент B"
b = gets.chomp.to_i
puts "Введите коэффциент C"
c = gets.chomp.to_i
discriminant = b**2 - 4*a*c
if discriminant < 0
puts "Корней нет"
else
x1 = (-b + Math.sqrt(discriminant)) / (2*a)
x2 = (-b - Math.sqrt(discriminant)) / (2*a)
puts "x1 = #{x1}"
puts "x2 = #{x2}"
end

Таким образом, программа будет более точно и эффективно решать как приведенные, так и неприведенные квадратные уравнения.

20 Апр 2024 в 13:22
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир