Równanie kwadratowe


Tematy pokrewne Podrozdziały  

 

Algorytm

Równanie kwadratowe (ang. square equation) posiada następującą postać:

 

ax2 + bx + c = 0,  a ≠ 0

 

gdzie x to poszukiwana niewiadoma, a a, b, c to współczynniki równania. Pierwiastkiem równania jest taka wartość niewiadomej x, która podstawiona w jej miejsce do równania spełnia je. Zwykle równanie kwadratowe posiada dwa pierwiastki rzeczywiste (lub zespolone - nie będziemy się nimi zajmować). Jeśli istnieje tylko jedna taka liczba, to mówimy, iż jest ona pierwiastkiem podwójnym.

 

Przykład:

Pierwiastkami równania kwadratowego x2 - x - 6 = 0 są dwie liczby x1 = 3 i x2 = -2, ponieważ:

 

(x1)2 - (x1) - 6 = 32 - 3 - 6 = 9 - 3 - 6 = 0 - równanie jest spełnione

(x2)2 - (x2) - 6 = (-2)2 - (-2) - 6 = 4 + 2 - 6 = 0 - równanie jest spełnione

 

Matematycy opracowali na przestrzeni wieków rozwoju matematyki wiele metod rozwiązywania równań kwadratowych. My wykorzystamy metodę "szkolną", którą powinien doskonale znać uczeń liceum.

Obliczamy wyróżnik równania kwadratowego Δ:

 

 

W zależności od wartości wyróżnika Δ mamy trzy możliwe przypadki:

1. Δ > 0, istnieją dwa pierwiastki rzeczywiste:

2. Δ = 0, istnieje jeden pierwiastek podwójny:

3. Δ < 0, nie istnieją pierwiastki rzeczywiste (równanie posiada jedynie pierwiastki zespolone, które są liczbami sprzężonymi - liczbami zespolonymi nie zajmujemy się w liceum).


Przykład:

Rozwiążmy podaną metodą równanie z poprzedniego przykładu:

 

x2 - x - 6 = 0

a = 1,  b = -1,  c = -6

 

Obliczamy wyróżnik Δ:

 

 

Wyróżnik Δ jest większy od 0, zatem równanie posiada dwa pierwiastki rzeczywiste:

 

 

Specyfikacja problemu

Dane wejściowe

a, b, c - współczynniki równania kwadratowego. a,b,cR

Dane wyjściowe

x1, x2 - pierwiastki równania kwadratowego lub informacja, iż równanie nie posiada pierwiastków rzeczywistych.  x1, x2R

Zmienne pomocnicze i funkcje

Δ - wyróżnik równania kwadratowego. ΔR
ε - określa dokładność porównania z zerem. ε = 0.0000000001

 

Lista kroków

K01: Czytaj a, b, c
K02: Jeśli | a | < ε, pisz "To nie jest równanie kwadratowe" i zakończ
K03: Δ ← b2 - 4ac
K04: Jeśli | Δ | < ε, to Δ 0
K05: Jeśli Δ < 0, to pisz "Brak pierwiastków rzeczywistych" i zakończ
K06:
K07: Pisz x1, x2
K08: Zakończ

 

Schemat blokowy

Algorytm obliczania pierwiastków równania kwadratowego rozpoczynamy od wczytania wartości współczynników a, b oraz c.

Jeśli współczynnik a przy x2 wynosi 0 (wpada w otoczenie 0 o promieniu ε) to nie mamy do czynienia z równaniem kwadratowym. Wypisujemy odpowiedni komunikat i kończymy algorytm.

Obliczamy wyróżnik Δ. Następnie sprawdzamy, czy Δ jest w otoczeniu ε zera. Jeśli tak, to zerujemy go - w ten sposób uprościmy znacznie algorytm.

Kolejny test sprawdza, czy wyróżnik Δ jest mniejszy od zera (kolejność testów jest tutaj bardzo ważna). Jeśli tak, to równanie nie posiada pierwiastków rzeczywistych. Wypisujemy odpowiedni komunikat i kończymy algorytm.

Pozostał przypadek, gdy wyróżnik Δ jest albo równy, albo większy od 0. W obu przypadkach obliczamy dwa pierwiastki x1 i x2. Wypisujemy je i kończymy algorytm.


 

Programy

Programy wczytują wartości współczynników a, b i c, a następnie wyznaczają, o ile jest to możliwe, pierwiastki równania kwadratowego o wprowadzonych współczynnikach.

 

Efekt uruchomienia programu
Demonstracja rozwiązywania równania kwadratowego:
ax^2 + bx + c = 0
-------------------------------------------------
(C)2006 mgr Jerzy Wałaszek        I LO w Tarnowie

Podaj kolejno współczynniki a, b i c:

a = 1
b = -1
c = -6

-------------------------------------------------

WYNIKI:

x1 =      3,00000
x2 =     -2,00000

-------------------------------------------------
Koniec. Naciśnij klawisz Enter...

 

Free Pascal
// Program rozwiązuje równanie kwadratowe
//---------------------------------------
// (C)2006 mgr J.Wałaszek I LO w Tarnowie

program mzfk1;

const
  EPS   = 0.0000000001; // dokładność porównania z zerem
var
  a,b,c,delta,x1,x2 : double;
begin
  writeln('Demonstracja rozwiazywania rownania kwadratowego:');
  writeln('ax^2 + bx + c = 0');
  writeln('-------------------------------------------------');
  writeln('(C)2006 mgr Jerzy Walaszek        I LO w Tarnowie');
  writeln;
  writeln('Podaj kolejno wspolczynniki a, b i c:');
  writeln;
  write('a = '); readln(a);
  write('b = '); readln(b);
  write('c = '); readln(c);
  writeln;
  writeln('-------------------------------------------------');
  writeln;
  writeln('WYNIKI:');
  writeln;
  if abs(a) < EPS then
    writeln('To nie jest rownanie kwadratowe')
  else
  begin
    delta := b * b - 4 * a * c;
    if abs(delta) < EPS then delta := 0;
    if delta < 0 then
      writeln('Brak pierwiastkow rzeczywistych')
    else
    begin
      x1 := (-b + sqrt(delta)) / 2 / a;
      x2 := (-b - sqrt(delta)) / 2 / a;
      writeln('x1 = ',x1:12:5);
      writeln('x2 = ',x2:12:5);
    end;
  end;
  writeln;
  writeln('-------------------------------------------------');
  writeln('Koniec. Nacisnij klawisz Enter...');
  readln;
end.
Code::Blocks
// Program rozwiązuje równanie kwadratowe
//---------------------------------------
// (C)2006 mgr J.Wałaszek I LO w Tarnowie

#include <iostream>
#include <iomanip>
#include <cmath>
#include <cstdlib>

using namespace std;

int main()
{
  const double EPS   = 0.0000000001; // dokładność porównania z zerem

  double a,b,c,delta,x1,x2;

  cout << setprecision(5)     // 5 cyfr po przecinku
       << fixed;              // format stałoprzecinkowy

  cout << "Demonstracja rozwiazywania rownania kwadratowego:\n"
          "ax^2 + bx + c = 0\n"
          "-------------------------------------------------\n"
          "(C)2006 mgr Jerzy Walaszek        I LO w Tarnowie\n\n"
          "Podaj kolejno wspolczynniki a, b i c:\n\n";
  cout << "a = "; cin >> a;
  cout << "b = "; cin >> b;
  cout << "c = "; cin >> c;
  cout << "\n-------------------------------------------------\n\n"
          "WYNIKI:\n\n";
  if(fabs(a) < EPS)
    cout << "To nie jest rownanie kwadratowe\n";
  else
  {
    delta = b * b - 4 * a * c;
    if(fabs(delta) < EPS) delta = 0;
    if(delta < 0)
      cout << "Brak pierwiastkow rzeczywistych\n";
    else
    {
      x1 = (-b + sqrt(delta)) / 2 / a;
      x2 = (-b - sqrt(delta)) / 2 / a;
      cout << "x1 = " << setw(12) << x1 << endl
           << "x2 = " << setw(12) << x2 << endl;
    }
  }
  cout << "\n------------------------------------------------\n\n";
  system("pause");
  return 0;
}
FreeBASIC
' Program rozwiązuje równanie kwadratowe
'---------------------------------------
' (C)2006 mgr J.Wałaszek I LO w Tarnowie

Const EPS As Double = 0.0000000001   ' dokładność porównania z zerem

Dim As Double a, b, c, delta, x1, x2
    
Print "Demonstracja rozwiazywania rownania kwadratowego:"
Print "ax^2 + bx + c = 0"
Print "-------------------------------------------------"
Print "(C)2006 mgr Jerzy Walaszek        I LO w Tarnowie"
Print
Print "Podaj kolejno wspolczynniki a, b i c:"
Print
Input "a = ", a
Input "b = ", b
Input "c = ", c
Print
Print "-------------------------------------------------"
Print
Print "WYNIKI:"
Print
If Abs(a) < EPS Then
   Print "To nie jest rownanie kwadratowe"
Else
   delta = b * b - 4 * a * c
   If Abs(delta) < EPS Then delta = 0
   If delta < 0 Then
      Print "Brak pierwiastkow rzeczywistych"
   Else
      x1 = (-b + Sqr(delta)) / 2 / a
      x2 = (-b - Sqr(delta)) / 2 / a
      Print Using "x1 = ######.#####"; x1
      Print Using "x2 = ######.#####"; x2
   End If
End If

Print
Print "-------------------------------------------------"
Print
Print "Koniec. Nacisnij klawisz Enter..."
    
Sleep
    
End
JavaScript
<html>
  <head>
  </head>
  <body>
    <div align="center">
      <form style="BORDER-RIGHT: #ff9933 1px outset; PADDING-RIGHT: 4px;
                   BORDER-TOP: #ff9933 1px outset; PADDING-LEFT: 4px;
                   PADDING-BOTTOM: 1px; BORDER-LEFT: #ff9933 1px outset;
                   PADDING-TOP: 1px; BORDER-BOTTOM: #ff9933 1px outset;
                   BACKGROUND-COLOR: #ffcc66" name="frmbincode">
        <h3 style="TEXT-ALIGN: center">
          Demonstracja rozwiązywania równania kwadratowego
        </h3>
        <p style="TEXT-ALIGN: center">
          <i>ax<sup>2</sup> + bx + c = 0</i>
        </p>
        <p style="TEXT-ALIGN: center">
          (C)2006 mgr Jerzy Wałaszek I LO w Tarnowie
        </p>
        <hr>
        <p style="text-align: center">
          Wpisz do pól edycyjnych kolejne współczynniki równania
        </p>
        <div align="center">
          <table border="0" id="table146" cellpadding="8"
                 style="border-collapse: collapse">
            <tr>
              <td>
                a = <input type="text" name="wsp_a" size="15" value="1"
                           style="text-align: right">
              </td>
              <td>
                b = <input type="text" name="wsp_b" size="15" value="-1"
                           style="text-align: right">
              </td>
              <td>
                c = <input type="text" name="wsp_c" size="15" value="-6"
                           style="text-align: right">
               </td>
               <td>
                 <input type="button" value="Rozwiąż równanie" name="B1"
                        onclick="main()">
               </td>
             </tr>
           </table>
         </div>
         <div id="out" align="center">...</div>
       </form>

<script language=javascript>

// Program rozwiązuje równanie kwadratowe
//---------------------------------------
// (C)2006 mgr J.Wałaszek I LO w Tarnowie

function main()
{
  var EPS = 0.0000000001; // dokładność porównania z zerem
  var a,b,c,delta,x1,x2,t;

  a = parseFloat(document.frmbincode.wsp_a.value);
  b = parseFloat(document.frmbincode.wsp_b.value);
  c = parseFloat(document.frmbincode.wsp_c.value);
  if(isNaN(a) || isNaN(b) || isNaN(c))
    t = "<font color=red><b>Nieprawidłowe współczynniki!</b></font>";
  else if(Math.abs(a) < EPS)
    t = "<font color=red><b>To nie jest rownanie kwadratowe</b></font>";
  else
  {
    delta = b * b - 4 * a * c;
    if(Math.abs(delta) < EPS) delta = 0;
    if(delta < 0)
      t = "<font color=red><b>Brak pierwiastkow rzeczywistych</b></font>";
    else
    {
      x1 = (-b + Math.sqrt(delta)) / 2 / a;
      x2 = (-b - Math.sqrt(delta)) / 2 / a;
      t = "x<sub>1</sub> = " + x1 + "<BR>x<sub>2</sub> = " + x2;
    }
  }
  document.getElementById("out").innerHTML = t;
}

</script>
    </div>
  </body>
</html>

 

Tutaj możesz przetestować działanie prezentowanego skryptu:

Demonstracja rozwiązywania równania kwadratowego

ax2 + bx + c = 0

(C)2006 mgr Jerzy Wałaszek I LO w Tarnowie


Wpisz do pól edycyjnych kolejne współczynniki równania

a = b = c =
...


List do administratora Serwisu Edukacyjnego I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo  , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

(C)2014 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.