Funkcja kwadratowa.

0

Utknąłem na delcie. Nie mogę przejść do delty jak wynosi 0.Program pomija tego ifa?

#include<iostream>
#include<conio.h>
#include<math.h>
//liczenie delty
float delta(float wartoscb, float wasrtosca, float wartoscc)
{
	return (wartoscb*wartoscb) - 4 * (wasrtosca*wartoscc);
}
//liczenie miejsca zerowego
float mz(float wartoscb1, float wartosca1)
{
	return (-wartoscb1) / (2 * wartosca1);
}

void main()
{
//pobieranie informacji
float a;
std::cout << "podaj wspolczynnik a:";
std::cin >> a;

float b;
std::cout << "podaj wspolczynnik b:";
std::cin >> b;

float c;
std::cout << "podaj wspolczynnik c:";
std::cin >> c;



//rozwazanie czy okey
if (a != 0)
{
	std::cout << "delta wynosi:" << delta(b, a, c);
//tutaj jest blad
	if (delta == 0)
	{
		std::cout << mz(b,a);
	}
}
	else
	{
		std::cout << "funkcja niepoprawna a nie moze byc zerem.";
	}
	_getch();
}
	

0

Sformatuj kod poprawnie, a znajdziesz błąd.

PS \Delta \leq 0 jest jak najbardziej poprawna, ale wynik nie będzie w zbiorze liczb rzeczywistych.


EDIT: Problemem jest zapewne to jak działają liczby zmiennoprzecinkowe. Krótka instrukcja jak, i dlaczego akurat tak, je porównywać

2
if (delta == 0)
{
	std::cout << mz(b,a);
}

Delta to nie zmienna a funkcja.
Albo wywołaj funkcję z tymi samymi parametrami albo zapisz wynik który zwraca funkcja podczas cout do zmiennej i użyj jej.

0

ja jeszcze dodam, że liczb zmiennoprzecinkowych nie powinno się porównywać operatorem == lub !=.
Wszelkie niedokładności obliczeń (liczby zmiennoprzecinkowe mają skończoną precyzję) powodują, że coś co ma być zerem może być czymś tylko bliskie zera.

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