#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; }