Instrukcja warunkowa wykonująca się bez potrzeby

0
if(delta > 0)
  {
    pierwiastek = sqrt(delta);
    x1 = (-b - pierwiastek)/(2*a);
    x2 = (-b + pierwiastek) / (2*a);
    printf("Funkcja ma dwa miejsca zerowe\nPierwsze miejsce zerowe: %f\nDrugie miejsce zerowe: %f\n",x1,x2);
  } 

Dlaczego mimo że delta wychodzi mniejsza od zera to wykonuję mi się ta instrukcja warunkowa ?np. jak dam a = 0 , b = 0, c = 0. Zmienne te są typu float.

0

Wrzuć więcej kodu, z tego nic nie wynika.

0

.

1

Jeżeli wpiszesz np.trzy zera, wartość zmiennej delta będzie nieokreślona w momencie jej sprawdzania.

0

Jak dasz a, b i c jako zero, to nigdzie nie ustalasz delta a potem odczytujesz wartość tej zmiennej. To jest UB. W praktyce dostajesz śmieciową wartość pseudolosową.

1

Jeśli a wynosi 0 to ile u ciebie wynosi delta?

0

jak to mogę poprawić ? Bo wydaję mi się że if na coś innego trzeba zamienić lecz nie wiem na co

0

Pobieraj dane w pętli dopóki nie dostaniesz poprawnych wartości. Lub oznaczaj (np. za pomocą osobnej zmiennej typu bool), że dany zestaw nie ma jednego wyniku.

0

ale o to chodzi że dla a = 0 , b =0, c = 0 ma pokazywać że równanie ma nieskończenie wiele rozwiązań. Mógłbym dać instrukcję goto na koniec funkcji, lecz wolałbym to jakoś inaczej załatwić.

0

No to opieraj się na delcie tylko wtedy, kiedy ją liczysz, a nie dla każdego zestawu...

0

.

0

Poza drobnymi nieścisłościami matematycznymi (równanie z ujemną deltą ma rozwiązanie + jeżeli a=0, nie mamy wcale równania kwadratowego) i dziwnym formatowaniem wygląda okej.

0

format kodu poprawie, pewnie chodzi o klamrę zamykającą instrukcję else, mógłbyś przykład o jaki chodzi Tobie z ujemną deltą ?

0

Chodzi o liczby urojone.

0

bo to ma być równanie kwadratowe pod liczby rzeczywiste to jest ok ?

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