Descripción del problema:
Encontrar la solución a una ecuación de segundo grado.
Dada la ecuación de segundo grado ax²+bx+c=0, se calcula el discriminante
disc=b²-4ac
Si el discriminante es mayor que 0 las dos raíces son reales y distintas
x1=(-b+√disc)/(2a)
x2=(-b-√disc)/(2a)
Si el discriminante es igual a 0, entonces las dos raíces son reales e iguales y se calculan:
x1=x2=-b/2
Y si el discriminante es menor que 0, entonces las dos raíces son complejas conjugadas y se calculan:
xr=-b/2a xi= (√-disc)/2a
Código en C
Para empezar a realizar este programa primero se escribe #include<stdio.h> que es la libreria estándar del lenguaje de programación C, enseguida se hace llamada a la libreria<stdio>
Ahora abrimos la función principal del programa int main(int argc, char** args), y se declararan todas las variables que voy a utilizar.
Significado de las variables:
a es el coeficiente de x²
b es el coeficiente x
c es la constante de la ecuación
disc es el valor del discriminante
x1 y x2 representan el valor de las raíces reales
xi es la raíz compleja imaginaria
xr la raíz compleja real
Después de haber declarado las variables, ahora pedimos al usuario el valor de a, b y c, para poder obtener el valor del discriminante, pero con la condición de que el valor de a no sea 0, si es así se pide volver a introducir el valor de a haciendo uso del bucle while.
#include<stdio.h>
#include<math.h>
int main(int argc, char** args){
float a, b, c, disc, x1, x2, xi, xr;
printf("\n\t\tSolucion de una ecuacion de segundo grado");
printf("\n\t\t_________________________________________\n\n\n");
printf("\t\t\tEscribe el valor de a --> ");
scanf("%f", &a);
while(a==0){
printf("\t\tEl valor de a no puede ser 0 ingrese el valor de nuevo -->");
scanf("%f", &a);
}
printf("\t\t\tEscribe el valor de b --> ");
scanf("%f", &b);
printf("\t\t\tEscribe el valor de c --> ");
scanf("%f", &c);
Para obtener el valor del discriminante se utilizó la función pow(), que cumple la función de elevar un numero a una determinada potencia, la forma de escribirse es pow(base, exponente).
Después se utilizo la estructura condicional if para determinar si el valor del disc es mayor que 0, entonces entra a la condición y se efectúan las operaciones correspondientes para obtener x1 y x2.
Si no se cumple esa condición entonces entra a otro condicional para saber si disc es igual a 0, y se lleva acabo la operación indicada, si el disc no es igual a 0 entonces el valor del discriminante pasa realizar la operación correspondiente.
Por último para terminar el programa se cierran los las estructuras condicionales y la función principal main.
disc=pow(b, 2.0)-4*a*c;
if(disc>0.0){
printf("\t\t\tLas dos raices son reales");
x1=((-b+sqrt(disc))/(2.0*a));
x2=((-b-sqrt(disc))/(2.0*a));
printf("\n\t\t\tx1=%.2f x2=%.2f", x1, x2);
}
else{
if(disc==0.0){
x1=(-b)/(2.0*a);
printf("\n\t\t\tLa ecuacion solo tiene una raiz %.2f", x1);
}
else{
xr=(-b/(2.0*a));
xi=(sqrt(-disc)/(2.0*a));
printf("\n\t\tLa raiz real es %.2f y la imaginaria es %.2f", xr, xi);
}
}
printf("\n\n\t\t\t");
}
Programa ejecutado, donde el discriminante es:
Mayor que 0:

Menor que 0:

Igual a 0:

Y este es el código para descargar:
ecuacion.c