#include
#include
#include
using namespace std;
void solveQuadratic(float a, float b, float c, float &x1, float &x2, short &type) {
float delta = (b * b) - (4 * a * c);
type = 0;
x1 = x2 = 0;
if (a == 0) {
if (b == 0) {
if (c == 0) {
cout << "Równanie jest równaniem tożsamościowym; posiada nieskończenie wiele rozwiązań" << "\n";
type = 3;
} else {
cout << "Równanie nie posiada rozwiązania;" << "\n";
type = 4;
}
} else {
cout << "Równanie jest równaniem liniowym; posiada rozwiązanie:" << "\n";
type = 2;
x1 = -c/b;
}
return;
}
else if (delta < 0) {
cout << "Brak pierwiastków w zbiorze liczb rzeczywistych; delta jest ujemna" << "\n";
type = 1;
return;
}
else if (delta == 0)
cout << "Równanie posiada pierwiastek podwójny:" << "\n";
else
cout << "Równanie posiada pierwiastki:" << "\n";
x1 = (-b - sqrt(delta)) / (2 * a);
x2 = (-b + sqrt(delta)) / (2 * a);
}
/*
types:
## równanie kwadratowe:
0 - posiada pierwiastki / pierwiastek podwójny (4, 3, -1 / 1, 3, 2.25)
1 - brak pierwiastków (1, 2, 3.141593)
## równanie liniowe:
2 - posiada rozwiązanie (0, 5, 1.618034)
## inne
3 - równanie tożsamościowe (0, 0, 0)
4 - brak rozwiązań (0, 0, 2.718282)
*/
void readFromInput(float (&values)[3]) {
bool correct;
char prompt;
for (int i = 0; i < 3; i ++) {
prompt = ((i == 0) ? 'a' : ((i == 2) ? 'c' : 'b'));
do {
cout << prompt << ": ";
cin >> values[i];
if (!cin) {
cout << "): Takie równanie możesz sobie rozwiązać samemu – wpisz prawidłowe dane" << "\n";
correct = false;
cin.clear();
} else correct = true;
cin.ignore(numeric_limits::max(), '\n');
} while (correct == false);
}
}
int main() {
float a, b, c, x1, x2, values[3];
short type;
cout << "Wprowadź równanie w postaci ax\u00b2 + bx + c = 0:" << "\n";
readFromInput(values);
cout << "\n";
solveQuadratic(values[0], values[1], values[2], x1, x2, type);
switch (type) {
case 1:
case 4:
cout << "???";
break;
case 0:
case 2:
cout << "x\u2081 = " << (x1 == 0.0 ? abs(x1) : x1) << "\n";
if (type == 0)
cout << "x\u2082 = " << x2 << endl;
break;
}
cout << endl;
return 0;
}