В мире математики и научных вычислений квадратные уравнения играют ключевую роль, они встречаются практически во всех областях, от физики до инженерии. Квадратные уравнения имеют форму, которая может быть решена с помощью методов алгебры, их корни представляют собой точки пересечения параболы с осью x. Для решения этих уравнений часто используют программы, которые позволяют как математикам, так и любознательным людям быстро и точно найти значения неизвестных. В данной статье мы погрузимся в мир программирования и рассмотрим, как можно создать программу для решения квадратных уравнений.
Теория
Квадратное уравнение имеет вид:
Для решения квадратного уравнения сначала нужно вычислить дискриминант по формуле:
Далее нужно проверить значение дискриминанта:
- Если D>0, то уравнение имеет два действительных корня x1 и x2.
- Если D=0, то уравнение имеет один действительный корень x1 = x2.
- Если D<0, то уравнение не имеет действительных корней.
Если корни существуют, то можно их вычислить по следующим формулам.
Если D>0:
Если D<0:
Это общий алгоритм решения квадратного уравнения. Реализация этого алгоритма будет отличаться в зависимости от выбранного языка программирования, но общие шаги можно применить в любом из них.
C++
Пример программы на C++, которая решает квадратное уравнение:
#include <iostream> #include <cmath> int main() { double a, b, c; double discriminant, x1, x2; // Ввод коэффициентов уравнения std::cout << "Введите коэффициент a: "; std::cin >> a; std::cout << "Введите коэффициент b: "; std::cin >> b; std::cout << "Введите коэффициент c: "; std::cin >> c; // Вычисление дискриминанта discriminant = b * b - 4 * a * c; // Проверка дискриминанта на положительность, отрицательность и ноль if (discriminant > 0) { // Два действительных корня x1 = (-b + sqrt(discriminant)) / (2 * a); x2 = (-b - sqrt(discriminant)) / (2 * a); std::cout << "Два действительных корня: x1 = " << x1 << " и x2 = " << x2 << std::endl; } else if (discriminant == 0) { // Один действительный корень x1 = -b / (2 * a); std::cout << "Один действительный корень: x1 = " << x1 << std::endl; } else { // Два комплексных корня double realPart = -b / (2 * a); double imaginaryPart = sqrt(-discriminant) / (2 * a); std::cout << "Два комплексных корня: "; std::cout << "x1 = " << realPart << " + " << imaginaryPart << "i и "; std::cout << "x2 = " << realPart << " - " << imaginaryPart << "i" << std::endl; } return 0; }
Эта программа запрашивает у пользователя значения коэффициентов a, b и c, вычисляет дискриминант и находит корни уравнения, учитывая различные случаи: два действительных корня, один действительный корень или два комплексных корня.
C#
using System; class Program { static void Main() { double a, b, c; double discriminant, x1, x2; // Ввод коэффициентов уравнения Console.Write("Введите коэффициент a: "); a = Convert.ToDouble(Console.ReadLine()); Console.Write("Введите коэффициент b: "); b = Convert.ToDouble(Console.ReadLine()); Console.Write("Введите коэффициент c: "); c = Convert.ToDouble(Console.ReadLine()); // Вычисление дискриминанта discriminant = b * b - 4 * a * c; // Проверка дискриминанта на положительность, отрицательность и ноль if (discriminant > 0) { // Два действительных корня x1 = (-b + Math.Sqrt(discriminant)) / (2 * a); x2 = (-b - Math.Sqrt(discriminant)) / (2 * a); Console.WriteLine($"Два действительных корня: x1 = {x1} и x2 = {x2}"); } else if (discriminant == 0) { // Один действительный корень x1 = -b / (2 * a); Console.WriteLine($"Один действительный корень: x1 = {x1}"); } else { // Два комплексных корня double realPart = -b / (2 * a); double imaginaryPart = Math.Sqrt(-discriminant) / (2 * a); Console.WriteLine($"Два комплексных корня: x1 = {realPart} + {imaginaryPart}i и x2 = {realPart} - {imaginaryPart}i"); } } }
Python
import math # Ввод коэффициентов уравнения a = float(input("Введите коэффициент a: ")) b = float(input("Введите коэффициент b: ")) c = float(input("Введите коэффициент c: ")) # Вычисление дискриминанта discriminant = b ** 2 - 4 * a * c # Проверка дискриминанта на положительность, отрицательность и ноль if discriminant > 0: # Два действительных корня x1 = (-b + math.sqrt(discriminant)) / (2 * a) x2 = (-b - math.sqrt(discriminant)) / (2 * a) print(f"Два действительных корня: x1 = {x1}, x2 = {x2}") elif discriminant == 0: # Один действительный корень x1 = -b / (2 * a) print(f"Один действительный корень: x1 = {x1}") else: # Два комплексных корня realPart = -b / (2 * a) imaginaryPart = math.sqrt(-discriminant) / (2 * a) print(f"Два комплексных корня: x1 = {realPart} + {imaginaryPart}i, x2 = {realPart} - {imaginaryPart}i")
Java
import java.util.Scanner; public class QuadraticEquationSolver { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Введите коэффициент a: "); double a = scanner.nextDouble(); System.out.print("Введите коэффициент b: "); double b = scanner.nextDouble(); System.out.print("Введите коэффициент c: "); double c = scanner.nextDouble(); double discriminant = b * b - 4 * a * c; if (discriminant > 0) { // Два действительных корня double x1 = (-b + Math.sqrt(discriminant)) / (2 * a); double x2 = (-b - Math.sqrt(discriminant)) / (2 * a); System.out.println("Два действительных корня: x1 = " + x1 + ", x2 = " + x2); } else if (discriminant == 0) { // Один действительный корень double x1 = -b / (2 * a); System.out.println("Один действительный корень: x1 = " + x1); } else { // Два комплексных корня double realPart = -b / (2 * a); double imaginaryPart = Math.sqrt(-discriminant) / (2 * a); System.out.println("Два комплексных корня: x1 = " + realPart + " + " + imaginaryPart + "i, x2 = " + realPart + " - " + imaginaryPart + "i"); } } }
Pascal
program QuadraticEquationSolver; var a, b, c, discriminant, x1, x2: real; begin writeln('Введите коэффициент a: '); readln(a); writeln('Введите коэффициент b: '); readln(b); writeln('Введите коэффициент c: '); readln(c); discriminant := b * b - 4 * a * c; if discriminant > 0 then begin x1 := (-b + sqrt(discriminant)) / (2 * a); x2 := (-b - sqrt(discriminant)) / (2 * a); writeln('Два действительных корня: x1 = ', x1:0:2, ', x2 = ', x2:0:2); end else if discriminant = 0 then begin x1 := -b / (2 * a); writeln('Один действительный корень: x1 = ', x1:0:2); end else begin x1 := -b / (2 * a); discriminant := abs(discriminant); x2 := sqrt(discriminant) / (2 * a); writeln('Два комплексных корня: x1 = ', x1:0:2, ' + ', x2:0:2, 'i, x2 = ', x1:0:2, ' - ', x2:0:2, 'i'); end; end.
JavaScript
// Функция для решения квадратичного уравнения function solveQuadraticEquation(a, b, c) { // Вычисляем дискриминант var discriminant = b * b - 4 * a * c; if (discriminant > 0) { // Два действительных корня var x1 = (-b + Math.sqrt(discriminant)) / (2 * a); var x2 = (-b - Math.sqrt(discriminant)) / (2 * a); return [x1, x2]; } else if (discriminant === 0) { // Один действительный корень var x = -b / (2 * a); return [x]; } else { // Два комплексных корня var realPart = -b / (2 * a); var imaginaryPart = Math.sqrt(Math.abs(discriminant)) / (2 * a); return [`${realPart} + ${imaginaryPart}i`, `${realPart} - ${imaginaryPart}i`]; } } // Введите коэффициенты a, b и c var a = parseFloat(prompt('Введите коэффициент a: ')); var b = parseFloat(prompt('Введите коэффициент b: ')); var c = parseFloat(prompt('Введите коэффициент c: ')); // Вызов функции для решения уравнения var solutions = solveQuadraticEquation(a, b, c); // Вывод решений if (solutions.length === 2) { console.log(`Два действительных корня: x1 = ${solutions[0]}, x2 = ${solutions[1]}`); } else if (solutions.length === 1) { console.log(`Один действительный корень: x = ${solutions[0]}`); } else { console.log(`Два комплексных корня: x1 = ${solutions[0]}, x2 = ${solutions[1]}`); }
Эта программа предлагает пользователю ввести коэффициенты a, b и c, а затем вызывает функцию solveQuadraticEquation для решения уравнения и вывода корней, учитывая различные случаи (два действительных корня, один действительный корень и два комплексных корня).
PHP
<?php // Функция для решения квадратичного уравнения function solveQuadraticEquation($a, $b, $c) { // Вычисляем дискриминант $discriminant = $b * $b - 4 * $a * $c; if ($discriminant > 0) { // Два действительных корня $x1 = (-$b + sqrt($discriminant)) / (2 * $a); $x2 = (-$b - sqrt($discriminant)) / (2 * $a); return [$x1, $x2]; } elseif ($discriminant == 0) { // Один действительный корень $x = -$b / (2 * $a); return [$x]; } else { // Два комплексных корня $realPart = -$b / (2 * $a); $imaginaryPart = sqrt(abs($discriminant)) / (2 * $a); return ["{$realPart} + {$imaginaryPart}i", "{$realPart} - {$imaginaryPart}i"]; } } // Введите коэффициенты a, b и c $a = (float) readline('Введите коэффициент a: '); $b = (float) readline('Введите коэффициент b: '); $c = (float) readline('Введите коэффициент c: '); // Вызов функции для решения уравнения $solutions = solveQuadraticEquation($a, $b, $c); // Вывод решений if (count($solutions) === 2) { echo "Два действительных корня: x1 = {$solutions[0]}, x2 = {$solutions[1]}\n"; } elseif (count($solutions) === 1) { echo "Один действительный корень: x = {$solutions[0]}\n"; } else { echo "Два комплексных корня: x1 = {$solutions[0]}, x2 = {$solutions[1]}\n"; } ?>