Язык программирования golang
Внутри функции с клавиатуры через пробел вводятся три вещественных числа, при этом первое число гарантированно не равно нулю. Функция должна вывести на экран через пробел по возрастанию корни уравнения (один или два), или два числа 0, если корней нет.
Функция ничего не должна возвращать
Шаблон вашего решения:
package main
import (
"fmt"
"math"
)
func SqRoots() {
var a, b, c float64
fmt.Scanln(&a, &b, &c)
...
}
Самостоятельно определять функцию main() и вызывать функцию SqRoots() не требуется – это сделает проверяющая система.
То есть вы можете сначала написать в среде разработки работающую программу, затем скопировать код, удалить функцию main() и отправить решение на проверку
Формат ввода
Три вещественных числа через пробел
Формат вывода
Вещественные числа через пробел
Пример 1
Ввод Вывод
1 -3 2
1.000 2.000
Пример 2
Ввод Вывод
1 4 4.0
-2.000
Пример 3
Ввод Вывод
1 1 1
0 0
.
package main
import (
"fmt"
"math"
)
func SqRoots() {
var a, b, c float64
fmt.Scanln(&a, &b, &c)
discriminant := b*b - 4*a*c
if discriminant > 0 {
root1 := (-b + math.Sqrt(discriminant)) / (2 * a)
root2 := (-b - math.Sqrt(discriminant)) / (2 * a)
fmt.Printf("%.2f %.2f\n", math.Min(root1, root2), math.Max(root1, root2))
} else if discriminant == 0 {
root := -b / (2 * a)
fmt.Printf("%.2f\n", root)
} else {
fmt.Println("0 0")
}
}
Функция SqRoots принимает три введенных с клавиатуры числа и вычисляет корни квадратного уравнения, образованного этими числами. Для вычисления корней используется квадратичная формула:

Если дискриминант

больше 0, уравнение имеет два различных действительных корня, которые вычисляются и печатаются в порядке возрастания.
Если дискриминант равен 0, уравнение имеет один действительный корень, который вычисляется и печатается.
Если дискриминант меньше 0, уравнение не имеет действительных корней и печатаются два нуля.
Подправленный код под твои нужды:
package main
import (
"fmt"
"math"
)
func main() {
var a, b, c float64
fmt.Scanln(&a, &b, &c)
discriminant := b*b - 4*a*c
if discriminant > 0 {
root1 := (-b + math.Sqrt(discriminant)) / (2 * a)
root2 := (-b - math.Sqrt(discriminant)) / (2 * a)
fmt.Printf("%.5f %.5f\n", math.Min(root1, root2), math.Max(root1, root2))
} else if discriminant == 0 {
root := -b / (2 * a)
fmt.Printf("%.5f\n", root)
} else {
fmt.Println("0 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 {
fmt.Println("0 0")
} else if d == 0 {
root := -b / (2 * a)
fmt.Printf("%.3f\n", root)
} else {
root1 := (-b + math.Sqrt(d)) / (2 * a)
root2 := (-b - math.Sqrt(d)) / (2 * a)
if root1 < root2 {
fmt.Printf("%.3f %.3f\n", root1, root2)
} else {
fmt.Printf("%.3f %.3f\n", root2, root1)
}
}
}