Código de Dev - C++ - Ecuaciones cúbicas por el Algoritmo de Cardano

Requerimientos

librerias conio.h y math.h de dev c++

Dev C++ 5.0.0.4
estrellaestrellaestrellaestrellaestrella(1)

Publicado el 17 de Abril del 2020gráfica de visualizaciones de la versión: Dev C++ 5.0.0.4
3.395 visualizaciones desde el 17 de Abril del 2020
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*Ecuaciones cubicas según el Algoritmo/Método de Cardano
  Fuente: https://es.wikipedia.org/wiki/Método_de_Cardano */
 
#include<iostream>
#include <conio.h>
#include <math.h>
using namespace std;
 
int main(){
   double A,B,C,D;
   double a1,b1,c1;
   double p,q,dis;
   double x,y,z,pi;
   double ab,ac;
   double u,v,t;
 
   cout<<" Ecuacion cubica de la forma AX^3 + BX^2 + CX + D"<<endl;
   cout<<" Introduzca "<<endl;
   cout<<" A :"; cin>> A;
   cout<<" B :"; cin>> B;
   cout<<" C :"; cin>> C;
   cout<<" D :"; cin>> D;
 
   cout.precision(3); // muestra la cantidad de decimales deseada
   t = 0.0000000009; // tolerancia o margen de error
   pi = 3.141592654; // el numero pi
   a1 = B/A;
   b1 = C/A;
   c1 = D/A;
   p = b1 - (a1*a1)/3; // variable p del metodo
   q = (2*a1*a1*a1)/27 - (a1*b1)/3 + c1; // variable q del metodo
   dis = (q*q) + (4*p*p*p)/27; // discriminante
   cout<< " Ecuacion reducida : Z^3 + "<<p<< " Z + "<<q<<endl;
   cout<< " El discriminante es "<<dis<<endl;
 
 
   if ( dis >= t ) { //discriminante > 0
     ab = 0.5*(-q + sqrt(dis));
     double racub(ab); // raiz cubica 1, calculo de u
     if (ab> 0) {
	racub = exp(log(ab)/3);
     };
     if (ab== 0){
	racub = 0;
     };
     if (ab<0) {
	racub =-exp(log(-ab)/3);
     };
     ac = -0.5*(q + sqrt(dis));
	 double racub2(ac);
    if (ac> 0) {
	racub2 = exp(log(ac)/3); //raiz cubica 2, calculo de v
     };
     if (ac== 0){
	racub2 = 0;
     };
     if (ac<0) {
	racub2 =-exp(log(-ac)/3);
     };
     u = racub; // variable u del metodo de cardano
     v = racub2; // variable v del metodo de cardano
     x = u + v -(a1/3);
     y = (-0.5)*(u+v) -(a1/3);
     z = (0.5)*sqrt(3)*(u-v);
     cout<<" La ecuacion tiene una raiz real y 2 complejas "<<endl;
     cout<<" X1 :"<<x<<endl;
     cout<<" X2 :"<<y<<" + "<<z<<"i"<<endl;
     cout<<" X3 :"<<y<<" - "<<z<<"i"<<endl;
    };
 
 
   if ((dis < t and dis > -t) and (p>=-t and p<=t)){ //discriminante= p = 0
     cout<<" La ecuacion tiene una sola raiz"<<endl;
     cout<<" X :"<<-(a1/3);
	};
 
 
   if ((dis < t and dis > -t) and (p>=t or p<=-t)){ // discriminante = 0
     ab = -0.5*q;
     double racub(ab);
     if (ab> 0) {
	racub = exp(log(ab)/3); // raiz cubica de u, solo se calcula u
     };
     if (ab== 0){
	racub = 0;
     };
     if (ab<0) {
	racub =-exp(log(-ab)/3);
     };
     u = racub;
     x = 2*u -(a1/3);
     y = -u -(a1/3);
     cout<<" La ecuacion tiene raices multiples"<<endl;
     cout<<" X1    :"<<x<<endl;
     cout<<" X2=X3 :"<<y<<endl;
	};
 
 
   if ( dis <= -t ) { // discriminate < 0
    x = (2*sqrt(-p/3))*cos(acos((-q/2)*sqrt(-27/(p*p*p)))/3) -(a1/3);
    y = (2*sqrt(-p/3))*cos(acos((-q/2)*sqrt((-27)/(p*p*p)))/3 +2*pi/3) -(a1/3);
    z = (2*sqrt(-p/3))*cos(acos((-q/2)*sqrt((-27)/(p*p*p)))/3 +4*pi/3) -(a1/3);
     cout<<" La ecuacion tiene 3 raices distintas "<<endl;
     cout<<" X1 :"<<x<<endl;
     cout<<" X2 :"<<y<<endl;
     cout<<" X3 :"<<z<<endl;
    };
 
 
    getch(); // Hace una pausa al programa
  return 0;
} //fin del programa
 
