Я на правильном пути, чтобы найти реальные квадраты? - PullRequest
0 голосов
/ 02 июня 2019

Я делаю свой первый код самостоятельно. Все до сих пор было копией вставки, внести некоторые изменения в примеры. Я думаю, что я иду в правильном направлении, но не уверен.

#include <iostream>
#include <cmath>
using namespace std;
int main ( )

{
    int a, b, c, x1, x2;

        cout << "Please enter an integer value for a " << endl;
            cin >> a;
        cout << "Please enter an integer value for b " << endl;
            cin >> b;
        cout << "Please enter an integer value for b " << endl;
            cin >> c;

        cout << "           The Quadratic Formula is: \n";
        cout << "           X = (-b +- sqrt ((b * b) - 4 * a * c)) \ (2 * a)\n";
        cout << " \n";

        x1 = sqrt((b * b)- 4 * a *c);
        x2 = -sqrt((b * b) - 4 * a * c);

        if (x1 < 0) 
        {
            //use 1, 2, 3 
            cout << "There are no real roots 1";
            cout << x1;
        }

            else if (x1 == 0)
            {
                //use 4, 12, 9
                cout << "There is one real root ";
                cout << x1;
            }

                else 
                {
                    //use 2, 11, 5
                    cout << "There are two real roots ";
                    cout << x1 << ", " << x2;
                }

    return 0;
}

Если я введу три числа, когда их попросят, он должен рассчитать, нет ли у них реальных квадратов, одного реального квадрата или двух реальных квадратов, и сообщить вам результаты. Похоже, что это так, но я не уверен, что у меня есть математика. Я нашел некоторые цифры, которые дают индивидуально ожидаемые результаты. Я не уверен, поставил ли я правильную математику, или это можно было бы сделать проще? Спасибо вперед.

1 Ответ

0 голосов
/ 02 июня 2019

Вам нужно только взглянуть на дискриминант квадратичной функции, чтобы увидеть тип ее корней.Дискриминант - это часть под квадратным корнем в квадратном уравнении:

quadratic equation

Если дискриминант отрицательный, корни мнимые.Если оно положительное, существуют два разных реальных корня.И если он равен нулю, существует только один корень размером -b/(2*a).

Так что вы можете сделать что-то вроде этого:

float tol = 1e-6;
float discriminant = b*b -4*a*c;
if ((discriminant < 0.0 + tol) && (discriminant > 0.0 - tol)) {
  std::cout << "one real root.\n";
} else if (discriminant < 0.0) {
  std::cout << "imaginary roots.\n";
} else {
  std::cout << "real roots.\n";
}

Кроме того, я бы не использовал целые числа в математических выражениях,они не допускают десятичные дроби, и поэтому вы получите неожиданные результаты.

Изображение взято из Википедия .

...