72 lines
2.0 KiB
C
72 lines
2.0 KiB
C
|
/*
|
||
|
Acción que, dados tres números reales que representan los coeficientes de una
|
||
|
ecuación de segundo grado, retorne sus raíces, en caso de que existan.
|
||
|
|
||
|
En caso contrario, que inicialice las raíces a 0.
|
||
|
|
||
|
Recordad que dada la ecuación A * x2 + B * x + C las raíces se calculan:
|
||
|
|
||
|
```
|
||
|
x1 = (-B + sqrt(B2 - 4 * A * C)) / (2 * A)
|
||
|
```
|
||
|
|
||
|
Si la expresión dentro de la raíz es negativa quiere decir
|
||
|
que la ecuación no tiene raíces.
|
||
|
|
||
|
Podéis suponer que la función raíz cuadrada está ya definida y su cabecera es:
|
||
|
|
||
|
```
|
||
|
function squareRoot(x: real): real;
|
||
|
```
|
||
|
Declarad las variables necesarias para llamar a la acción anterior
|
||
|
e indicad cómo se llamaría.
|
||
|
|
||
|
*/
|
||
|
|
||
|
#include <stdio.h>
|
||
|
|
||
|
// Función para calcular la raíz cuadrada utilizando el método de Newton
|
||
|
float squareRoot(float x) {
|
||
|
float estimacion = x / 2.0; // Estimación inicial
|
||
|
float epsilon = 0.0001; // Precisión deseada
|
||
|
|
||
|
while ((estimacion * estimacion - x) > epsilon || (x - estimacion * estimacion) > epsilon) {
|
||
|
estimacion = (estimacion + x / estimacion) / 2.0;
|
||
|
}
|
||
|
|
||
|
return estimacion;
|
||
|
}
|
||
|
|
||
|
// Función para calcular las raíces de una ecuación de segundo grado
|
||
|
void calcularRaices(float A, float B, float C, float *raiz1, float *raiz2) {
|
||
|
float discriminante = B * B - 4 * A * C;
|
||
|
|
||
|
if (discriminante >= 0) {
|
||
|
float raiz_discriminante = squareRoot(discriminante);
|
||
|
*raiz1 = (-B + raiz_discriminante) / (2 * A);
|
||
|
*raiz2 = (-B - raiz_discriminante) / (2 * A);
|
||
|
} else {
|
||
|
*raiz1 = 0;
|
||
|
*raiz2 = 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int main() {
|
||
|
float coeficiente_A, coeficiente_B, coeficiente_C, raiz1, raiz2;
|
||
|
|
||
|
printf("Introduce los coeficientes de la ecuacion de segundo grado.\nA: ");
|
||
|
scanf("%f", &coeficiente_A);
|
||
|
|
||
|
printf("B: ");
|
||
|
scanf("%f", &coeficiente_B);
|
||
|
|
||
|
printf("C: ");
|
||
|
scanf("%f", &coeficiente_C);
|
||
|
|
||
|
calcularRaices(coeficiente_A, coeficiente_B, coeficiente_C, &raiz1, &raiz2);
|
||
|
|
||
|
printf("\nLas raices son: %.2f y %.2f\n\n", raiz1, raiz2);
|
||
|
|
||
|
return 0;
|
||
|
}
|