/*Notas
1.cin>> equivale a read en pascal
2.iostream es la libreria principal como system en pascal
3.conio.h esta libreria contiene getch()
4.gethc() equivale a readkey en pascal
5.int main() {} equivale a begin end en pascal
6.double equivale a real en pascal
7.cout.precision se encarga de la precision decimal,
en pascal variable:ancho:decimales
8.en el calculo de una raiz cubica debe considerarse el metodo
si se usa tablas de exponenciales y logaritmos
se debe tener presente que el logaritmo calcula x > 0
En el calculo de la raiz cubica se considera x>0 x=0 x<0
9.En este programa se empleara una tolerancia t
para que discriminantes de valor peqeñisimo se consideren 0
10.cout<< + endl equivale a writeln en pascal
11. la libreria math.h contiene la funcion arcocoseno*/



Comentarios sobre la versión: Dev C++ 5.0.0.4 (1)

17 de Abril del 2020
estrellaestrellaestrellaestrellaestrella
He añadido la funcion raiz cubica a mi codigo

#include<iostream>
#include <conio.h>
#include <math.h>
using namespace std;

double rcu (double E) { //funcion raiz cubica
// calculo por el metodo de tablas exponenciales y logaritmicas
// formula exp(ln(E)/3)
double raiz;
if (E> 0) { // el logaritmo natural puede calculaa E>0
raiz = exp(log(E)/3);
};
if (E== 0){ // el logaritmo natural no puede calcular E=0
raiz = 0;
};
if (E<0) {
raiz =-exp(log(-E)/3); // el logaritmo natural no calcula E < 0
// es necesario poner el signo "-" a E
};
return raiz;
};

int main(){
double A,B,C,D; // variables de la ecuacion principal
double a1,b1,c1;
double p,q,dis; // variables de la ecuacion reducida
double u,v;
double x,y,z; // valores de las raices
double pi,t; // pi y margen de error

cout<<" Ecuacion cubica de la forma AX^3 + BX^2 + CX + D"<<endl;
cout<<" Introduzca "<<endl;
cout<<" A :"; cin>> A;
cout<<" B :"; cin>> B;
cout<<" C :"; cin>> C;
cout<<" D :"; cin>> D;

cout.precision(3); // muestra la cantidad de decimales deseada
t = 0.0000000009; // tolerancia o margen de error
pi = 3.141592654; // el numero pi
a1 = B/A;
b1 = C/A;
c1 = D/A;
p = b1 - (a1*a1)/3; // variable p del metodo
q = (2*a1*a1*a1)/27 - (a1*b1)/3 + c1; // variable q del metodo
dis = (q*q) + (4*p*p*p)/27; // discriminante
cout<< " Ecuacion reducida : Z^3 + "<<p<< " Z + "<<q<<endl;
cout<< " El discriminante es "<<dis<<endl;


if ( dis >= t ) { //discriminante > 0
u = rcu(0.5*(-q + sqrt(dis))); // variable u del metodo de cardano
v = rcu(-0.5*(q + sqrt(dis))); // variable v del metodo de cardano
x = u + v -(a1/3);
y = (-0.5)*(u+v) -(a1/3);
z = (0.5)*sqrt(3)*(u-v);
cout<<" La ecuacion tiene una raiz real y 2 complejas "<<endl;
cout<<" X1 :"<<x<<endl;
cout<<" X2 :"<<y<<" + "<<fabs(z)<<"i"<<endl;
cout<<" X3 :"<<y<<" - "<<fabs(z)<<"i"<<endl;
};


if ((dis < t and dis > -t) and (p>=-t and p<=t)){ //discriminante= p = 0
cout<<" La ecuacion tiene una sola raiz"<<endl;
cout<<" X :"<<-(a1/3);
};


if ((dis < t and dis > -t) and (p>=t or p<=-t)){ // discriminante = 0
u = rcu(-0.5*q); // no es necesario calcular v, ya que u=v
x = 2*u -(a1/3);
y = -u -(a1/3);
cout<<" La ecuacion tiene raices multiples"<<endl;
cout<<" X1 :"<<x<<endl;
cout<<" X2=X3 :"<<y<<endl;
};


if ( dis <= -t ) { // discriminate < 0
x = (2*sqrt(-p/3))*cos(acos((-q/2)*sqrt(-27/(p*p*p)))/3) -(a1/3);
y = (2*sqrt(-p/3))*cos(acos((-q/2)*sqrt((-27)/(p*p*p)))/3 +2*pi/3) -(a1/3);
z = (2*sqrt(-p/3))*cos(acos((-q/2)*sqrt((-27)/(p*p*p)))/3 +4*pi/3) -(a1/3);
cout<<" La ecuacion tiene 3 raices distintas "<<endl;
cout<<" X1 :"<<x<<endl;
cout<<" X2 :"<<y<<endl;
cout<<" X3 :"<<z<<endl;
};


getch(); // Hace una pausa al programa
return 0;
} //fin del programa
Responder

Comentar la versión: Dev C++ 5.0.0.4

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s6135