Duda, Programación en C: Trabajo con Punteros
Publicado: 05 Sep 2009, 21:33
Hola, tengo un pequeño problema desde hace un tiempo, a ver si me pueden ayudar.
El programa es un ejercicio de trabajo con punteros y paso de parámetros por punteros. Se supone que se crea una función que capture los coeficientes a,b y c de una ecuación cuadrática y cambie los valores almacenados en a y b a través del uso de sus direcciones de memoria.
Les muestro mi código.
El programa funciona correctamente para operaciones como a=1,b=2,c=-3 ; pero pierde su efectividad al tratarse de números más grandes.
Por ejemplo...
Lo que es correcto, pero...
Siendo que las soluciones son 0.78 y -2.11
Ojalá me puedan ayudar.
El programa es un ejercicio de trabajo con punteros y paso de parámetros por punteros. Se supone que se crea una función que capture los coeficientes a,b y c de una ecuación cuadrática y cambie los valores almacenados en a y b a través del uso de sus direcciones de memoria.
Les muestro mi código.
Código: Seleccionar todo
#include <stdio.h>
#include <math.h>
#include <string.h>
int funcion (float *a, float *b, float *c);
void main()
{
float a,b,c;
printf ("\t\tEcuacion cuadratica\n\n");
printf ("Coeficiente a: ");
scanf ("%f",&a);
printf ("Coeficiente b: ");
scanf ("%f",&b);
printf ("Coeficiente c: ");
scanf ("%f",&c);
int valida;
funcion (&a,&b,&c);
valida = (a==0 && b==0);
if(!valida)
printf ("Las soluciones son: %.3f y %.3f. \n", a,b);
else
printf ("Tiene raíces complejas.\n");
}
int funcion (float *ah, float *be, float *ce)
{
//Comprueba si tiene raíces complejas
if ((*be * *be -(4* *ah * *ce)) < 0){
*ah = 0;
*be = 0;
}
else{
float aux = *ah;
*ah = (-(*be) + sqrt (*be * *be -4 * aux * *ce)) /2* aux;
*be = (-(*be) - sqrt (*be * *be -4 * aux * *ce)) /2* aux;
}
}
Por ejemplo...
Código: Seleccionar todo
Ecuacion cuadratica
Coeficiente a: 1
Coeficiente b: 2
Coeficiente c: -3
Las soluciones son: 1.000 y -3.000.
Código: Seleccionar todo
Ecuacion cuadratica
Coeficiente a: 3
Coeficiente b: 4
Coeficiente c: -5
Las soluciones son: 7.077 y -19.077
Ojalá me puedan ayudar.