Задать вопрос
@unk1nD000

Как исправить решение?

Доброго времени суток!

Господа, решаю такую
задачу
638f7ad9df1b0593360685.png


такое получилось решение
#include "D:\c++_book\std_lib_facilities.h"

using namespace std;

struct Solve {
	int numRoots;
	double x1;
	double x2;
};

Solve sqeq(double a, double b, double c) {
	Solve equation;
	double d = b * b - 4 * a * c, x1, x2;
	
	try {
		if (d > 0) {
			x1 = ((-b) + sqrt(d)) / (2 * a);
			x2 = ((-b) - sqrt(d)) / (2 * a);

			equation.numRoots = 2;
			equation.x1 = x1;
			equation.x2 = x2;
			
			return equation;
		}

		if (d == 0) {
			x1 = -(b / (2 * a));
			x2 = x1;

			equation.numRoots = 1;
			equation.x1 = x1;
			equation.x2 = x2;

			return equation;
		}

		if (d < 0) {
			equation.numRoots = 0;
			equation.x1 = 0;
			equation.x2 = 0;
			error("Equation has no roots!");
			
			return equation;
		}
	}

	catch (exception& e) {
		cerr << "Oopsie... " << e.what() << endl;
	}
}

int main() {
	double a, b, c;

	cin >> a >> b >> c;
	
	Solve equation = sqeq(a, b, c);

	if (equation.numRoots == 1)
		cout << "Root is: " << equation.x1;

	if (equation.numRoots == 2)
		cout << "Roots is: " << equation.x1 << " " << equation.x2;
}
>


При введёных значениях где дискриминант меньше 0 (например 1, 2, 3);

Получаю такую
ошибку
638f7cc75ce68717207690.png


Что нужно изменить в коде чтобы программа завершалась корректно?
  • Вопрос задан
  • 88 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
@Toffic
Я думаю, принцип будет понятен из такого минимального кода.

#include <iostream>
#include <stdexcept>

double func(double a, double b, double c)
{
	double d = b * b - 4 * a * c;
	if (d < 0) {
		throw std::runtime_error("d < 0");
	}
	return d;
}

int main()
{
	double a = 1.0;
	double b = 2.0;
	double c = 3.0;
	double d;

	try {
		d = func(a, b, c);
		std::cout << "d = " << d << "\n";
	} catch (const std::exception& e) {
		std::cout << "ERROR: " << e.what() << "\n";
	}
	std::cout << "Press any key...";
	std::cin.get();
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы