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

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

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

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

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

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

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

Вывести решения уравнения, если их число конечно, "NO", если решений нет, и "INF", если их бесконечно много - C++
Задача с условным оператором. Решить в целых числах уравнение ax + b = 0. Входные данные Вводятся 2 целых числа: a и b. ...

Обучение по книге Страуструпа "принципы и практика C++". Не выводится "Hello, World" - C++
Ребят, помогите пожалуйста, пропал на первом же примере из книги, автор даёт код для вывода Hello world!#include &quot;std_lib_facilities.h&quot; ...

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

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

8
-=ЮрА=-
Заблокирован
Автор FAQ
24.08.2012, 15:59 #2
Ниже решение на 38 строк любого квадратного уравнения (даже для комплексных аргументов)
решение квадратного уравнения С++
Отработка
http://www.cyberforum.ru/attachment....p;d=1322218518
2
Gibboustooth
733 / 201 / 11
Регистрация: 23.06.2011
Сообщений: 440
24.08.2012, 16:12  [ТС] #3
Что выдаст ваша программа для a=0?
Наверное, нужно побольше 38 строк.

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

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

Вставить пробел после каждого символа "." "," "!" или "?", если за этими символами не следует пробел - C++
Вставить пробел после каждого символа &quot;.&quot; &quot;,&quot; &quot;!&quot; или &quot;?&quot;, если за этими символами не следует пробел (т. е. следует любой символ, кроме...

С++ консольное приложение win32, матерится на первое "pow" после "if", а на "system" говорит что неопределён. - C++
#define _CRT_SECURE_NO_WARNINGS #include &quot;stdafx.h&quot; #include &lt;math.h&gt; #include &lt;iostream&gt; #define Pi 3.1416 #include &lt;clocale&gt;...

После каждого знака препинания (".", ",", ";") вставить в строку пробел, если там его нет - C++
Выполните задания с использованием библиотечного класса string. Даны строка S. Необходимо после каждого знака препинания (&quot;.&quot;, &quot;,&quot;,...

На C++ в строке после символа - "+" поставить символ "*" и посчитать сколько "+" - C++
С++ Мы вводим вручную строку , (через cin &gt;&gt; )программа должна после каждого &quot;+&quot; поставить &quot;*&quot; потом посчитать сколько всего было &quot;+&quot;...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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