elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Resuelto]Ecuaciones bicuadradas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Resuelto]Ecuaciones bicuadradas  (Leído 3,870 veces)
alex030293

Desconectado Desconectado

Mensajes: 12


Aprendiendo a programar en C a pocos...


Ver Perfil
[Resuelto]Ecuaciones bicuadradas
« en: 30 Abril 2011, 18:56 pm »

Después de unos días con C, todo lo que me deja 2 de BAC, he pillado unas cosillas básicas y, después de hacer la de 2 grado, ahora quiero hacer un programa para ecuaciones bicuadradas.
 
He intentado un código para resolver bicuadradas metiendo los coeficientes, pero al meterlos no hace nada, creo que hay un lio de if().

A ver si alguien me puede ayudar a ver que le pasa.....


Código:
//*Ecuaciones bicuadradas*/
#include <stdio.h>
#include <conio.h>
#include <math.h>

int main(void)
{
    /*Definir variables*/
    int a;
    int b;
    int c;
    float value;
    float value2;
    float d;
    float e;
    
    /*Introducir coeficientes*/
    printf("Introduce el coeficiente del la x^4:");
    scanf("%d", &a);
    printf("Introduce el coeficiente del la x^2:");
    scanf("%d", &b);
    printf("Introduce el termino independiente:");
    scanf("%d", &c);
    value = ((-b)+sqrt(b*b-4*a*c))/(2*a);
    value2 = ((-b)-sqrt(b*b-4*a*c))/(2*a);
    d = sqrt(value);
    e = sqrt(value2);      
    
    /*Para raíces 0 o negativas*/
    if((b*b-4*a*c) <= 0)
    {
    printf("No existe solucion");
    }
        
    /*Para raíces positivas*/
    if((b*b-4*a*c) > 0){                    
    if((value > 0) && (value2 > 0))
    {      
    printf("La x vale: +- %.3f y +- %.3f", d, e);
    }
    if((value < 0) && (value2 > 0))
    {      
    printf("La x vale: +- %.3f ", e);
    }
    if((value > 0) && (value2 < 0))
    {      
    printf("La x vale: +- %.3f", d);
    }
    if((value < 0) && (value2 < 0))
    {      
    printf("No existe solucion");
    }
    }
    
    getch();
    return 0;
}




« Última modificación: 30 Abril 2011, 21:06 pm por alex030293 » En línea

www.flickr.com/photos/alex030293

Mi equipo: Intel i7 955 @4.0GHz + Nvidia GTX 460 + Nvidia 9800GT para Physx + 12Gb RAM DDR3 1600 Mghz + HDD Seagate Barracuda + Themaltake ProWater 850i.
alex030293

Desconectado Desconectado

Mensajes: 12


Aprendiendo a programar en C a pocos...


Ver Perfil
Re: [Problemilla]Ecuaciones bicuadradas
« Respuesta #1 en: 30 Abril 2011, 19:50 pm »

Bingo!!
El código esta correcto, sólo que yo lo probaba con a=1 b=3 y c=0.
Con esos valores se quedaba parado, porque para c=0, el término independiente es 0, y hay que sacar factor común. (ax^4-bx^2=0) Y x vale 0 y sqrt(a/b).

Así que añadiendo esa parte, sin fallo.
A vosotros os parecerá una pequeñez, pero para mi supone un logro y estoy bastante orgulloso de esto, aunque parezca mentira.(Viva el autodidactismo)
Hoy ya duermo con una sonrisa.
Un saludo.


Código:
/*Ecuaciones bicuadradas*/
#include <stdio.h>
#include <conio.h>
#include <math.h>

int main(void)
{
    /*Definir variables*/
    float a;
    float b;
    float c;
    float value;
    float value2;
    float d;
    float e;
    float f;
   
    /*Introducir coeficientes*/
    printf("Introduce el coeficiente del la x^4:");
    scanf("%f", &a);
    printf("Introduce el coeficiente del la x^2:");
    scanf("%f", &b);
    printf("Introduce el termino independiente:");
    scanf("%f", &c);
    value = ((-b)+sqrt(b*b-4*a*c))/(2*a);
    value2 = ((-b)-sqrt(b*b-4*a*c))/(2*a);
    d = sqrt(value);
    e = sqrt(value2);     
    f = sqrt(b/a);
   
    if((a == 0) && (b == 0) && (c == 0))
    {
    printf("Queda 0=0.");   
    }
     
    /*Para raíces 0 o negativas*/
    if((a != 0) && (b != 0) && (b*b-4*a*c) <= 0)
    {
    printf("No existe solucion");
    }
    /*Si no hay término independiente*/
    if((a != 0) && (b != 0) && (c == 0))
    {
    printf("La x vale 0 y +- %.3f", f);     
    }   
    /*Para raíces positivas*/
    if((b*b-4*a*c) > 0)
    {                   
         if((value > 0) && (value2 > 0))
         {       
         printf("La x vale: +- %.3f y +- %.3f", d, e);
         }
         if((value <= 0) && (value2 > 0))
         {       
         printf("La x vale: +- %.3f ", e);
         }
         if((value > 0) && (value2 <= 0))
         {       
         printf("La x vale: +- %.3f", d);
         }
         if((value < 0) && (value2 < 0))
         {       
         printf("No existe solucion");
         }
    }
   
    getch();
    return 0;
}


« Última modificación: 30 Abril 2011, 20:07 pm por alex030293 » En línea

www.flickr.com/photos/alex030293

Mi equipo: Intel i7 955 @4.0GHz + Nvidia GTX 460 + Nvidia 9800GT para Physx + 12Gb RAM DDR3 1600 Mghz + HDD Seagate Barracuda + Themaltake ProWater 850i.
Acermax

Desconectado Desconectado

Mensajes: 55


Ver Perfil
Re: [Problemilla]Ecuaciones bicuadradas
« Respuesta #2 en: 30 Abril 2011, 20:03 pm »

Aún así un par de cosas.

El valor de 'd', 'e' y 'f' hay que tener cuidao al calcularlos. En este caso si 'value', value2' o 'a|b' son negativos, estarías intentando hacer la raíz cuadrada de un número negativo. Te recomiendo que lo calcules dentro de las comprobaciones, o le pongas una comprobación adicional.

También a la hora de programar te recomiendo tabular las cosas, porque da un poco de cosa ponerse a mirar ese tocho de código seguido. Lo mejor es que lo que esté dentro de un if lo tabules a la derecha, y así queda de forma escalonada y mucho más legible.

Y por último, intenta no utilizar la librería conio.h xD
En línea

alex030293

Desconectado Desconectado

Mensajes: 12


Aprendiendo a programar en C a pocos...


Ver Perfil
Re: [Problemilla]Ecuaciones bicuadradas
« Respuesta #3 en: 30 Abril 2011, 20:12 pm »

Aún así un par de cosas.

El valor de 'd', 'e' y 'f' hay que tener cuidao al calcularlos. En este caso si 'value', value2' o 'a|b' son negativos, estarías intentando hacer la raíz cuadrada de un número negativo. Te recomiendo que lo calcules dentro de las comprobaciones, o le pongas una comprobación adicional.

También a la hora de programar te recomiendo tabular las cosas, porque da un poco de cosa ponerse a mirar ese tocho de código seguido. Lo mejor es que lo que esté dentro de un if lo tabules a la derecha, y así queda de forma escalonada y mucho más legible.

Y por último, intenta no utilizar la librería conio.h xD

Varias cosas:

1- Gracias por contestar, lo primero.
2- Utilizo conio.h, a pesar de que ya me dijeron que mejor no, que esta obsoleta, que no es estándar, etc etc, si no uso getch() no consigo que se quede la ventana. Ni con system pause ni na.
3- creo que esos valores negativos que dices ya están contemplados en el código.
4- Código actualizado con tabs.
En línea

www.flickr.com/photos/alex030293

Mi equipo: Intel i7 955 @4.0GHz + Nvidia GTX 460 + Nvidia 9800GT para Physx + 12Gb RAM DDR3 1600 Mghz + HDD Seagate Barracuda + Themaltake ProWater 850i.
Acermax

Desconectado Desconectado

Mensajes: 55


Ver Perfil
Re: [Problemilla]Ecuaciones bicuadradas
« Respuesta #4 en: 30 Abril 2011, 20:19 pm »

Me refiero, a que al principio de todo del programa haces esto:
    value = ((-b)+sqrt(b*b-4*a*c))/(2*a);
    value2 = ((-b)-sqrt(b*b-4*a*c))/(2*a);
    d = sqrt(value);
    e = sqrt(value2);     
    f = sqrt(b/a);
luego si, ya miras cuales eran negativos o no para imprimirlo. Hombre en este caso la función sqrt es bastante segura y ya tendrá en cuenta que si value o value2 son negativos, no tiene que hacer nada, pero aún así no está de más tenerlo en cuenta tu también.

Un saludo.
En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [Problemilla]Ecuaciones bicuadradas
« Respuesta #5 en: 30 Abril 2011, 20:44 pm »

Si no puedes pausar el programa, vacía el buffer de entrada antes, luego utiliza una función como:

getchar();
ó:
fgetc(stdin);

que son equivalentes.
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ecuaciones v 0.01 1er grado. [Batch]
Scripting
leogtz 0 3,597 Último mensaje 12 Abril 2009, 01:16 am
por leogtz
Ecuaciones (BATCH) « 1 2 3 »
Scripting
FerJGS 21 15,880 Último mensaje 12 Julio 2010, 18:43 pm
por FerJGS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines