Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Программирование на GO (квадратное уравнение)

Арсений Скалкин Ученик (98), закрыт 4 дня назад
Условие задачи:
Для этого напишите функцию SqRoots(), в которой с клавиатуры через пробел вводятся три вещественных числа, при этом первое число гарантированно не равно нулю. Функция должна вывести на экран через пробел по возрастанию корни уравнения (один или два), или два числа 0, если корней нет.

Функция ничего не должна возвращать.


Код:
package main

import (
"fmt"
"math"
)

func SqRoots() {
var a, b, c float64
fmt.Scanln(&a, &b, &c)
d := b * b - 4 * a * c
if d < 0.0 {
fmt.Println("0 0")
} else if sd := math.Sqrt(d); a > 0.0 {
fmt.Printf("%g %g\n", (-b - sd) / (2.0 * a), (-b + sd) / (2.0 * a))
} else {
fmt.Printf("%g %g\n", (-b + sd) / (2.0 * a), (-b - sd) / (2.0 * a))
}
}


Ошибка:
При вводе чисел 1 4 4.0 вместо ожидаемого ответа -2.000 выводится -2 -2, где ошибка в коде? Пожалуйста, срочо и очень надо
Лучший ответ
Андрей Высший разум (460590) 1 месяц назад
Ошибка твоего кода в том, что ты НЕ проверяешь вариант d == 0 и всегда выводишь два корня.

Задача уже многократно была и прекрасно ищется поиском:
https://otvet.mail.ru/search/%D0%94%D0%BB%D1%8F%20%D1%8D%D1%82%D0%BE%D0%B3%D0%BE%20%D0%BD%D0%B0%D0%BF%D0%B8%D1%88%D0%B8%D1%82%D0%B5%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8E%20SqRoots()/

Повторю свой ответ, данный 2 недели назад:
 func SqRoots() {
var a, b, c float64
fmt.Scanln(&a, &b, &c)
d, q := b * b - 4.0 * a * c, -b / (2 * a)
if d < 0.0 { // корней нет
fmt.Println("0 0")
} else if d > 0.0 { // два корня в нужном порядке без проверок знака a
p := math.Sqrt(d) / math.Abs(2 * a)
fmt.Println(q - p, q + p)
} else { // один корень
fmt.Println(q)
}
}
Остальные ответы
Похожие вопросы