В чем проблема с этим кодом для калькулятора разрешающей способности?

#c #if-statement #calculator #quadratic

#c #if-оператор #калькулятор #квадратичный

Вопрос:

Этот код предназначен для калькулятора разрешающей способности (переменные указаны на испанском языке, но я думаю, у вас не возникнет проблем с его чтением). Я не знаю, почему этот код не работает.

 #include <iostream>
#include <math.h>
#include <conio.h>
using namespace std;

int main() {
    int a, b, c, raiz, r, resultado1, resultado2;

    cout<<"Determine el valor de A: "; cin>> a; cout<<"n";
    cout<<"Determine el valor de B: "; cin>> b; cout<<"n";
    cout<<"Determine el valor de C: "; cin>> c; cout<<"n";

    raiz = pow(b,2) - (4 * a * c);
    r = sqrt(raiz);

    if (raiz > 0) {
        resultado1 = ((b * -1)   r) / (2 * a);
        resultado2 = ((b * -1) - r) / (2 * a);

        cout<<"El valor de X1 es: "<<resultado1<<endl<<endl;
        cout<<"El valor de X2 es: "<<resultado2<<endl<<endl;

    }

    if (raiz < 0) {
        cout<<"La raiz posee un valor negativo, por lo que no podra resolverse. El valor negativo dentro 
               de la raiz es "<<raiz;
    }

    getch();
    return 0;
}
  

Комментарии:

1. Вам нужно точно описать, как ваша программа не работает. Покажите пример ввода, вывода и ожидаемого результата.

2. Каким именно образом это «не работает»? Вам нужно быть более конкретным.

3. Совет: вместо того, чтобы объявлять кучу переменных сразу, объявляйте их по отдельности по мере необходимости в контексте, в котором они используются. Как в: double r = sqrt(raiz) .

4. Тактическое замечание: компиляторы становятся все умнее и умнее, и некоторые знают этот трюк, но pow(b,2) обычно он менее эффективен, чем b*b . простое умножение может быть быстрее, и поскольку pow оно работает с числами с плавающей запятой, а числа с плавающей запятой неточны, в вычислениях может быть нанесен некоторый ущерб, который становится действительно заметным при обратном преобразовании в целые числа.

5. Вы могли getch() бы заменить std::cin.ignore(1000000, 'n'); и удалить #include <conio.h>`

Ответ №1:

Даже если a , b и c равно int s, результаты для r , resultado1 и resultado2 не должны быть. Они должны быть определены как double s:

 double r, resultado1, resultado2;
  

Комментарии:

1. Спасибо вам и всем!!