#1 20.04.10 18:31
[C++] Срочно помогите плиз найти ошибку в коде
Код: с++:
#include <iostream.h>
#include <conio.h>
#include <math.h>
void main()
{
double a,b,c,d,p,q,y1,y2,y3,r,z,D,f,v,u,w,x1,x2,x3;
int k;
clrscr();
cout<<"a="; cin>>a;
cout<<"b="; cin>>b;
cout<<"c="; cin>>c;
cout<<"d="; cin>>d;
p=(1/3)*((3*a*c-b*b)/(3*a*a));
q=0.5*(((2*b*b*b)/(27*a*a*a))-((b*c)/(3*a*a))+d/a);
if (p==0)
{
y1=pow((-2*q),(1/3));
y2=y1;
y3=y1;
k=0;
}
else
{
if (p!=0)
{
if (q>=0)
r=sqrt(fabs(p));
if(q<0)
r=-sqrt(fabs(p));
z=q/pow(r,3);
}
if (p<0)
{
D=q*q+p*p*p;
if (D<=0)
{
f=acos(z);
y1=-2*r*cos(f/3);
y2=2*r*cos(M_PI/3-f/3);
y3=2*r*cos(M_PI/3+f/3);
k=0;
}
else
{
f=log(z+sqrt(z*z-1));
y1=-2*r*cosh(f/3);
u=r*cosh(f/3);
v=sqrt(3)*r*sinh(f/3);
k=1;
}
}
else
{
f=log(z+sqrt(z*z+1));
y1=-2*r*sinh(f/3);
u=r*sinh(f/3);
v=sqrt(3)*r*cosh(f/3);
k=1;
}
}
w=b/(3*a);
x1=y1-w;
if (k==0)
{
x2=y2-w;
x3=y3-w;
}
else
{
x2=u-w;
x3=v;
}
cout<<"x1="<<x1<<endl;
cout<<"x2="<<x2<<endl;
cout<<"x3="<<x3<<endl;
cout<<"k="<<k<<endl;
getch();
}
кароче при значении
a=2
b=3
c=1.5
d=-15.75
надо что бы x1=x2=x3 = 1.5 а у меня 0.5! Парни помогите плиз, а то бощка пухнет уже от этих уравнений и ветвлений!
Offline
#4 20.04.10 19:59
Re: [C++] Срочно помогите плиз найти ошибку в коде
double pow(x,y);
double x; возводимое число
double y; степень числа x
Если x отрицательное, а y не является целой, функция печатает сообщение об
ошибке DOMAIN в stderr, устанавливает errno в ERANGE и возвращает
либо положительное, либо отрицательное значение HUGE
Offline
#9 20.04.10 22:54
Re: [C++] Срочно помогите плиз найти ошибку в коде
Код: cpp:
double a,b,c,d,p,q,y1,y2,y3,r,z,D,f,v,u,w,x1,x2,x3; int k; cout<<"a="; cin>>a; cout<<"b="; cin>>b; cout<<"c="; cin>>c; cout<<"d="; cin>>d; p=(1./3.)*((3.*a*c-b*b)/(3.*a*a)); q=0.5*(((2.*b*b*b)/(27.*a*a*a))-((b*c)/(3.*a*a))+d/a); if (p==0) { y1=pow((-2.*q),(1./3.)); y2=y1; y3=y1; k=0; } else { if (p!=0) { if (q>=0) r=sqrt(fabs(p)); if(q<0) r=-sqrt(fabs(p)); z=q/pow(r,3.); } if (p<0) { D=q*q+p*p*p; if (D<=0) { f=acos(z); y1=-2.*r*cos(f/3.); y2=2.*r*cos(M_PI/3.-f/3.); y3=2.*r*cos(M_PI/3.+f/3.); k=0; } else { f=log(z+sqrt(z*z-1.)); y1=-2.*r*cosh(f/3.); u=r*cosh(f/3.); v=sqrt(3.)*r*sinh(f/3.); k=1; } } else { f=log(z+sqrt(z*z+1.)); y1=-2*r*sinh(f/3.); u=r*sinh(f/3.); v=sqrt(3.)*r*cosh(f/3.); k=1; } } w=b/(3.*a); x1=y1-w; if (k==0) { x2=y2-w; x3=y3-w; } else { x2=u-w; x3=v; } cout<<"x1="<<x1<<endl; cout<<"x2="<<x2<<endl; cout<<"x3="<<x3<<endl; cout<<"k="<<k<<endl;
p.s. Все константы, которые используются в твоих вычислениях должны быть типа double (с плавающей точкой),
иначе произойдёт неявное приведение к int и ты потеряешь дробную часть.
Исправлено $up (20.04.10 23:10)
Offline

