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

Кубическое уравнение (методом Кардано) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.74
pooharilo
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 4
09.04.2013, 02:18     Кубическое уравнение (методом Кардано) #1
Добрый вечер, помогите пожалуйста, требуется написать код для решения кубического уравнения ax3+bx2+cx+d=0, обязательно методом Кардано.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
09.04.2013, 08:46     Кубическое уравнение (методом Кардано) #2
1. Не вижу куба.
2. Уравнение одно, неизвестных 3.
pooharilo
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 4
09.04.2013, 15:43  [ТС]     Кубическое уравнение (методом Кардано) #3
Упс, Малость написал неправильно: ax^3 + bx^2 + cx + d = 0
eocron
Кактус
 Аватар для eocron
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
09.04.2013, 18:23     Кубическое уравнение (методом Кардано) #4
Класс complex изучали? В том смысле что вам необходимы вещественные корни или вместе с комплексными?
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
09.04.2013, 18:35     Кубическое уравнение (методом Кардано) #5
pooharilo, задача весьма не проста. Одно, только, квадратное уравнение вырождается в 200 строк на с++.
pooharilo
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 4
09.04.2013, 19:02  [ТС]     Кубическое уравнение (методом Кардано) #6
Цитата Сообщение от eocron Посмотреть сообщение
Класс complex изучали? В том смысле что вам необходимы вещественные корни или вместе с комплексными?
Препод сказал, что если разберешься с ним сделай, я не могу его понять( Мне необходимы вещественные вместе с комплексными корнями.
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
09.04.2013, 19:03     Кубическое уравнение (методом Кардано) #7
pooharilo,
На самом деле всё без всяких классов <complex> решается. Структуру или класс для комплексных чисел не сложно написать самому, если она вообще понадобится.
pooharilo
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 4
10.04.2013, 00:49  [ТС]     Кубическое уравнение (методом Кардано) #8
Ternsip, Мне не особо понятно как поступить с комплексными корнями!

Добавлено через 5 часов 26 минут
Народ, помогите пожалуйста очень прошу!
palva
 Аватар для palva
2373 / 1595 / 190
Регистрация: 08.06.2007
Сообщений: 6,364
Записей в блоге: 4
10.04.2013, 01:31     Кубическое уравнение (методом Кардано) #9
А что тут помогать? Алгоритм и формулы описаны. Начинайте писать и выкладывайте код с вопросами.
Не хотите писать - найдите готовую реализацию. Можно на другом языке, потом переведите на си.
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
10.04.2013, 12:13     Кубическое уравнение (методом Кардано) #10
pooharilo, Опишите мне алгоритм нахождения корней методом Кардано (на русском языке) и я постараюсь написать код. Мне было бы полезно уметь правильно решать кубическое уравнение таким способом программно.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
10.04.2013, 12:35     Кубическое уравнение (методом Кардано) #11
http://ru.wikipedia.org/wiki/%D4%EE%...F0%E4%E0%ED%EE

Добавлено через 1 минуту
Только чтоб с русского на плюсы переводить, надо хоть как то уметь программировать.
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
10.04.2013, 23:14     Кубическое уравнение (методом Кардано) #12
taras atavin,

Добавлено через 16 минут
pooharilo, http://atheist4.narod.ru/mw/kardano.htm сейчас попробуем))

Добавлено через 57 минут

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <limits>
#include <queue>
#include <string>
#include <set>
#include <stack>
#include <tuple>
 
using namespace std;
 
//Cube root
double croot(double x){
    if (x < 0)
        return -pow(-x, 1.0/3.0);
    return pow(x, 1.0/3.0);
}
 
int main(){         
    freopen("input.txt", "rt", stdin);
    freopen("output.txt", "wt", stdout);
    //Ax + By + Cz + D = 0; (A != 0)
    const double M_PI = 3.141592653589793238462;
    //-----
    double A, B, C, D;
    cin >> A >> B >> C >> D;
    if (A == 0){
        cout << "X is any";
        return 0;
    }
    //-----
    double p = (3.0*A*C-B*B)/(3.0*A*A);
    double q = (2.0*B*B*B-9.0*A*B*C+27.0*A*A*D)/(27.0*A*A*A);
    double S = (q*q/4.0) + (p*p*p/27.0);
    //-----
    double F;
    if (q == 0)
        F = M_PI/2.0;
    if (q < 0)
        F = atan(-2.0*sqrt(-S)/q);
    if (q > 0)
        F = atan(-2.0*sqrt(-S)/q) + M_PI;
    //-----
    pair<double, double> x[3];
    for (int i = 0; i < 3; i++)
        x[i].first = x[i].second = 0;
    if (S < 0){
        x[0].first = 2.0*sqrt(-p/3.0)*cos(F/3.0)-B/(3.0*A);
        x[1].first = 2.0*sqrt(-p/3.0)*cos((F/3.0)+2.0*M_PI/3.0)-B/(3.0*A);
        x[2].first = 2.0*sqrt(-p/3.0)*cos((F/3.0)+4.0*M_PI/3.0)-B/(3.0*A);
    }
    if (S == 0){
        x[0].first = 2.0*croot(-q/2.0)-B/(3.0*A);
        x[1].first = -croot(-q/2.0)-B/(3.0*A);
        x[2].first = -croot(-q/2.0)-B/(3.0*A);
    }
    if (S > 0){
        double temp1 = croot((-q/2.0)+sqrt(S)) + croot((-q/2.0)-sqrt(S));
        double temp2 = croot((-q/2.0)+sqrt(S)) - croot((-q/2.0)-sqrt(S));
        x[0].first = temp1 - B/(3.0*A);
        x[1].first = -temp1/2.0 - B/(3.0*A); x[1].second = sqrt(3)*temp2/2.0;
        x[2].first = -temp1/2.0 - B/(3.0*A); x[2].second = -sqrt(3)*temp2/2.0;
    }
    //-----
    printf("x1 = %.15lf + i * %.15lf\n", x[0].first, x[0].second);
    printf("x2 = %.15lf + i * %.15lf\n", x[1].first, x[1].second);
    printf("x3 = %.15lf + i * %.15lf\n", x[2].first, x[2].second);
    return 0;
}
Добавлено через 1 минуту
C++
1
2
freopen("input.txt", "rt", stdin);
freopen("output.txt", "wt", stdout);
и некоторые модули (inlcude) можно убрать

Добавлено через 9 часов 17 минут
мне интересно, я вам помог ?
nixxel
0 / 0 / 0
Регистрация: 15.07.2013
Сообщений: 13
18.11.2014, 16:54     Кубическое уравнение (методом Кардано) #13
Здравствуйте.
А можно как-то без
C++
1
pair<double, double> x[3];
А то у меня такая же задача, а на Code Blocks почему-то не хочет работать, хоть и прописываю нужную библиотеку.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2014, 16:59     Кубическое уравнение (методом Кардано)
Еще ссылки по теме:

Программа решающая кубическое уравнение C++
C++ Шифрование методом решетки Кардано
Уравнение итерационным методом C++

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

Или воспользуйтесь поиском по форуму:
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
18.11.2014, 16:59     Кубическое уравнение (методом Кардано) #14
nixxel, нужная библиотека это utility
Yandex
Объявления
18.11.2014, 16:59     Кубическое уравнение (методом Кардано)
Ответ Создать тему
Опции темы

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