Serwis Edukacyjny
Nauczycieli I-LO

w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

Autor artykułu: mgr Jerzy Wałaszek

©2026 mgr Jerzy Wałaszek

W naszym serwisie jest nowszy artykuł o obliczaniu pierwiastków funkcji: "Metody numeryczne".

Równanie kwadratowe

SPIS TREŚCI
Podrozdziały

Algorytm

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

gdzie x to poszukiwana niewiadoma, natomiast 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 = 3x2 = -2, ponieważ:

Na przestrzeni wieków rozwoju matematyki matematycy opracowali 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:

Obliczamy wyróżnik Δ:

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

 


do podrozdziału  do strony 

Opis algorytmu

Specyfikacja problemu

Dane wejściowe

a, b, c współczynniki równania kwadratowego;
a,b,c ∈ R

Dane wyjściowe

x1, x2 pierwiastki równania kwadratowego
lub informacja, iż równanie nie posiada
pierwiastków rzeczywistych;
x1, x2 ∈ R

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:
K08: Pisz x1, x2
K09: Zakończ

Schemat blokowy

obrazek

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.


do podrozdziału  do strony 

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.

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

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

using namespace std;

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

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

  cout << setprecision(5)
       << fixed
       << "   Rownanie kwadratowe\n"
          "    ax^2 + bx + c = 0\n"
          "--------------------------\n"
          "(C)2006 mgr Jerzy Walaszek\n\n";
  cout << "a = "; cin >> a;
  cout << "b = "; cin >> b;
  cout << "c = "; cin >> c;
  cout << "\nWYNIKI:\n\n";
  if(fabs(a) < EPS)
    cout << "Brak rownania kwadratowego\n";
  else
  {
    delta = b * b - 4 * a * c;
    if(fabs(delta) < EPS) delta = 0.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 << endl;
  system("pause");
  return 0;
}
Pascal
///   Program rozwiązuje
//   równanie kwadratowe
// ----------------------
// (C)2006 mgr J.Wałaszek

program mzfk1;

const
  // dokładność porównania
  // z zerem
  EPS = 0.0000000001;
var
  a,b,c,delta,x1,x2 : double;
begin
  writeln('   Rownanie kwadratowe');
  writeln('    ax^2 + bx + c = 0');
  writeln('   -------------------');
  writeln('(C)2006 mgr Jerzy Walaszek');
  writeln;
  write('a = '); readln(a);
  write('b = '); readln(b);
  write('c = '); readln(c);
  writeln;
  writeln('WYNIKI:');
  writeln;
  if abs(a) < EPS then
    writeln('Brak rownania ',
            'kwadratowego')
  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('Nacisnij Enter...');
  readln;
end.
Basic
' Program rozwiązuje równanie kwadratowe
'---------------------------------------
' (C)2006 mgr J.Wałaszek I LO w Tarnowie

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

Dim As Double a, b, c, delta, x1, x2
    
Print "   Rownanie kwadratowe"
Print "    ax^2 + bx + c = 0"
Print "   -------------------"
Print "(C)2006 mgr Jerzy Walaszek"
Print
Input "a = ", a
Input "b = ", b
Input "c = ", c
Print
Print "WYNIKI:"
Print
If Abs(a) < EPS Then
  Print "Brak rownania kwadratowego"
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 "Nacisnij Enter..."
Sleep
End
Python (dodatek)
# Program rozwiązuje równanie kwadratowe
#---------------------------------------
# (C)2006 mgr J.Wałaszek I LO w Tarnowie

import math

# dokładność porównania z zerem
EPS = 0.0000000001

print("   Równanie kwadratowe")
print("    ax^2 + bx + c = 0")
print("   -------------------")
print("(C)2026 mgr Jerzy Wałaszek")
print()
a = float(input("a = "))
b = float(input("b = "))
c = float(input("c = "))
print()
print("WYNIKI:")
print()
if abs(a) < EPS:
    print("Brak równania kwadratowego")
else:
    delta = b * b - 4 * a * c
    if abs(delta) < EPS: delta = 0
    if delta < 0:
        print("Brak pierwiastków rzeczywistych")
    else:
        x1 = (-b - math.sqrt(delta)) / 2 / a
        x2 = (-b + math.sqrt(delta)) / 2 / a
        print("x1 = %12.5f" % x1)
        print("x2 = %12.5f" % x2)
print()
input("Naciśnij Enter...")
Wynik:
   Równanie kwadratowe
    ax^2 + bx + c = 0
   -------------------
(C)2026 mgr Jerzy Wałaszek

a = 1
b = -1
c = -6

WYNIKI:

x1 =     -2.00000
x2 =      3.00000

Naciśnij Enter...
JavaScript
<html>
  <head>
  </head>
  <body>
<div style="overflow-x: auto;"
     align="center">
  <table
  border="0"
  cellpadding="4"
  style="border-collapse:
         collapse">
    <tr>
      <td nowrap>
        <form
        name="frmbincode"
        style="text-align: center;
               background-color:
               #E7E7DA">
          <b><big>
          Demonstracja rozwiązywania<br>
          równania kwadratowego
          </big></b><br>
          <br>
          ax<sup>2</sup> +
          bx + c = 0<br>
          <br>
          &nbsp;&nbsp;
          (C)2026
          mgr Jerzy Wałaszek
          I LO w Tarnowie
          &nbsp;&nbsp;
          <hr>
          Wpisz do pól edycyjnych<br>
          kolejne współczynniki 
          równania:<br>
          <br>
          a = <input
              type="text"
              name="wsp_a"
              size="16"
              value="12"
              style="text-align:
              right">
          <br>
          b = <input
              type="text"
              name="wsp_b"
              size="16"
              value="-3"
              style="text-align:
              right">
          <br>
          c = <input
              type="text"
              name="wsp_c"
              size="16"
              value="-6"
              style="text-align:
              right">
          <hr>
          <input
          type="button"
          value="Rozwiąż"
          name="B2"
          onclick="main()">
          <hr>
          <b>Wynik:</b>
          <div id="out">.</div>
        </form>
      </td>
    </tr>
  </table>
</div>

<script language=javascript>

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

function main()
{
  // dokładność porównania z zerem
  var EPS = 0.0000000001
  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 równanie " +
        "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 pierwiastków " +
          "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>
  </body>
</html>
Demonstracja rozwiązywania
równania kwadratowego


ax2 + bx + c = 0

   (C)2026 mgr Jerzy Wałaszek I LO w Tarnowie   
Wpisz do pól edycyjnych
kolejne współczynniki równania:

a =
b =
c =

Wynik:
.

do podrozdziału  do strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2026 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.