Top.Mail.Ru
Ответы

Программирование на GO.

Квадратные корни
Ограничение времени 1 секунда
Ограничение памяти 64.0 Мб
Ввод стандартный ввод
Вывод стандартный вывод
Гоша работает над проектом, в котором приходится часто решать квадратные уравнения. Он мог бы и сам написать функцию для их вычисления, но сильно занят (спит без задних ног). Помогите Гоше: напишите калькулятор для вычисления корней квадратного уравнения с пользовательским вводом.

Для этого напишите функцию SqRoots(), в которой с клавиатуры через пробел вводятся три вещественных числа, при этом первое число гарантированно не равно нулю. Функция должна вывести на экран через пробел по возрастанию корни уравнения (один или два), или два числа 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

По дате
По Рейтингу
Аватар пользователя
Новичок
8мес
12345678910111213
 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 {
        p := math.Sqrt(d) / math.Abs(2 * a)
        fmt.Println(q - p, q + p)
    } else {
        fmt.Println(q)
    }
} 
Аватар пользователя
Мудрец
8мес

Используйте этот код:

123456789101112131415161718192021222324252627
 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 { 
        fmt.Printf("%.3f\n", -b/(2*a)) 
    } else { 
        sqrtD := math.Sqrt(D) 
        x1 := (-b - sqrtD) / (2 * a) 
        x2 := (-b + sqrtD) / (2 * a) 
        if x1 > x2 { 
            x1, x2 = x2, x1 
        } 
        fmt.Printf("%.3f %.3f\n", x1, x2) 
    } 
}