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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Gibboustooth
733 / 201 / 11
Регистрация: 23.06.2011
Сообщений: 440
#1

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

24.08.2012, 15:45. Просмотров 886. Ответов 8
Метки нет (Все метки)

Добрый день, уважаемые форумчане. Покритикуйте пожалуйста, программу вывода на экран в полиномиальной форме и нахождения корней квадратного уравнения.
Особые проблемы, собственно, возникли с первой частью - над тем, как вывести на экран полином, отвечающий при любых введенных коэффициентах всем правилам математики, пришлось немало поломать голову.
Результаты таковы:
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;
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2012, 15:45     "Первый после Hello, world!". Программа решения квадратного уравнения
Посмотрите здесь:

Программа решения квадратного уравнения - C++
Написать программу которая будет решать квадратное уравнение (любое). Помогите пожалуйста написать.

Программа для решения квадратного уравнения. Где ошибка? - C++
где ошибка при создании программы для вычисления квадратного уравнения?? #include &lt; iostream&gt; #include &lt;conio.h&gt; #include &lt; math.h&gt; ...

Первый комом (Вывести "Это моя первая С++ программа.") - C++
Привет! Начал изучать С++ недавно. Классная штука! В книге был пример, который нужно повторить. Простенький код /* Программа №1 -...

Программа закрывается после решения первого уравнения. Как продолжить ее выполнение? - C++
Здравствуйте форумчани! Нужна ваша помощь... Задача простая, начал изучать С++ не так давно, но хз как реализовать, вообщем суть: ...

Функция решения квадратного уравнения - C++
Помогите пожалуйста составить программу в С++. Функции. Написать функцию решения квадратного уравнения. Исходными данными для...

Реализуйте программу решения квадратного уравнения - C++
Реализуйте программу решения квадратного уравнения с обязательной проверкой существования действительных корней, а также кратного корня....

Написать программу решения квадратного уравнения. - C++
Всем привет! Ребят, прошу помощи. помогите пожалуйста написать программу: Написать программу решения квадратного уравнения....

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор 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
1473 / 840 / 74
Регистрация: 26.03.2010
Сообщений: 2,881
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
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++
1) Написать программу решения квадратного уравнения. Корни только вещественные. Ввод и вывод через стандартные потоки ввода-вывода. Вывод...

Функции. Написать функцию решения квадратного уравнения - C++
Написать функцию решения квадратного уравнения; Кто поможет огромное СПАСИБО.

Найти ошибку в программе решения квадратного уравнения - C++
Помогите, пожалуйста, выловить ошибку. Заурядное квадратное уравнение, но корни выбивает не так, как следует. #include &lt;iostream&gt; ...

Написать программу решения квадратного уравнения. DEV C++ - C++
Помогите пожалуйста !! Написать программу решения квадратного уравнения. Корни могут быть комплексными. Установить ширину поля 10...

Как через "IF" сделать чтобы программа закрывалась после ввода неверного значения - C++
Как через &quot;If&quot; Зделать что бы когда ты вводишь не верное значение выполнялося else и консоль закрывалася а не переходило к следующему...


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

Или воспользуйтесь поиском по форуму:
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!". Программа решения квадратного уравнения
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru