Генератор цветов Уроки C++ Уроки Windows forms Учебники по программированию Уроки HTML Уроки CSS Готовые задания Исходники Полезные программы
регистрация доменов

Дешёвые домены


Уроки C++


Решение кубического уравнения в С++

Ну что ж, теперь напишем решение кубического уравнения с комплексными корнями. В другом разделе сайта – уроки MVS, данный и предыдущий примеры рассматриваются в среде .Net (Windows Forms). В коде вы увидите простейшие функции перевода из одного типа данных в другой и вычисление арккосинуса. В дальнейших уроках мы более подробно рассмотрим функции. А пока создайте приложение Win32 и напишите следующий код:



#include "stdafx.h"
#include "tchar.h"
#include "conio.h"
#include "math.h"
#include "iomanip"
#include "clocale"
#include "iostream"
using namespace std;

int sign(long double);   // преобразование из int в long double
double acos(double arg);   // ф-ия вычисления acos

int main()
{
setlocale(LC_ALL, "Russian");
long double Q, R, A, B, x1, x2, x3, t, d, h, g, f, a, b, c, m, k, k1;
cout << "Введите коэфициенты" << endl;
cout << "a: ";
cin >> d;
cout << "b: ";
cin >> h;
cout << "c: ";
cin >> g;
cout << "d: ";
cin >> f;
a=h/d; b=g/d; c=f/d;
const float pi = 3.14;
cout< Q=(pow(a, 2)-3*b)/9;
R=(2*pow(a, 3)-9*a*b+27*c)/54;
if(pow(R, 2) {
t=acos(R/sqrt(pow(Q,3)))/3;
x1=-2*sqrt(Q)*cos(t)-a/3;
x2=-2*sqrt(Q)*cos(t+(2*pi/3))-a/3;
x3=-2*sqrt(Q)*cos(t-(2*pi/3))-a/3;
cout<<"x1="< }
else
{
A=-sign(R)*pow((long double)(fabs(R)+sqrt(pow(R, 2)-pow(Q, 3))), (long double)1/3);
B = sign(A) == 0 ? 0 : Q/A;
x1=(A+B)-a/3;
m=-(A+B)/2-a/3;
k=pow(3,0.5)*(A-B)/2;
if (k<0)
{
k1=-1*k;
cout <<"x1="< }
else
{
cout <<"x1="< }
}
getch();
return 0;
}

int sign(long double ld)
{
if(fabs(ld)<0.00000000001) return 0;
return (ld>0)?1:-1;
}


Результат:



Следующий урок >>