Quantcast
Channel: Tópicos
Viewing all articles
Browse latest Browse all 11336

Resolução da equação do 3º grau

$
0
0
Olá, boa tarde Para a determinação das 3 raízes reais de uma equação do 3º grau, caso a condição se verifique, tenho sempre erro em C++, ao contrário do BASIC que me dá resultado certos. O método usado foi o chamado método trigonométrico, para o caso de 3 raízes reais. Código em BASIC 'Cálculo do valor das raízes de uma eq do 3º grau const pi=3.141593 dim as single yy,p,pp,q,cc,tt,teta,x1,x2,x3,z1,z2,r1,i1,a,b,c,d,aa,bb print "entrada dos coeficientes:" input a:input b:input c:input d If a=0 Then Print Print "O coeficiente 'a' TEM QUE SER DIFERENTE DE 0" Print Print "carregue numa tecla para finalizar" Sleep End EndIf yy=b/(3*a) p=(c/(3*a))-(b^2/(9*(a^2))) q=((2*b^3)/(27*a^3)-(b*c/(3*(a^2))))+(d/a) cc=q^2+(4*(p)^3) if cc<0 then tt=q/(2*sqr((-p)^3)) teta=(1/3)*(pi/2-atn(tt/(sqr(-tt*tt+1)))) pp=-2*sqr(-p) x1=pp*cos(teta)-yy x2=pp*cos(teta+(120/180*pi))-yy x3=pp*cos(teta+(240/180*pi))-yy print print "3 raizes reais" print print "x1= ";x1 print "x2= ";x2 print "x3= ";x3 print print "f(x1)= ";a*x1^3+(b*x1^2)+(c*x1)+d print "f(x2)= ";a*x2^3+(b*x2^2)+(c*x2)+d print "f(x3)= ";a*x3^3+(b*x3^2)+(c*x3)+d Código em C++ int tergrau() { float p,q,cc,a,b,c,d,tt,teta,pp,x1,x2,x3,yy; cout<<"Resolução da equação do 3º grau"; cout<<endl; cout<<"Faca entrar os coeficientes:"<<endl; cin>>a;cin>>b;cin>>c;cin>>d;cout<<endl; yy=b/(3*a);cout<<"yy= "<<yy<<endl; p=(c/(3*a))-(pow(b,2)/(9*(pow(a,2)))); cout<<"p= "<<p; q=((2*(pow(b,3)/(27*pow(a,3)))-(b*c/(3*pow(a,2))))+(d/a)); cout<<"q= "<<q<<endl; cc=pow(q,2)+(4*pow(p,3)); cout<<"cc= "<<cc<<endl; if (cc<0){ tt=q/(2*sqrt(pow(-p,3))); cout<<"tt= "<<tt<<endl; teta=(1/3)*(pi/2-atan(tt/(sqrt(-tt*tt+1)))); cout<<"teta= "<<teta<<endl;cout<<"pi= "<<pi<<endl; pp=-2*sqrt(-p); cout<<"pp= "<<pp<<endl; x1=pp*cos(teta)-yy; x2=pp*cos(teta+(120/180*pi))-yy; x3=pp*cos(teta+(240/180*pi))-yy; cout<<endl; cout<<"3 raizes reais"<<endl<<endl; cout<<"x1= "<<x1<<endl; cout<<"x2= "<<x2<<endl; cout<<"x3= "<<x3<<endl<<endl; cout<<"f(x1)= "<<a*pow(x1,3)+(b*pow(x1,2))+(c*x1)+d<<endl; cout<<"f(x2)= "<<a*pow(x2,3)+(b*pow(x2,2))+(c*x2)+d<<endl; cout<<"f(x3)= "<<a*pow(x3,3)+(b*pow(x1,3))+(c*x3)+d<<endl; } return 0; } No caso do código c++, inseri somente a rotina de cálculo de equaçõas do 3º grau ( o programa tem, ainda, outras rotinas que calculam as equações do 1º grau e do 2º grau) Pois, estranhamente, não obtenho os valores correctos com o programa c++, ao contrário do BASIC. Aparentemente, a maior diferença é no cálculo da variável teta. Problemas de cálculos trigonométricos por parte do compilador (GNU)? Ou problemas na construção das expressões em c++? (Acrescentei impressões auxiliares para tentar resolver o problema - debug) Obrigado pela atenção.

Viewing all articles
Browse latest Browse all 11336

Trending Articles