Знак a бажано перевіряти до дискримінанта - принаймні на 0.
vzaluskiy23 написав: if (d < 0) {
cout << "Rivnшіе nemae rozviazkiv, oskilki D<0!\n";
}
Рівняння розв'язків не має, парабола повністю або над, або під віссю X; а от нерівність може мати: залежно від знаку a, або дійсно їх не буде, або будь-яке число буде розв'язком. Але якщо a==0, то рівняння не квадратне, і дискримінант не має сенсу (хоча формально він буде b2, тобто ця гілка не спрацює).
vzaluskiy23 написав:if (d == 0) {
double x0 = -b / 2*a;
cout << "X e (-inf;" << x0 << "]\n";
}
А тут узагалі неправильно. Якщо d==0, то парабола торкається осі X вершиною; залежно від знаку a, розв'язок буде або вся числова пряма, або лише одна точка - ця сама вершина (нерівність не строга). Особливо цікаво, що стається при a==0 - тоді сюди управління буде передане лише якщо b==0, і це навіть не лінійна нерівність, а певна тотожність залежно від c, розв'язками якої буде або вся числова пряма, або не буде взагалі.
vzaluskiy23 написав:double x1 = b - sqrt(d) / 2 * a;
double x2 = b + sqrt(d) / 2 * a;
if(x1<x2){
По-перше, ви неправильно обчислюєте корені. У операцій ділення (/) і множення (*) пріоритет однаковий, і ви множите sqrt(d)/2 на a замість ділити. Додайте дужки.
А по-друге, арифметичний квадратний корінь завжди додатний, тому x2 буде меншим за x1 тоді і лише тоді, коли a<0, ну і навпаки. Тобто тут перевірка на знак a безглузда.