C/Visual C - problema al estructurar el codigo de la ecuacion g

   
Vista:

problema al estructurar el codigo de la ecuacion g

Publicado por Julio Cesar (2 intervenciones) el 13/10/2008 23:28:25
Buenas tardes, este es mi primer post que hago en el foro y pues espero que este cumpliendo las normas de este, entrando al problema, pues quisiera que me ayudaran a estructurar mi código en la escuela estamos viendo sobre el uso del if-else y pues nos dejaron una actividad de realizar la formula general para resolver ecuaciones cuadráticas, el detalle que ya lo estructure según mis conocimientos pero al darle inicio he ingresar los valores me marca "error en la raíz" y no lo puedo resolver, si elimino la parte donde menciono que si es mayor o igual a cero, si me corre el programa y me realiza la raíz,e l detalle que el profesor no quiere que omitamos esa parte y he ahí donde no se si esta mal colocado la función o debería de ir en otro lugar, espero su apoyo mis conocimiento son muy pobres y llevo rato analizando el problema.

el codigo es este:

#include<iostream.h>

#include<math.h>

int main()
{
float a,b,c,d,r,img,x1,x2,neg;

cout<<"Ingrese el valor de a:";cin>>a;
cout<<"Ingrese el valor de b:";cin>>b;
cout<<"Ingrese el valor de c:";cin>>c;
cout<<"Ingrese el valor de d:";cin>>d;

if(a!=0)
{

if(b*b-4*a*c>=0)
{
x1=(-b+(sqrt((b*b)-4*a*c)))/(2*a);
x2=(-b-(sqrt((b*b)-4*a*c)))/(2*a);
cout<<"valor de x1 es:"<<x1<<endl<<"el valor de x2 es:"<<x2;

if(img<0)
{
neg=img*-1;
cout<<"el numero se compone de una oarte real i una imaginaria"<<endl;
cout<<r<<"t"<<neg;

}else cout<<r<<"t"<<img;

}else
{
r=-b/2*a;
img=(sqrt(b*b-4*a*c)/2*a);
}

}else cout<<"no cumple la condicion cuadratica";

cin.ignore();cin.ignore();

}

espero su ayuda, necesito saber
en donde esta mal estructurado o si me estoy omitiendo un paso, muchas gracias desde ya
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:problema al estructurar el codigo de la ecuacio

Publicado por Tom (481 intervenciones) el 14/10/2008 14:02:07
Es difícil saber a qué te refieres.
De todos modos, prueba lo siguiente:

double tmp = (b * b) - (4.0 * a * c); // Paréntesis por claridad

...

if(tmp >= 0.0) {
...
x1 = (-b + sqrt(tmp)) / (2 * a);
...

y si tmp no cumple >= 0.0 debes cambiar el código, ya que intentas hacer la raiz cuadrada de un número negativo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema al estructurar el codigo de la ecuacio

Publicado por eduardo (82 intervenciones) el 14/10/2008 20:51:05
No entiendo porque recibes "d" como entrada y no lo utilizas pues si lo que intentas es hallar el discriminante de la ecuación, este no es un dato de entrada, debe ser calculado por el programa y en base a este dato tomar las decisiones correctas en el mismo:
Una ecuación de segundo orden tiene la siguiente forma general:
a*x ^2 + b * x + c = 0
Donde a,b son los coeficientes de la ecuación, c = término independiente.
Hacemos D = b ^2 - 4 * a * c; (Discriminante)
Segun sea D se presentan los diferentes casos, acá te dejo el programa q hice en C.
/* Este programa pide los coeficientes de una
ecuacion de 2º grado para hallar sus raices reales
y tambien en el caso q fueran complejas */

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>

int main( )
{
float a, b, c;
float D, real, imag;
float x1, x2;

printf( " aX2 + bX + c = 0 " );

printf( " Ingrese primer coeficiente: " );
scanf( "%f",&a );

printf( " Ingrese segundo coeficiente: " );
scanf( "%f",&b );

printf( " Ingrese tercer coeficiente: " );
scanf( "%f",&c );

if ( a == 0 && b == 0 )
printf( " LA ECUACION ES DEGENERADA" );
else if ( a == 0 )
printf( " Una sola raiz(ec.1er grado): %.3f", -c/b );
else {
D = b * b - 4 * a * c;
real = -b/(2 * a);
imag = sqrt( fabs(D) ) / ( 2 * a );

if ( D == 0 ) {
x1 = real + imag;
x2 = x1;
printf( " Raices iguales: " );
printf( " x1: %.3f x2: %.3f",x1,x2 );
}
else if ( D > 0 ) {
x1 = real + imag;
x2 = real - imag;
printf( " Raices diferentes: " );
printf( " x1: %.3f x2: %.3f", x1, x2 );
}
else {
printf( " RAICES COMPLEJAS " );
printf( " x1: %.3f + %.3fi", real, imag );
printf( " x2: %.3f - %.3fi", real, imag );
}
}

getch();
return 0;
}
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema al estructurar el codigo de la ecuacio

Publicado por Julio Cesar (2 intervenciones) el 15/10/2008 01:32:30
hola, gracias por tomar en cuenta mi problema, gracia a Tom por que ese tips que me dio para encerrar esa ecuacion me sirvio pero al final lo coloque con respectivos parentesis y gracias eduardo por tomarse la molestia de escribir un codigo completo sobre mi problema, solo que esta en c y pues el profe lo quiere en c++, de verdad aunque directamente no me ayudaron me guiaron en pasos que me mostraro el error que queria y pude estructurarlo de nuevo, y que felicidad que corrio.

dejo el codigo de mi programa para que vean lo que queria diseñar y para otro usuario que tenga mi duda y se guie(estructurado en Builder):

//Programa que resuelve una ecuasion de segundo grado

#include<math.h>
#include<iostream.h>

void main()
{
float a,b,c,d,r,img,x1,x2,neg;

cout<<"Ingrese el valor de a:";cin>>a;
cout<<"Ingrese el valor de b:";cin>>b;
cout<<"Ingrese el valor de c:";cin>>c;

if(a!=0)
{
if(((b*b)-(4.0*a*c))>=0.0)
{
x1=((-1*b)+(sqrt((b*b)-(4.0*a*c))))/(2*a);
x2=((-1*b)-(sqrt((b*b)-(4.0*a*c))))/(2*a);
cout<<"valor de x1 es:"<<x1<<endl<<"valor de x2 es:"<<x2;
}else
{
r=(-1*b)/(2*a);
img=((sqrt((b*b)-(4.0*a*c)*(-1))))/(2*a);
if(img<=0.0)
{
neg=img*-1;
cout<<r<<"+"<<neg<<endl;
cout<<r<<"-"<<neg<<endl;

}else
{
cout<<r<<"+"<<img<<endl;
cout<<r<<"-"<<img<<endl;
}
}
}else cout<<"el valor no es cuadratico"<<endl;

cin.ignore();cin.ignore();
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar