Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

Autor artykułu: mgr Jerzy Wałaszek

©2026 mgr Jerzy Wałaszek

obrazek

Równania

Równanie kwadratowe

SPIS TREŚCI REMANENT

Algorytm i program

Funkcja kwadratowa (ang. quadratic function) jest wielomianem stopnia drugiego:

Współczynniki a, b i c są liczbami rzeczywistymi.

Wykresem funkcji kwadratowej jest parabola:

obrazek

Równanie kwadratowe (ang. quadratic equation) powstaje, gdy przyrównamy funkcję kwadratową do zera:

Matematycy już od czasów starożytnych badali równanie kwadratowe, ponieważ często pojawia się ono przy rozwiązywaniu różnych problemów praktycznych.

W zależności od położenia paraboli względem osi OX, mamy następujące przypadki:

  1. Parabola leży ponad osią OX lub poniżej osi OX: równanie nie posiada pierwiastków rzeczywistych:

    obrazek
  2. Parabola jest styczna do osi OX, równanie posiada tzw. pierwiastek podwójny:

    obrazek
  3. Parabola przecina oś OX, równanie posiada dwa różne pierwiastki:

    obrazek

Równanie kwadratowe rozwiązujemy następująco:

Formalnie rozwiązanie wygląda następująco:

Jeśli współczynnik a jest równy 0, to równanie kwadratowe redukuje się do równania liniowego:

Równanie to rozwiązujemy wg metody opisanej w poprzednim rozdziale.

Jeśli a jest różne od zera, to wyliczamy tzw. wyróżnik delta (ang. delta discriminant):

Pierwiastki równania możemy teraz zapisać jako:

W zależności od wartości wyróżnika delta mamy następujące przypadki:

  1. Wyróżnik delta mniejszy od zera, brak pierwiastków rzeczywistych, są dwa pierwiastki zespolone:

  2. Wyróżnik delta równy zero, pierwiastek podwójny:

  3. Wyróżnik delta większy od zera, dwa różne pierwiastki rzeczywiste:

Zwróć uwagę, że równanie wielomianowe ma zawsze tyle pierwiastków, ile wynosi stopień wielomianu. Jest to własność równań wielomianowych udowodniona przez matematyków. Stąd równanie kwadratowe będące równaniem wielomianowym stopnia drugiego ma zawsze dwa pierwiastki.

Algorytm rozwiązywania równania kwadratowego

Dane wejściowe:

ε dokładność przyrównania do zera
a,b,c współczynniki

Dane wyjściowe

x1, x2 rozwiązania

Zmienne pomocnicze

delta wyróżnik równania

Lista kroków

K01: Jeśli |a| > ε,
to idź do kroku K04
Sprawdzamy, czy a jest różne od zera
K02: Rozwiąż równanie liniowe bx + c = 0 Wykorzystujemy algorytm z poprzedniego rozdziału
K03: Zakończ  
K04: Obliczamy wyróżnik delta
K05: Jeśli |delta| ≤ ε, to

Zakończ
delta = 0? Pierwiastek podwójny
K06: Jeśli delta < -ε, to

Zakończ
delta < 0? Dwa pierwiastki zespolone
K07: Dwa pierwiastki rzeczywiste
K08: Zakończ  

Przykładowy program rozwiązuje kilka równań, a algorytm został w nim zaimplementowany w postaci funkcji.

Brak pierwiastków rzeczywistych:

Pierwiastek podwójny:

Dwa pierwiastki rzeczywiste:

C++
// Równanie kwadratowe
// (C)2026 mgr Jerzy Wałaszek
// Metody numeryczne 0041
//---------------------------

#include <iostream>
#include <windows.h>
#include <cmath>
#include <iomanip>

using namespace std;

// Tutaj definiujemy
// dane wejściowe
//------------------

// Dokładność porównania
// z zerem
double eps = 1e-12;

// Wyświetla + przed
// liczbą dodatnią
// '-' przed ujemną
//------------------
void pl(double x)
{
  if(x >= 0)
    cout << '+';
  else
    cout << '-';
  cout << fabs(x);
}

// Funkcja rozwiązująca
// równanie kwadratowe
// a,b,c - współczynniki
//         wielomianu
//----------------------
void qe(double a,
        double b,
        double c)
{
  double delta,x1,x2,xre,xim;

  cout << "Równanie: "
       << a << "*x^2";
  pl(b);
  cout << "*x";
  pl(c);
  cout << " = 0\n";

  // Jeśli a = 0,
  // to mamy równanie liniowe
  if(fabs(a) < eps)
  {
    cout <<
    "Równanie redukuje się do "
    "równania liniowego.\n";
    if(fabs(b) <= eps)
    {
      cout << "Równanie jest ";
      if(fabs(c) <= eps)
        cout << " nieoznaczone.";
      else
        cout << " sprzeczne.";
    }
    else
    {
      x1 = - c / b;
      cout << "x = " << x1;
    }
  }
  else
  {
    // Obliczamy wyróżnik
    delta = b * b - 4 * a * c;

    // W zależności od wartości
    // wyróżnika mamy
    // 3 różne przypadki

    if(fabs(delta) <= eps)
    {
      // 1. delta = 0
      x1 = - b / 2 / a;
      cout
      << "PIERWIASTEK PODWÓJNY:\n"
      << "x1 = x2 = " << x1;
    }
    else if(delta < -eps)
    {
      // 2. delta < 0

      // Część rzeczywista
      xre = - b / 2 / a;
      // Część urojona
      xim = sqrt(-delta) / 2 / a;
      cout
      << "2 PIERWIASTKI ZESPOLONE:\n"
      << "x1 = ";
      pl(xre);
      pl(xim);
      cout << "i  x2 = ";
      pl(xre);
      pl(-xim);
      cout << "i";
    }
    else
    {
      // 3. delta > 0
      delta = sqrt(delta);
      x1 = (-b - delta) / 2 / a;
      x2 = (-b + delta) / 2 / a;
      cout
      << "2 PIERWIASTKI RZECZYWISTE:\n"
      << "x1 = " << x1
      << "  x2 = " << x2;
    }
  }
  cout << endl << endl;
}

// Program główny
//---------------

int main()
{
  SetConsoleOutputCP(CP_UTF8);
  SetConsoleCP(CP_UTF8);

  cout << setprecision(3)
       << fixed
       << "Równania kwadratowe\n"
          "-------------------\n\n";

  qe(3,12,15);
  qe(9,12,4);
  qe(1,-1,-2);
  qe(0,0,0);
  qe(0,0,1);
  qe(0,1,2);

  system("pause");
  return 0;
}
Wynik
Równania kwadratowe
-------------------

Równanie: 3.000*x^2+12.000*x+15.000 = 0
2 PIERWIASTKI ZESPOLONE:
x1 = -2.000+1.000i  x2 = -2.000-1.000i

Równanie: 9.000*x^2+12.000*x+4.000 = 0
PIERWIASTEK PODWÓJNY:
x1 = x2 = -0.667

Równanie: 1.000*x^2-1.000*x-2.000 = 0
2 PIERWIASTKI RZECZYWISTE:
x1 = -1.000  x2 = 2.000

Równanie: 0.000*x^2+0.000*x+0.000 = 0
Równanie redukuje się do równania liniowego.
Równanie jest  nieoznaczone.

Równanie: 0.000*x^2+0.000*x+1.000 = 0
Równanie redukuje się do równania liniowego.
Równanie jest  sprzeczne.

Równanie: 0.000*x^2+1.000*x+2.000 = 0
Równanie redukuje się do równania liniowego.
x = -2.000
Python (dodatek)
# (C)2026 mgr Jerzy Wałaszek
# Metody numeryczne 0041
#---------------------------

from math import sqrt,fabs

# Tutaj definiujemy
# dane wejściowe
#------------------

# Dokładność porównania z zerem
EPS = 1e-12

# Funkcja wypisuje liczbę
# ze znakiem + lub -
#------------------------
def pl(x):
    if x >= 0:
        print('+', end='')
    else:
        print('-', end='')
    print(f"{math.fabs(x):.3f}",
          end='')

# Funkcja rozwiązująca
# równanie kwadratowe
# a,b,c - współczynniki wielomianu
#---------------------------------
def qe(a,b,c):
    print(f"Równanie: {a:.3f}*x^2",
          end="")
    pl(b)
    print("*x", end="")
    pl(c)
    print(" = 0")

    # Jeśli a = 0,
    # to mamy równanie liniowe
    if fabs(a) < EPS:
        print(
          "Równanie redukuje się do "
          "równania liniowego.")
        if fabs(b) <= EPS:
            print("Równanie jest ",
                  end="")
            if fabs(c) <= EPS:
                print("nieoznaczone.")
            else:
                print("sprzeczne.")
        else:
            x1 = - c / b
            print(f"x = {x1:.3f}")
    else:
        # Obliczamy wyróżnik
        delta = b * b - 4 * a * c

        # W zależności od wartości
        # wyróżnika mamy trzy
        # różne przypadki
        if fabs(delta) <= EPS:
            # 1. delta = 0
            x1 = - b / 2 / a
            print("PIERWIASTEK "
                  "PODWÓJNY:")
            print(f"x1 = x2 = {x1:.3f}")
        elif delta < -EPS:
            # 2. delta < 0

            # Część rzeczywista
            xre = - b / 2 / a
            # Część urojona
            xim = sqrt(-delta) / 2 / a
            print(
              "2 PIERWIASTKI "
              "ZESPOLONE:")
            print(f"x1 = {xre:.3f}",
                  end="")
            pl(xim)
            print(f"i  x2 = {xre:.3f}",
                  end="")
            pl(-xim)
            print("i")
        else:
            # 3. delta > 0
            delta = sqrt(delta)
            x1 = (-b - delta) / 2 / a
            x2 = (-b + delta) / 2 / a
            print("2 PIERWIASTKI "
                  "RZECZYWISTE:")
            print(f"x1 = {x1:.3f}  "
                  f"x2 = {x2:.3f}")
    print()

# Program główny
#---------------
print("Równania kwadratowe\n"
      "-------------------\n")
qe(3,12,15)
qe(9,12,4)
qe(1,-1,-2)
qe(0,0,0)
qe(0,0,1)
qe(0,1,2)

input("Naciśnij Enter...")

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.