Formula di Cardano per equazione cubica

di il
21 risposte

Formula di Cardano per equazione cubica

Salve, ho scritto questo programma in C per risolvere le equazioni cubiche. Non mi da nessun errore di compilazione e non riesco a capire dove ho sbagliato. Potete aiutarmi? Grazie.

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define PI 3.141596
//Programma per la risoluzione di equazione cubica con formula di Cardano/*



float  main()
{
float a,b,c,d,x1,x2,x3,p,q,a_sq,a_cub,b_sq,b_cub,q_sq,p_cub,delta,k,u,v,r;
printf("L'equazione è nella forma ax^3+ bx^2+ cx+ d = 0\n" );
printf("inserisci a:");
scanf("%f",&a);
printf("inserisci b:");
scanf("%f",&b);
printf("inserisci c:");
scanf("%f",&c);
printf("inserisci d:");
scanf("%f",&d);
//calcolo p e q
a_sq = pow(a,2);
a_cub = pow(b,2);
b_sq = pow(a,2);
b_cub = pow(b,2);

//calcolo delta
p = c/a-(b_sq)/(3*a_sq);
q = d/a-(b*c)/(3*a_sq) +(2*b_cub)/(27*a_cub);
q_sq = pow(q,2);
p_cub = pow(p,3);
delta = (q_sq/4 +p_cub/27);
k= sqrt(delta);
r= (-q/2);
u = pow((r+k),1/3);
v = pow((r-k),1/3);
/*****************/
if(delta > 0) //L'equazione ha una soluzione reale
{
x1 = u + v;
printf("\nx1 = %f",x1);

}

else if(delta = 0) //L'equazioni ha tre soluzioni reali
{
float w = pow((q/2),1/3);
x1 = -2*w;
x2 = w;
x3 = w;
printf("\nx1 = %f\nx2 = %f\nx3 = %f",x1,x2,x3);
}
else if(delta < 0) //L'equazioni ha tre soluzioni reali
{
float t = sqrt(-delta);
float theta = atan(t/(-q/2));
float h = 2*sqrt(-p/3);
x1 = h*cos(theta/3);
x2 = h*cos((theta+2*PI)/3);
x3 = h*cos((theta+4*PI)/3);
printf("\nx1 = %f\nx2 = %f\nx3= %f\n",x1,x2,x3);
}

}


21 Risposte

  • Re: Formula di Cardano per equazione cubica

    La variabile a_cub intendi che deve valere a al cubo? E perché scrivi

    a_cub = pow(b,2);

    ?
  • Re: Formula di Cardano per equazione cubica

    Si, è a^3.Mi era sfuggito
  • Re: Formula di Cardano per equazione cubica

    Allora controlla tutte queste

    a_sq = pow(a,2);
    a_cub = pow(b,2);
    b_sq = pow(a,2);
    b_cub = pow(b,2);
  • Re: Formula di Cardano per equazione cubica

    Ho controllato e corretto tutte le formule, ma non è cambiato nulla.
  • Re: Formula di Cardano per equazione cubica

    Ovvero ?

    Adesso il codice corretto che usi qual è?

    Quali formule hai usato ?

    Cosa inserisci in input e che output hai o dovresti avere ?

    Comunque, devi correggere le pow dove c'è 1/3 con (float)1.0/3
  • Re: Formula di Cardano per equazione cubica

    Il codice è
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #define PI 3.141596
    //Programma per la risoluzione di equazione cubica con formula di Cardano/*
    
    
    
    float  main()
    {
    float a,b,c,d,x1,x2,x3,p,q,a_sq,a_cub,b_sq,b_cub,q_sq,p_cub,delta,k,u,v,r;
    printf("L'equazione è nella forma ax^3+ bx^2+ cx+ d = 0\n" );
    printf("inserisci a:");
    scanf("%f",&a);
    printf("inserisci b:");
    scanf("%f",&b);
    printf("inserisci c:");
    scanf("%f",&c);
    printf("inserisci d:");
    scanf("%f",&d);
    //calcolo p e q
    a_sq = pow(a,2);
    a_cub = pow(a,3);
    b_sq = pow(b,2);
    b_cub = pow(b,3);
    
    //calcolo delta
    p = c/a-(b_sq)/(3*a_sq);
    q = d/a-(b*c)/(3*a_sq) +(2*b_cub)/(27*a_cub);
    q_sq = pow(q,2);
    p_cub = pow(p,3);
    delta = (q_sq/4 +p_cub/27);
    k= sqrt(delta);
    r= (-q/2);
    u = pow((r+k),1/3);
    v = pow((r-k),1/3);
    /*****************/
    if(delta > 0) //L'equazione ha una soluzione reale
    {
    x1 = u + v;
    printf("\nx1 = %f",x1);
    
    }
    
    else if(delta = 0) //L'equazioni ha tre soluzioni reali
    {
    float w = pow((q/2),1/3);
    x1 = -2*w;
    x2 = w;
    x3 = w;
    printf("\nx1 = %f\nx2 = %f\nx3 = %f",x1,x2,x3);
    }
    else if(delta < 0) //L'equazioni ha tre soluzioni reali
    {
    float t = sqrt(-delta);
    float theta = atan(t/(-q/2));
    float h = 2*sqrt(-p/3);
    x1 = h*cos(theta/3);
    x2 = h*cos((theta+2*PI)/3);
    x3 = h*cos((theta+4*PI)/3);
    printf("\nx1 = %f\nx2 = %f\nx3= %f\n",x1,x2,x3);
    }
    
    }
    
    
    
    

    In pratica il programma si avvia, mi chiede di inserire i parametri ma non mi stampa nulla o mi stampa la scitta:
    
    x1 = 0.0000
    
    Per le formule: https://it.wikipedia.org/wiki/Equazione_di_terzo_grado
  • Re: Formula di Cardano per equazione cubica

    Meno male che ho scritto in grassetto le correzioni che dovevi apportare... le hai lette?
  • Re: Formula di Cardano per equazione cubica

    Intendi così?
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #define PI 3.141596
    //Programma per la risoluzione di equazione cubica con formula di Cardano/*
    
    
    
    float  main()
    {
    float a,b,c,d,x1,x2,x3,p,q,a_sq,a_cub,b_sq,b_cub,q_sq,p_cub,delta,k,u,v,r;
    printf("L'equazione è nella forma ax^3+ bx^2+ cx+ d = 0\n" );
    printf("inserisci a:");
    scanf("%f",&a);
    printf("inserisci b:");
    scanf("%f",&b);
    printf("inserisci c:");
    scanf("%f",&c);
    printf("inserisci d:");
    scanf("%f",&d);
    //calcolo p e q
    a_sq = pow(a,2);
    a_cub = pow(a,3);
    b_sq = pow(b,2);
    b_cub = pow(b,3);
    
    //calcolo delta
    p = c/a-(b_sq)/(3*a_sq);
    q = d/a-(b*c)/(3*a_sq) +(2*b_cub)/(27*a_cub);
    q_sq = pow(q,2);
    p_cub = pow(p,3);
    delta = (q_sq/4 +p_cub/27);
    k= sqrt(delta);
    r= (-q/2);
    u = pow((r+k),(1.0/3.0 ));
    v = pow((r-k),(1.0/3.0 ));
    /*****************/
    if(delta > 0) //L'equazione ha una soluzione reale
    {
    x1 = u + v;
    printf("\nx1 = %f",x1);
    
    }
    
    else if(delta = 0) //L'equazioni ha tre soluzioni reali
    {
    float w = pow((q/2),(1.0/3 ));
    x1 = -2*w;
    x2 = w;
    x3 = w;
    printf("\nx1 = %f\nx2 = %f\nx3 = %f",x1,x2,x3);
    }
    else if(delta < 0) //L'equazioni ha tre soluzioni reali
    {
    float t = sqrt(-delta);
    float theta = atan(t/(-q/2));
    float h = 2*sqrt(-p/3);
    x1 = h*cos(theta/3);
    x2 = h*cos((theta+2*PI)/3);
    x3 = h*cos((theta+4*PI)/3);
    printf("\nx1 = %f\nx2 = %f\nx3= %f\n",x1,x2,x3);
    }
    
    }
    
    
  • Re: Formula di Cardano per equazione cubica

    Non hai letto ... Avevo scritto

    dove c'è 1/3 con (float)1.0/3
  • Re: Formula di Cardano per equazione cubica

    
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #define PI 3.141596
    //Programma per la risoluzione di equazione cubica con formula di Cardano/*
    
    
    
    float  main()
    {
    float a,b,c,d,x1,x2,x3,p,q,a_sq,a_cub,b_sq,b_cub,q_sq,p_cub,delta,k,u,v,r;
    printf("L'equazione è nella forma ax^3+ bx^2+ cx+ d = 0\n" );
    printf("inserisci a:");
    scanf("%f",&a);
    printf("inserisci b:");
    scanf("%f",&b);
    printf("inserisci c:");
    scanf("%f",&c);
    printf("inserisci d:");
    scanf("%f",&d);
    //calcolo p e q
    a_sq = pow(a,2);
    a_cub = pow(a,3);
    b_sq = pow(b,2);
    b_cub = pow(b,3);
    
    //calcolo delta
    p = c/a-(b_sq)/(3*a_sq);
    q = d/a-(b*c)/(3*a_sq) +(2*b_cub)/(27*a_cub);
    q_sq = pow(q,2);
    p_cub = pow(p,3);
    delta = (q_sq/4 +p_cub/27);
    k= sqrt(delta);
    r= (-q/2);
    u = pow((r+k),(float)1.0/3);
    v = pow((r-k),(float)1.0/3);
    /*****************/
    if(delta > 0) //L'equazione ha una soluzione reale
    {
    x1 = u + v;
    printf("\nx1 = %f",x1);
    
    }
    
    else if(delta = 0) //L'equazioni ha tre soluzioni reali
    {
    float w = pow((q/2),(float)1.0/3);
    x1 = -2*w;
    x2 = w;
    x3 = w;
    printf("\nx1 = %f\nx2 = %f\nx3 = %f",x1,x2,x3);
    }
    else if(delta < 0) //L'equazioni ha tre soluzioni reali
    {
    float t = sqrt(-delta);
    float theta = atan(t/(-q/2));
    float h = 2*sqrt(-p/3);
    x1 = h*cos(theta/3);
    x2 = h*cos((theta+2*PI)/3);
    x3 = h*cos((theta+4*PI)/3);
    printf("\nx1 = %f\nx2 = %f\nx3= %f\n",x1,x2,x3);
    }
    
    }
    
  • Re: Formula di Cardano per equazione cubica

    E quindi ? Hai provato il codice o no?
  • Re: Formula di Cardano per equazione cubica

    L'ho provato, e non mi stampa i risultati nel caso delta<=0
  • Re: Formula di Cardano per equazione cubica

    Con quali valori di a b c d ?
  • Re: Formula di Cardano per equazione cubica

    Fai attenzione .... questa

    if(delta = 0)

    si scrive così

    if(delta == 0)

    altrimenti delta viene azzerato e non funziona nulla ....
Devi accedere o registrarti per scrivere nel forum
21 risposte