Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
vortexx1
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
#1

Класс квадратных уравнений

26.11.2011, 12:54. Просмотров 1404. Ответов 5
Метки нет (Все метки)

Всем привет. Написал класс квадратных уравнений и программу, которая его использует (решает их).
Все работает, но по возможности проверьте, пожалуйста и не скажите, где и почему я не прав. Желательно не только по поводу самим способов решения задач, и по поводу остальных вещей вроде форматирования кода и т. д. Заранее спасибо.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class QuadraticEquations
{
public:
    QuadraticEquations( double = 1, double = 0, double = 0,  
                        double = 0, double = 0 );   
    
    void setValues( double, double, double );          
    
    bool solve();             // решает уравнение. возвращает 0 в случае "НЕТ КОРНЕЙ"
                              // и 1 в случае успешного решения
    double getX1() const;                             
    double getX2() const;
       
private:
    double a;
    double b;
    double c;
    
    double x1, x2;
    
    double findDiscrim();                                      
};
C++
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
46
47
48
#include <cmath>
#include "QuadraticEquations.h"
 
#define SUCCESS 1
#define FAIL    0
 
QuadraticEquations::QuadraticEquations( double aa, double bb, double cc,
                                        double xx1, double xx2 )
                                        : a( aa ), b( bb ), c( cc ), x1( xx1 ), x2( xx2 )
{
                                        
}
 
void QuadraticEquations::setValues( double aa, double bb, double cc )
{
    a = aa;
    b = bb;
    c = cc;
}
 
bool QuadraticEquations::solve()
{
    double d = findDiscrim(); 
     
    if( a != 0 && d >= 0 ) {
        x1 = ( -b + ( sqrt( d ) ) ) / ( 2 * a );
        x2 = ( -b - ( sqrt( d ) ) ) / ( 2 * a );
        
        return SUCCESS;
    }
    else if( a == 0 || d < 0 )
        return FAIL;
}
 
double QuadraticEquations::getX1() const
{
    return x1;
}
 
double QuadraticEquations::getX2() const
{
    return x2;
}
 
double QuadraticEquations::findDiscrim()
{
    return ( b * b ) - ( 4 * a * c );
}
C++
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
#include <conio.h>
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
 
#include "QuadraticEquations.h"
 
void askKoefficients( double *, double *, double * );
void showRoots( QuadraticEquations );
 
int main()
{
    double a, b, c;
    askKoefficients( &a, &b, &c );
    
    QuadraticEquations equation( a, b, c );
    
    if( !equation.solve() )
        cout << "No real roots." << endl;
    else
        showRoots( equation );
    
    getch();
    return 0;
}
 
void askKoefficients( double *a, double *b, double *c )
{
    cout << "Enter A, B, C: ";
    cin >> *a >> *b >> *c;
}
 
void showRoots( QuadraticEquations equation )
{
    double x1 = equation.getX1(), 
           x2 = equation.getX2();
           
    if( x1 != x2 )
        cout << "x = " << x1 << " or x = " << x2 << ".";
    else
        cout << "x = " << x1 << ".";
}
Добавлено через 14 часов 58 минут
Проверьте кто-нибудь, пожалуйста.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2011, 12:54
Ответы с готовыми решениями:

Класс Квадратных уравнений
Помогите пожалуйста. Я описал класс для хранения коэффициентов квадратных...

Среди N квадратных уравнений с заданными коэффициентами подсчитать количество уравнений
Среди N квадратных уравнений с заданными коэффициентами подсчитать количество...

Базовый класс Complex и производный класс для реализации квадратных матриц
1) Создайте базовый класс Complex (комплексное число) для реализации...

Решение квадратных уравнений
Нужно написать программу решения набора квадратных уравнений через структуры.

Решение квадратных уравнений
Даны вещественные числа a,b,c,d,e,f.Уравнения ах2 + bх + с = 0 и dx2 + ex + f =...

5
volovzi
268 / 170 / 11
Регистрация: 14.03.2010
Сообщений: 501
26.11.2011, 14:22 #2
В целом всё достаточно грамотно.
Только я бы убрал из параметров конструктора корни уравнения, чтобы пользователю их нельзя было явно установить, и, возможно, стоит решать уравнение автоматически и в конструкторе, и после изменения коэффициентов, чтобы не могло возникнуть ситуации, при которой уравнение с одними коэффициентами имело бы корни от уравнения с другими.
Ну и если уж делаешь препроцессорные определения, то делай их правильно: если определяешь булевские значения, то делай их не единицей и нулём, а истиной и ложью. А вообще, лучше это делать не с помощью препроцессора, а с помощью глобальных констант.

Добавлено через 38 минут
Да, и ещё к числу с плавающей точкой некорректно применять операции равенства и неравенства.
1
vortexx1
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
26.11.2011, 14:24  [ТС] #3
Спасибо большое.
0
volovzi
268 / 170 / 11
Регистрация: 14.03.2010
Сообщений: 501
26.11.2011, 14:29 #4
И ещё, раз уж у тебя класс, а не функция, то можно сделать доступ к коэффициентам уравнения.
1
Van111
211 / 190 / 22
Регистрация: 03.08.2011
Сообщений: 2,648
Записей в блоге: 12
26.11.2011, 14:30 #5
Цитата Сообщение от vortexx1 Посмотреть сообщение
// решает уравнение. возвращает 0 в случае "НЕТ КОРНЕЙ"
// и 1 в случае успешного решения
а почему бы не возвращать структуру которая содержит два поля double(в них хранится ответ)
1
volovzi
268 / 170 / 11
Регистрация: 14.03.2010
Сообщений: 501
26.11.2011, 14:34 #6
Van111, если из функции решения сразу возвращать корни, то придётся ещё как-то возвращать и булевское значение, которое указывает, решается ли уравнение в целых числах, а это неудобно.
1
26.11.2011, 14:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2011, 14:34

Решение квадратных уравнений
Нужно написать программу решения набора квадратных уравнений (ax2 + bx + c=0)....

Решение квадратных уравнений
вот код. #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; int...

Решение квадратных уравнений
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;cmath&gt; using namespace std;...


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

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

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