Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
1

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

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

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

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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.11.2011, 12:54
Ответы с готовыми решениями:

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

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

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

Решение квадратных уравнений
Имеется программа, которая должна решать квадратные уравнения: #include &lt;iostream&gt; #include...

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

Добавлено через 38 минут
Да, и ещё к числу с плавающей точкой некорректно применять операции равенства и неравенства.
1
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
26.11.2011, 14:24  [ТС] 3
Спасибо большое.
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
26.11.2011, 14:29 4
И ещё, раз уж у тебя класс, а не функция, то можно сделать доступ к коэффициентам уравнения.
1
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
26.11.2011, 14:30 5
Цитата Сообщение от vortexx1 Посмотреть сообщение
// решает уравнение. возвращает 0 в случае "НЕТ КОРНЕЙ"
// и 1 в случае успешного решения
а почему бы не возвращать структуру которая содержит два поля double(в них хранится ответ)
1
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
26.11.2011, 14:34 6
Van111, если из функции решения сразу возвращать корни, то придётся ещё как-то возвращать и булевское значение, которое указывает, решается ли уравнение в целых числах, а это неудобно.
1
26.11.2011, 14:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.11.2011, 14:34
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru