Eai Pessoal. Na faculdade eu estudo cálculo I e II... O que é uma bosta...
E estamos em uma matéria meia chata, equação do 3º grau. Para facilitar minha vida fiz um algoritmo baseado nas fórmulas de Cardano e Tartaglia. Estou disponibilizando em duas linguagens C e JavaScript
=====================
================
Se tiverem sugestões, criticas, ou erro no código, podem falar.
__________________
Se fui útil não custa nada agradecer
E estamos em uma matéria meia chata, equação do 3º grau. Para facilitar minha vida fiz um algoritmo baseado nas fórmulas de Cardano e Tartaglia. Estou disponibilizando em duas linguagens C e JavaScript
Código PHP:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void eq_3grau()
{
system("cls");
float a,b,c,d;
float r,q,s,discrim,dum1 ,term1, r13, t;
float x1,x2,x3;
float x11=0, x22=0,x33=0;
do{
printf("Digite o valor de a: "); scanf("%f",&a);
if(a==0)
printf("O coeficiente do cubo não pode ser 0.\n\n");
}while(a==0);
printf("Digite o valor de b: "); scanf("%f",&b);
printf("Digite o valor de c: "); scanf("%f",&c);
do{
printf("Digite o valor de d: "); scanf("%f",&d);
if(d==0)
printf("\n\nBem, uma raiz eh 0. Divida a equacao polinomial por x e você tem uma equacao do segundo grau. Aqui nada mais ha a ser feito.\n\n");
}while(d==0);
b /= a;
c /= a;
d /= a;
q = (3*c - (b*b))/9;
r = -(27*d) + b*(9*c - 2*(b*b));
r /= 54;
discrim = q*q*q + r*r;
printf("\n\ndiscri = %.20f\n\n", discrim);
x1 = 0; //A primeira raiz é sempre real.
term1 = (b/3.0);
if (discrim > 0) // uma real, duas imaginarias
{
printf("\n\nO discriminante eh maior que zero");
s = r + sqrt(discrim);
s = (s < 0) ? -cbrt(-s) : cbrt(s);
t = r - sqrt(discrim);
t = (t < 0) ? -cbrt(-t) : cbrt(t);
x1= -term1 + s + t;
term1 += (s + t)/2.0;
x33 = x22 = -term1; //parte real
term1 = sqrt(3.0)*(-t + s)/2;
x2 = term1;
x3 = -term1;
printf("\n\nx1 = %.8f\n", x1);
printf("x2 = %.8f + %.8f*i\n", x22,x2);
printf("x3 = %.8f + %.8f*i\n", x33, x3);
}
if (discrim == 0) // Todas as raizes sao reais.
{
printf("\n\nO discriminante eh igual a zero");
r13 = (r < 0) ? -cbrt(-r) : cbrt(r);
x1 = -term1 + 2.0*r13;
x3 = x2 = -(r13 + term1);
printf("\n\nx1 = %.8f\n", x1);
printf("x2 = %.8f\n", x2);
printf("x3 = %.8f\n", x3);
}
if(discrim < 0) //Opcao deixada para onde todas as raizes sao reais e distintas (q < 0)
{
printf("\n\nO discriminante eh menor que zero");
q = -q;
dum1 = q*q*q;
dum1 = acos(r/sqrt(dum1));
r13 = 2.0*sqrt(q);
x1 = -term1 + r13*cos(dum1/3.0);
x2 = -term1 + r13*cos((dum1 + 2.0*M_PI)/3.0);
x3 = -term1 + r13*cos((dum1 + 4.0*M_PI)/3.0);
printf("\n\nx1 = %.8f\n", x1);
printf("x2 = %.8f\n", x2);
printf("x3 = %.8f\n", x3);
}
}
int main ()
{
do{
system("cls");
eq_3grau();
printf("\n\n\nQuer continuar? (s/n) ");
}while (toupper(getch()) != 'N');
// by Bruh
}
Código PHP:
<!--Define JavaScript functions.-->
function Resolve(dataForm){
var a = parseFloat(dataForm.aIn.value);
var b = parseFloat(dataForm.bIn.value);
var c = parseFloat(dataForm.cIn.value);
var d = parseFloat(dataForm.dIn.value);
if (a == 0){
alert("O coeficiente do cubo não pode ser 0.");
return;
} //End if a == 0
if (d == 0){
alert("Bem, uma raiz eh 0. Divida a equacao polinomial por x e você tem uma equacao do segundo grau. Aqui nada mais ha a ser feito.");
return;
} //End if d == 0
b /= a;
c /= a;
d /= a;
var discrim, q, r, dum1, s, t, term1, r13;
q = (3.0*c - (b*b))/9.0;
r = -(27.0*d) + b*(9.0*c - 2.0*(b*b));
r /= 54.0;
discrim = q*q*q + r*r;
dataForm.x1Im.value = 0; //A primeira raiz é sempre real.
term1 = (b/3.0);
if (discrim > 0) { // uma real, duas imaginarias
s = r + Math.sqrt(discrim);
s = ((s < 0) ? -Math.pow(-s, (1.0/3.0)) : Math.pow(s, (1.0/3.0)));
t = r - Math.sqrt(discrim);
t = ((t < 0) ? -Math.pow(-t, (1.0/3.0)) : Math.pow(t, (1.0/3.0)));
dataForm.x1Re.value = -term1 + s + t;
term1 += (s + t)/2.0;
dataForm.x3Re.value = dataForm.x2Re.value = -term1;
term1 = Math.sqrt(3.0)*(-t + s)/2;
dataForm.x2Im.value = term1;
dataForm.x3Im.value = -term1;
return;
} // End if (discrim > 0)
dataForm.x3Im.value = dataForm.x2Im.value = 0;
if (discrim == 0){ // Todas as raizes sao reais.
r13 = ((r < 0) ? -Math.pow(-r,(1.0/3.0)) : Math.pow(r,(1.0/3.0)));
dataForm.x1Re.value = -term1 + 2.0*r13;
dataForm.x3Re.value = dataForm.x2Re.value = -(r13 + term1);
return;
} // End if (discrim == 0)
// Opcao deixada para onde todas as raizes sao reais e distintas (q < 0)
q = -q;
dum1 = q*q*q;
dum1 = Math.acos(r/Math.sqrt(dum1));
r13 = 2.0*Math.sqrt(q);
dataForm.x1Re.value = -term1 + r13*Math.cos(dum1/3.0);
dataForm.x2Re.value = -term1 + r13*Math.cos((dum1 + 2.0*Math.PI)/3.0);
dataForm.x3Re.value = -term1 + r13*Math.cos((dum1 + 4.0*Math.PI)/3.0);
return;
} //FIM do Resolve
// by Bruh
// end of JavaScript-->
================
Se tiverem sugestões, criticas, ou erro no código, podem falar.
__________________
Se fui útil não custa nada agradecer