Форум программистов, компьютерный форум CyberForum.ru

"Первый после Hello, world!". Программа решения квадратного уравнения - C++

Восстановить пароль Регистрация
 
Gibboustooth
733 / 201 / 11
Регистрация: 23.06.2011
Сообщений: 440
24.08.2012, 15:45     "Первый после Hello, world!". Программа решения квадратного уравнения #1
Добрый день, уважаемые форумчане. Покритикуйте пожалуйста, программу вывода на экран в полиномиальной форме и нахождения корней квадратного уравнения.
Особые проблемы, собственно, возникли с первой частью - над тем, как вывести на экран полином, отвечающий при любых введенных коэффициентах всем правилам математики, пришлось немало поломать голову.
Результаты таковы:
class poly_part
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class poly_part 
//class represents part of polynom
{
public:
    double value;
    string postfix;
    char sign;
    poly_part()
        :value(0),sign(' '),postfix("") { }
    poly_part(double val)   
        :value(abs(val)),postfix("") 
        {
            if (val==0)
                sign=' ';
            else if (val>0)
                sign='+';
            else
                sign='-';
        }       
    poly_part(double val, string pf)
        :value(abs(val))
        {
            if (val==0) {
                postfix="";
                sign=' ';
            }
            else {
                postfix=pf;
                if (val>0) 
                    sign='+';
                else
                    sign='-';
            }
        }   
};

string create_poly(vector<poly_part> parts)
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
string create_poly(vector<poly_part> parts) 
//build polynom from it's parts
{
    string pl;
    
    bool first=true;
    for (unsigned int i=0;i<parts.size();++i) {
        if (parts[i].value!=0) {
            if (parts[i].sign!='+'||!first) 
                pl+=parts[i].sign;
 
            if (first) 
                first=false;
 
            if (parts[i].value==1&&parts[i].postfix!="")
                pl+=parts[i].postfix;
            else
                pl+=to_string(parts[i].value)+parts[i].postfix;
        }
    }
    return pl;
}

double disc(double a, double b, double c)
C++ (Qt)
1
2
3
4
5
double disc(double a, double b, double c)
//calculates discriminant
{
    return b*b-4*a*c;
}

