Top.Mail.Ru
Ответы

Программирование на Go СРОЧНО

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

Для этого напишите функцию 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мес
12345678910111213141516171819202122232425262728293031323334
 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 { 
  // Вычисление корней 
  x1 := (-b + math.Sqrt(discriminant)) / (2 * a) 
  x2 := (-b - math.Sqrt(discriminant)) / (2 * a) 
 
  // Вывод корней по возрастанию 
  if x1 < x2 { 
   fmt.Printf("%.3f %.3f\n", x1, x2) 
  } else { 
   fmt.Printf("%.3f %.3f\n", x2, x1) 
  } 
 } else { 
  // Вывод 0 0, если корней нет 
  fmt.Println("0 0") 
 } 
} 


 

Пояснение:

1. Ввод данных:
- fmt.Scanln(&a, &b, &c) считывает три числа с клавиатуры, разделенные пробелами, и сохраняет их в переменные a, b, c.

2. Вычисление дискриминанта:
- discriminant := b*b - 4*a*c вычисляет дискриминант квадратного уравнения по формуле b^2 - 4ac.

3. Проверка наличия корней:
- if discriminant >= 0 проверяет, есть ли корни у уравнения (если дискриминант больше или равен нулю).

4. Вычисление корней:
- x1 := (-b + math.Sqrt(discriminant)) / (2 * a) и x2 := (-b - math.Sqrt(discriminant)) / (2 * a) вычисляют корни по формулам:
- x1 = (-b + sqrt(D)) / 2a
- x2 = (-b - sqrt(D)) / 2a

5. Вывод корней:
- fmt.Printf("%.3f %.3f\n", x1, x2) выводит найденные корни с точностью до трех знаков после запятой.
- if x1 < x2 проверяет, какой корень больше, и выводит их по возрастанию.

6. Вывод 0 0:
- fmt.Println("0 0") выводит "0 0", если корней нет (дискриминант отрицательный).

Аватар пользователя
Высший разум
8мес