Как улучшить программу, решающую квадратные уравнения по теореме Виета, на 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 noSolution = true
puts "Нет решения"
end
end
puts x1
puts x2
Есть варианты?
*Прошу не злиться на мой код, только начинаю изучать этот язык

21 Авг 2019 в 06:10
170 +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 Апр в 13:22
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 89 343 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир