Решение полных и неполных квадратных уравнений.

Начал учить c++.
Вот сделал код для решения квадратных уравнений через дискриминант:

#include <iostream>
#include <math.h>

using namespace std;

float a, b, c, d, x1, x2;

void func()
{
    d = b * b - (4 * a * c);
    if (d > 0) {
        x1 = (-b + sqrt(d)) / (2 * a);
        x2 = (-b - sqrt(d)) / (2 * a);
        cout << "Ответ: " << endl;
        cout << "   x1 = " << x1 << endl;
        cout << "   x2 = " << x2 << endl;
    } else if (d == 0) {
        x1 = (b * -1 / (2 * a));
        cout << "Ответ: " << endl;
        cout << "   x = " << x1 << endl;
    } else {
        cout << "Ответ: " << endl;
        cout << "   Корней нет";
    }
}

int main()
{
    setlocale(0, "");
    cout << "Решение неполных и полных квадратных уравнений. ax^2+bx+c" << endl;
    cout << "Введите a: ";
    cin >> a;
    cout << "Введите b: ";
    cin >> b;
    cout << "Введите c: ";
    cin >> c;
    func();
    return 0;
}

Так вот, можно ли как-то этот код написать «Проще», меньше размером?
И если да, то как?
Заранее спасибо!

А ты свою прогу тестировал? Или просто несколько раз запустил со случайными числами?

Например, вот три набора коэффициентов, с которыми прога работает неправильно:

0, 2, -10
0, 0, 0
0, 0, 1

Т.е. нужны дополнительные проверки.

Функция здесь не нужна. Все равно все переменные глобальные.
Но если делать «как правильно», то функция должна выглядеть примерно так:

int sqr_root(double a, double b, double c, double &x1, double &x2)

Функция возвращает количество корней (от 0 до 2) или, допустим, -1, если заданы некорректные коэффициенты (напр. 0, 0, 1). Первые три аргумента — коэффициенты, последние два — возвращаемые значения корней. Расчеты лучше делать с типом double, а не float.
И убрать глобальные переменные.

В функции нужно убрать все повторяющиеся вычисления. Их надо делать один раз и сохранять результаты в локальных переменных. Это в данном случае мелочи, но не надо привыкать к индийскому коду.

Из функции убрать весь вывод на консоль. Функция что делает? Вычисляет корни квадратного уравнения? Вот пусть этим и занимается. А обработку результатов лучше вынести в вызывающий код (т.е. в данном случае в main).

Так вот, можно ли как-то этот код написать «Проще», меньше размером?

Вопрос неправильно поставлен. Должно быть так: «можно ли как-то этот код написать правильно» ;)

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.