выходные числа программы квадратного уравнения

извинения за стену текста.

Из книги, над которой я работаю, мне было дано следующее задание:

«Квадратные уравнения имеют вид: a x ^ 2 + b x + c = 0

Для их решения используется квадратичная формула: (-b ± √ (b ^ 2-4ac)) / 2a

Однако есть проблема: если b ^ 2-4ac меньше нуля, то он потерпит неудачу.
Напишите программу, которая может вычислить х для квадратного уравнения. Создайте функцию, которая выводит корни квадратного уравнения с учетом a, b, c.
Когда программа обнаружит уравнение без реальных корней, распечатайте сообщение. Откуда ты знаешь, что твои результаты правдоподобны? Можете ли вы проверить, что они верны?
«

Я написал свою программу. Но все результаты, которые я получаю, странные числа. Например: 7.08141e + 268. Это использует 4, так что sqrt должно быть 2, я считаю.

РЕДАКТИРОВАТЬ: я изменил код и получаю правильные значения для sqrt a, b, c сейчас. Но, x1 и x2 выдают nan, что просто неправильно. Надеюсь, этот код будет немного чище и лучше оформлен.

double quad_x1(double b, double a, double c) {
double x1 = (-b + sqrt(b * b - 4 * a * c)) / (2 *a);
return x1;
}

double quad_x2(double b, double a, double c) {
double x2 = (-b - sqrt(b * b - 4 * a * c)) / (2 * a);
return x2;
}

double square_root_a(double a) {
double sq_a=sqrt(a);
if(sq_a<0){
throw invalid_argument("Input is less than zero.");
}
else {
return sq_a;
}
}

double square_root_b(double b) {
double sq_b=sqrt(b);
if(sq_b<0) {
throw invalid_argument("Input is less than zero.");
}
else {
return sq_b;
}
}

double square_root_c(double c) {
double sq_c=sqrt(c);
if(sq_c<0) {
throw invalid_argument("Input is less than zero.");
}
else {
return sq_c;
}
}

int main ()
{
try{
double a=4;
double b=4;
double c=4;

double sq_a = square_root_a(a);
double sq_b = square_root_b(b);
double sq_c = square_root_c(c);
double x1 = quad_x1( b, a, c);
double x2 = quad_x2( b, a, c);

cout<<"The square roots are: a = "<<sq_a<<" b = "<<sq_b<<" c = "<<sq_c<<'\n';
cout<<"The answer to the quadratic is:\n";
cout<<"x1 = "<<x1<<'\n';
cout<<"x2 = "<<x2<<'\n';
}

catch (invalid_argument) {
cerr<<"Invalid Input - Less than zero"<<'\n';
return 1;
}

return 0;
}

0

Решение

Вы не вызываете свои функции.

   double square_root(double a, double b, double c); //send values to sqrt check
double quad_x1(double b, double a, double c);    //send values to get x1
double quad_x2(double b, double a, double c);    //send values to get x2

Это объявления функций для функций, уже определенных выше. Они абсолютно не влияют. Функции не называются.

Это как если бы вы сделали это:

#include <iostream>

void f()
{
std::cout << "global\n";
}

int main()
{
void f(); // just a declaration, f() is not called
}

Другая проблема в том, что вы не инициализируете main«s sq_a, sq_b, sq_c, x1 а также x2 переменные. Эти переменные имеют тип double, Поэтому пытаться читать с них неопределенное поведение, что означает, что вся ваша программа недействительна.

Похоже, у вас неправильное представление о том, что имена переменных в C ++ всегда глобальны. Но это далеко от истины. Ваш x1 в main не имеет абсолютно никакого отношения к x1 в quad_x1, Вы, вероятно, хотели сделать что-то вроде:

x1 = quad_x1(b, a, c);

И так далее…


Вы должны начать с многого более простые программы изучать C ++. Вызов функции и сохранение результата в локальной переменной — это самое основное, что вы можете сделать. Не занимайтесь квадратными уравнениями, пока не поймете это правильно. Начните с программы, которая использует функцию для добавления двух чисел.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]