Zadanie z funkcją kwadratową spoj

0

Witam!
Mierzę się z takim zadaniem:
Napisz program, który wyznacza liczbę pierwiastków rzeczywistych równania kwadratowego.
Wejście
Na wejście programu podana zostanie pewna nieokreślona, ale niewielka ilość zestawów danych. Każdy zestaw składać się będzie z 3 liczb rzeczywistych (współczynników A, B i C równania Ax^2 + Bx + C = 0) rozdzielonych spacjami. Poszczególne zestawy zostaną rozdzielone znakiem nowej linii. Można przyjąć, że A jest różne od zera.
Wyjście
Na wyjściu ma się pojawić ciąg liczbowy, którego i-ta pozycja jest równa liczbie pierwiastków rzeczywistych i-tego wczytanego z wejścia równania. Poszczególne liczby należy rozdzielić znakami nowej linii.

Napisałem coś takiego:

#include <iostream>

using namespace std;

int main()
{
    float a, b, c, delta;

    while(cin >> a)
    {
    cin >> b;
    cin >> c;

    delta = (b*b) - (4 * a * c);

    if (delta = 0)
    {
        cout << endl << "1" <<endl;
    }

    else if (delta > 0)
    {
            cout << endl << "2" <<endl;
    }

    else if (delta < 0)
    {
        cout << endl << "0" <<endl;
    }

    }

}

Problem polega na tym, że program nie wypisuję liczby pierwiastków i nie wiem co może być tego przyczyną

5
    if (delta = 0)

masz przypisanie zamiast porównania

Poza tym, wypisujesz za dużo znaków nowych linii (liczby mają być oddzielone jednym, nie dwoma). A wczytywanie bardziej by mi pasowało jako cin >> a >> b >> c, ale to akurat tylko kwestia upodobań.

0
kq napisał(a):
>     if (delta = 0)
> ```
> masz przypisanie zamiast porównania
> 
> Poza tym, wypisujesz za dużo znaków nowych linii (liczby mają być oddzielone jednym, nie dwoma). A wczytywanie bardziej by mi pasowało jako `cin >> a >> b >> c`, ale to akurat tylko kwestia upodobań.

Kurczę, faktycznie ;)
Jeden znak a sprawił mi problemu na pół godziny. Dzięki za pomoc!
3

Po drugie, bardzo mała szansa jest na liczbach zmiennoprzecinkowych, aby wystąpiła równość z zerem.
Ja bym zmienił

if(delta == 0)

na

constexpr double EPSYLON = 0.00001;
... 
if(delta <= EPSYLON && delta>=0 )    /// autoporawka

1 użytkowników online, w tym zalogowanych: 0, gości: 1