int main ()
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
int main () 
//get square equation factors and find roots
{
    double a=0;
    double b=0;
    double c=0;
 
 
    string eq;
    cout<<"Please enter coeffitients a, b, c of square equation\n";
    cin>>a>>b>>c;
 
    vector<poly_part> poly_parts(3);
    poly_parts[0]=poly_part(a,"x^2");
    poly_parts[1]=poly_part(b,"x");
    poly_parts[2]=poly_part(c);
 
    eq=create_poly(poly_parts)+"=0";
 
    if (a==0)
    {
        if (b==0)
        {
            if(c==0)
                cout<<" 0==0\n";
            else
                cout<<" "<<c<<"!=0\n";
        }
        else
            cout<<" Equation "<<eq<<" root:\n"
            <<"x="<<-b/c;
    }
    else
    {
        double d=disc(a,b,c);
        if (d<0)
            cout<<" Equation "<<eq<<" has no real roots\n";
        else if (d==0)
            cout<<" Equation "<<eq<<" roots:\nx1=x2="<<(-b)/(2*a)<<endl;
        else 
            cout<<" Equation "<<eq<<" roots:\n"
                <<" x1="<<(-b-sqrt(d))/(2*a)<<endl
                <<" x2="<<(-b+sqrt(d))/(2*a)<<endl;
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
24.08.2012, 15:59     "Первый после Hello, world!". Программа решения квадратного уравнения #2
Ниже решение на 38 строк любого квадратного уравнения (даже для комплексных аргументов)
решение квадратного уравнения С++
Отработка
http://www.cyberforum.ru/attachment....p;d=1322218518
Gibboustooth
733 / 201 / 11
Регистрация: 23.06.2011
Сообщений: 440
24.08.2012, 16:12  [ТС]     "Первый после Hello, world!". Программа решения квадратного уравнения #3
Что выдаст ваша программа для a=0?
Наверное, нужно побольше 38 строк.

Суть моего вопроса скорее в правильности "сборки" полинома, чем в собственно решении уравнения.

Но все равно спасибо.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,693
24.08.2012, 16:16     "Первый после Hello, world!". Программа решения квадратного уравнения #4
Цитата Сообщение от Gibboustooth Посмотреть сообщение
Что выдаст ваша программа для a=0?
это не квадратное уравнение
-=ЮрА=-
Заблокирован
Автор FAQ
24.08.2012, 16:17     "Первый после Hello, world!". Программа решения квадратного уравнения #5
Цитата Сообщение от Gibboustooth Посмотреть сообщение
Что выдаст ваша программа для a=0?
- я разрабатывал её для решения именно квадратного уравнения, если же а = 0 то уравнение не квадратное, а вида b*x + c = 0 и решается в уме(хотя ввести условие if(а == 0) вобщем то несложно). Возможно я не понял что вы хотели всем афишировать свой проект, тогда лучше было отпостить в тему Бета-тестирование.
Gibboustooth
733 / 201 / 11
Регистрация: 23.06.2011
Сообщений: 440
24.08.2012, 16:34  [ТС]     "Первый после Hello, world!". Программа решения квадратного уравнения #6
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Возможно я не понял что вы хотели всем афишировать свой проект, тогда лучше было отпостить в тему Бета-тестирование.
Я решил достаточно сложное для себя задание и решил узнать, насколько адекватно мое решение поставленной задаче, потому что сам я этого оценить не могу.
Задача была:
а) для любых введенных пользователем a, b, c, вывести на экран уравнение вида ax^2+bx+c в форме, соответствующей принятым в математике правилам записи;
б) для любых введенных пользователем a, b, c, найти решение уравнения ax^2+bx+c=0 в действительных числах.
-=ЮрА=-
Заблокирован
Автор FAQ
24.08.2012, 16:57     "Первый после Hello, world!". Программа решения квадратного уравнения #7
Gibboustooth, вот есть специальный раздел для этого.
http://www.cyberforum.ru/beta-testing/
В любом случае решать сию проблему с векторами и классом, как по мне всё ранво что палить из пушки по комарам (т.е я не вижу смысла в той всей горе кода). Ну а так вы молодец, постарались и освоили приличную часть плюсов Изначально когда отпостил своим линком не понял что вам нужна ну как бы критика проекта или оценка.
Если интересно моё мнение, то делать public переменными поля класса я бы не рекомендовал - делйте поля private переменными и снабдите класс необходимым числом методов Set(Get)
Цитата Сообщение от Gibboustooth Посмотреть сообщение
double value;
* * string postfix;
* * char sign;
Далее мне не очень понятен смысл всего - вы делаете лексический разбор строки, ну тогда я не увидел скажем блокировки на случай ввод x^(и всё) x^3 тобишь так называемую "защиту от дурака". В целом всё же мне кажется вы сложновато решили, ну а так счиаю, что вам лучше отписаться в разделе бета-тестирование дабы кроме моих замечаний ещё кто-то мог выссказаться
4iFF
 Аватар для 4iFF
19 / 19 / 1
Регистрация: 06.07.2012
Сообщений: 88
24.08.2012, 18:50     "Первый после Hello, world!". Программа решения квадратного уравнения #8
Цитата Сообщение от neske Посмотреть сообщение
это не квадратное уравнение
Это линейное уравнение
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2012, 19:20     "Первый после Hello, world!". Программа решения квадратного уравнения
Еще ссылки по теме:

C++ Обучение по книге Страуструпа "принципы и практика C++". Не выводится "Hello, World"
Как через "IF" сделать чтобы программа закрывалась после ввода неверного значения C++
Программа закрывается после решения первого уравнения. Как продолжить ее выполнение? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Gibboustooth
733 / 201 / 11
Регистрация: 23.06.2011
Сообщений: 440
24.08.2012, 19:20  [ТС]     "Первый после Hello, world!". Программа решения квадратного уравнения #9
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Далее мне не очень понятен смысл всего - вы делаете лексический разбор строки, ну тогда я не увидел скажем блокировки на случай ввод x^(и всё) x^3 тобишь так называемую "защиту от дурака".
Не совсем так. Я получаю от пользователя числовые коэффициенты, а затем записываю в ответе начальный вид уравнения. Условно говоря, пользователь ввел "-1 2 4" и на выходе получает "Корни уравнения -x^2+2x+4=0 такие-то". Соответственно, мне надо учесть все варианты - чтобы не вылезало в начале выражения "+", чтобы не получалось "... +1x ..." вместо "... +x ..." и так далее. При этом, чтобы учитывались все возможные (даже самые идиотские) варианты ввода. Не то, чтобы в этом был какой-то особый смысл, но на то она и учеба
Yandex
Объявления
24.08.2012, 19:20     "Первый после Hello, world!". Программа решения квадратного уравнения
Ответ Создать тему
Опции темы

Текущее время: 11:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru